Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Reexport generated struct types #96

Open
Pzixel opened this issue May 5, 2022 · 5 comments
Open

Reexport generated struct types #96

Pzixel opened this issue May 5, 2022 · 5 comments

Comments

@Pzixel
Copy link
Contributor

Pzixel commented May 5, 2022

Consider following config:

export default defineConfig({
  contracts: {
    mainnet: {
      bancorCollection: '0xEC9596e0eB67228d61a12CfdB4b3608281F261b3',
    },
  },
})

Now If we call it it all compiles:

img

However, if we try to specify struct name it won't work:

img

The problem is type is not reexported so it cannot be accessed outside. It may be useful in cases when I want to write a function like

function processPoolData(data: PoolStructOutput) { ... }

P.S. for some reason generation doesn't work for all types. For example following config:

export default defineConfig({
  contracts: {
    mainnet: {
      uniswapV3: '0x8ad599c3A0ff1De082011EFDDc58f1908eb6e6D8'
    },
  },
})

Leads to

slot0(overrides?: CallOverrides): Promise<[
    BigNumber,
    number,
    number,
    number,
    number,
    number,
    boolean
] & {
    sqrtPriceX96: BigNumber;
    tick: number;
    observationIndex: number;
    observationCardinality: number;
    observationCardinalityNext: number;
    feeProtocol: number;
    unlocked: boolean;
}>;
snapshotCumulativesInside(tickLower: BigNumberish, tickUpper: BigNumberish, overrides?: CallOverrides): Promise<[
    BigNumber,
    BigNumber,
    number
] & {
    tickCumulativeInside: BigNumber;
    secondsPerLiquidityInsideX128: BigNumber;
    secondsInside: number;
}>;

Note that it didn't generate proper named struct for ABI.

@Pzixel
Copy link
Contributor Author

Pzixel commented May 7, 2022

Ping? I can try adding this myself if you're agreed that it's useful to reexport generated types

@krzkaczor
Copy link
Member

Hey @Pzixel!

Yes, this looks definitely like an important feature but I am not sure what exactly causes the problem. Structs should be exported in a code that TypeChain generates. You might just need a different import path to get them. Have you tried that?

@Pzixel
Copy link
Contributor Author

Pzixel commented May 15, 2022

Hi!

Sorry, I'm not following which path you mean. I don't see any typechain artifacts in my eth-sdk-enabled project.

@Pzixel
Copy link
Contributor Author

Pzixel commented Jun 9, 2022

Hi. Ping? I think this is quite crucial. I think I just might fix this, but I'm confused by you saying it already should work.

Could you please take a look on example I provide? Where can we find these types? If we look at eth-sdk-client we'll see

import { providers, Signer } from 'ethers';
import * as types from './types';
export declare function getContract(address: string, abi: object, defaultSignerOrProvider: Signer | providers.Provider): any;
export declare type MainnetSdk = ReturnType<typeof getMainnetSdk>;

So we dive into types that gives

import type * as mainnet from "./mainnet";
export type { mainnet };
export * as factories from "./factories";
export type { UniswapV3 } from "./mainnet/UniswapV3";
export { UniswapV3__factory } from "./factories/mainnet/UniswapV3__factory";

And this is it. As you can see only UniswapV3 type gets exported, inner structs remain private since they aren't reexported.

@Pzixel
Copy link
Contributor Author

Pzixel commented Jun 9, 2022

I've just took a look and it looks like typechain isn't giving any names to such types. So I might start from there and then return here. You see even if typechain was properly generating intermediate structs they wouldn't be accessible since they aren't reexported

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants