UNPKG

@sei-js/cosmjs

Version:

TypeScript library for CosmJS interactions on the Sei blockchain

171 lines (170 loc) 6.39 kB
"use strict"; 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;