@sei-js/cosmjs
Version:
TypeScript library for CosmJS interactions on the Sei blockchain
171 lines (170 loc) • 6.39 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getSigningStargateClient = exports.getStargateClient = exports.createSeiAminoTypes = exports.createSeiRegistry = void 0;
const proto_signing_1 = require("@cosmjs/proto-signing");
const stargate_1 = require("@cosmjs/stargate");
const encoding_1 = require("@sei-js/cosmos/encoding");
/**
* Creates a Registry object that maps CosmWasm and Sei protobuf type identifiers to their actual implementations.
*
* @example
* ```tsx
* import { Registry } from "@cosmjs/proto-signing";
* import { defaultRegistryTypes } from "@cosmjs/stargate";
* import { getSigningStargateClient } from '@sei-js/cosmjs';
* import { seiProtoRegistry } from '@sei-js/cosmos/encoding';
*
* ...
*
* // Set up Sei proto registry
* const registry = createSeiRegistry();
*
* // Create a client with registry
* const signingClient = await getSigningStargateClient(RPC_URL, offlineSigner, { registry });
* ```
*
* @returns A Registry object that maps CosmWasm and Sei protobuf type identifiers to their actual implementations.
* @category Config
*/
const createSeiRegistry = () => {
return new proto_signing_1.Registry([...stargate_1.defaultRegistryTypes, ...encoding_1.seiProtoRegistry]);
};
exports.createSeiRegistry = createSeiRegistry;
/**
* Creates a mapping of stargate message types to Sei Amino types.
*
* @example
* ```tsx
* import { Registry } from "@cosmjs/proto-signing";
* import { defaultRegistryTypes } from "@cosmjs/stargate";
* import { getSigningStargateClient } from '@sei-js/cosmjs';
* import { createSeiRegistry, createSeiAminoTypes } from "@sei-js/cosmos/encoding";
*
* ...
*
* // Create a client with registry
* const signingClient = await getSigningStargateClient(RPC_URL, offlineSigner, { registry: createSeiRegistry(), aminoTypes: createSeiAminoTypes() });
* ```
*
* @returns A mapping of stargate message types to Sei Amino types.
* @category Config
*/
const createSeiAminoTypes = () => {
return new stargate_1.AminoTypes(encoding_1.aminoConverters);
};
exports.createSeiAminoTypes = createSeiAminoTypes;
/**
* Gets a @cosmjs/stargate client used to interact with the Sei chain.
*
* @example
* With custom registry and amino types
* ```tsx
* import { getStargateClient } from '@sei-js/cosmjs';
*
* ...
*
* // Create a client with registry
* const signingClient = await getStargateClient(RPC_URL);
* ```
*
* @param rpcEndpoint The endpoint of the RPC node used to interact to the Sei chain.
* @param options A StargateClientOptions object used to configure the stargate client.
* @returns A StargateClient object used to interact with the Sei chain.
* @category Clients
*/
const getStargateClient = async (rpcEndpoint, options) => {
return stargate_1.StargateClient.connect(rpcEndpoint, options);
};
exports.getStargateClient = getStargateClient;
/**
* Gets a @cosmjs/stargate client used to sign transactions on the Sei chain.
*
* @example
* Standard usage
* ```tsx
* import { getSigningStargateClient } from '@sei-js/cosmjs';
*
* // Don't forget to connect if using a wallet extension
* // or create a wallet from a mnemonic (See above)
* await window.compass.connect(chainId);
*
* const offlineSigner = await window.compass.getOfflineSigner(chainId);
*
* const signingClient = await getSigningStargateClient(RPC_URL, offlineSigner);
* ```
*
* @example
* With custom registry and amino types
* ```tsx
* import { Registry } from "@cosmjs/proto-signing";
* import { defaultRegistryTypes } from "@cosmjs/stargate";
* import { getSigningStargateClient } from '@sei-js/cosmjs';
* import { aminoConverters, seiProtoRegistry } from "@sei-js/cosmos/encoding";
*
* ...
*
* // Set up Sei proto registry
* const registry = new Registry([
* ...defaultRegistryTypes,
* ...seiProtoRegistry,
* ]);
*
* // Create Amino Types
* const aminoTypes = new AminoTypes(aminoConverters);
*
* const offlineSigner = await window.compass.getOfflineSigner(chainId);
*
* // Create a client with registry
* const signingClient = await getSigningStargateClient(RPC_URL, offlineSigner, { registry, aminoTypes });
* ```
*
* @example
* Transfer tokens (Bank send):
* ```tsx
* import { calculateFee } from '@cosmjs/stargate';
* import { getSigningStargateClient } from '@sei-js/cosmjs';
*
* const fee = calculateFee(100000, "0.1usei");
* const amount = { amount: SEND_AMOUNT, denom: TOKEN_DENOM };
*
* const offlineSigner = await window.compass.getOfflineSigner(chainId);
*
* const signingClient = await getSigningStargateClient(RPC_URL, offlineSigner);
* const sendResponse = await signingClient.sendTokens(SENDER_ADDRESS, DESTINATION_ADDRESS, [amount], fee);
* ```
*
* @example
* IBC Transfer:
* ```tsx
* import { calculateFee } from '@cosmjs/stargate';
* import { Encoder } from '@sei-js/cosmos/encoding';
*
* const amount = { amount: SEND_AMOUNT, denom: TOKEN_DENOM };
*
* const ibcResponse = await signingClient.sendIbcTokens(SENDER_ADDRESS, DESTINATION_ADDRESS, amount, 'transfer', CHANNEL_ID, undefined, undefined, fee)
*
* // Create message to place an order
* const msg = Encoder.cosmos.bank.v1beta1.MsgSend.fromPartial({ contractAddr, creator, funds, orders });
* const fee = calculateFee(150000, "0.1usei");
*
* // Sign and broadcast the message
* const response = signingClient.signAndBroadcast(firstAccount.address, [msg], fee);
* ```
*
* @param rpcEndpoint The endpoint of the RPC node used to interact to the Sei chain.
* @param signer An OfflineAminoSigner or OfflineDirectSigner from @cosmjs/amino containing info about the signer.
* @param options A SigningStargateClientOptions object used to configure the stargate client.
* @returns A SigningStargateClient object used to sign transactions on the Sei chain.
* @category Clients
*/
const getSigningStargateClient = async (rpcEndpoint, signer, options) => {
const registry = (0, exports.createSeiRegistry)();
const aminoTypes = (0, exports.createSeiAminoTypes)();
return stargate_1.SigningStargateClient.connectWithSigner(rpcEndpoint, signer, {
registry,
aminoTypes,
broadcastPollIntervalMs: options?.broadcastPollIntervalMs || 400, // Need to decrease this because Sei is so fast ⚡🏃💨💨
...options
});
};
exports.getSigningStargateClient = getSigningStargateClient;