dethcrypto / dethcrypto/TypeChain
Give names for intermediate structs
- Dominant language
- TypeScript
- Stars
- 2.8k
- Forks
- 376
- PR merge metrics
- No merged PRs in 30d
Description
Consider following contract
```solidity
contract TypechainTest {
struct Input {
uint256 a;
int128 b;
bool c;
}
struct Output {
uint256 d;
int128 e;
}
function test(Input calldata input) public pure returns (Output memory result) {
result.d = input.a;
result.e = input.b;
}
}
```
it leads to following generation:
```ts
...
test(
input: { a: BigNumberish; b: BigNumberish; c: boolean },
overrides?: CallOverrides
): Promise<[BigNumber, BigNumber] & { d: BigNumber; e: BigNumber }>;
callStatic: {
test(
input: { a: BigNumberish; b: BigNumberish; c: boolean },
overrides?: CallOverrides
): Promise<[BigNumber, BigNumber] & { d: BigNumber; e: BigNumber }>;
};
...
```
Which isn't ideal for several reasons. One of the biggest problems that it's not possible to write function like:
```ts
let x = prepareArg();
contract.test(x);
```
Because `prepareArg` should contain `struct Input` as part of signature but it's not generated.
I propose generation changed to:
```ts
export type Input = { a: BigNumberish; b: BigNumberish; c: boolean };
export type Output = { d: BigNumber; e: BigNumber };
...
test(
input: Input,
overrides?: CallOverrides
): Promise<[BigNumber, BigNumber] & Output>;
callStatic: {
test(
input: Input,
overrides?: CallOverrides
): Promise<[BigNumber, BigNumber] & Output>;
};
...
```
I can try implementing it if you're agreed this is the way to go.
Contributor guide
Assessment
This issue has not been assessed yet.