telescope icon indicating copy to clipboard operation
telescope copied to clipboard

allow customization of stargate clients with multiple modules/packages for one client (both amino/proto registries)

Open pyramation opened this issue 1 year ago • 0 comments

should be! with telescope you can pull the registry from the client generated files and make one massive stargate client

we should make a plugin option in telescope to make this easier, since each module currently gets bundled separately to avoid naming collisions (e.g. different version of governance can be in protos, so we had to make a sensible default)

manual work around for now:

to manually do this, you’d find the registry/amino converters in the client of each package you want to combine, say osmosis and wasmd protos:

https://github.com/osmosis-labs/osmojs/blob/ad20842e5183a1182317f70509e66dc913b926be/packages/osmojs/src/codegen/osmosis/client.ts#L32-L48

https://github.com/osmosis-labs/osmojs/blob/main/packages/osmojs/src/codegen/cosmwasm/client.ts#L6-L9

merge the arrays

then

import { GeneratedType, Registry, OfflineSigner } from "@cosmjs/proto-signing";
import { defaultRegistryTypes, AminoTypes, SigningStargateClient } from "@cosmjs/stargate";

 const registry = new Registry([…myCombinedProtoRegistry]);
  const aminoTypes = new AminoTypes({
    …myCombinedAminoConverters
  });

then make your client

const client = await SigningStargateClient.connectWithSigner(rpcEndpoint, signer, {
    registry: (registry as any),
    aminoTypes
  });

Now you have a single client that has everything you need!

specs for TelescopeOptions

  • [ ] generate a client file at the root, not in the module
  • [ ] allow customization of the stargate client name
  • [ ] allow for multiple clients, but this requires some thought around name configuration (maybe defaults to client1, client2 when there are more than 1)
  • [ ] should we generate one client per it's own file? for tree-shaking?

pyramation avatar Jun 09 '23 02:06 pyramation