npm install @coolcatchain/chain
import { coolcat } from "@coolcatchain/chain";
const main = async () => {
const { createLCDClient } = coolcat.ClientFactory;
const client = await createLCDClient({ restEndpoint: REST_ENDPOINT });
// now you can query the modules
const balance = await client.cosmos.bank.v1beta1.allBalances({
address: "ccat18kzy6ckql3e68uzlmzenakd56tr2fzr5s8vf9s",
});
};
import { cosmos } from "@coolcatchain/chain";
const {
fundCommunityPool,
setWithdrawAddress,
withdrawDelegatorReward,
withdrawValidatorCommission,
} = cosmos.distribution.v1beta1.MessageComposer.fromPartial;
const { multiSend, send } = cosmos.bank.v1beta1.MessageComposer.fromPartial;
const {
beginRedelegate,
createValidator,
delegate,
editValidator,
undelegate,
} = cosmos.staking.v1beta1.MessageComposer.fromPartial;
const { deposit, submitProposal, vote, voteWeighted } =
cosmos.gov.v1beta1.MessageComposer.fromPartial;
import { ibc } from "@coolcatchain/chain";
const { transfer } = ibc.applications.transfer.v1.MessageComposer.withTypeUrl;
⚡️ For web interfaces, we recommend using cosmos-kit. Continue below to see how to manually construct signers and clients.
Use getSigningCoolcatClient
to get your SigningStargateClient
, with the proto/amino messages full-loaded.
import { getSigningCoolcatClient } from "@coolcatchain/chain";
const stargateClient = await getSigningCoolcatClient({
rpcEndpoint,
signer, // OfflineSigner
});
To broadcast messages, you can create signers with a variety of options:
- cosmos-kit (recommended)
- keplr
- cosmjs
We recommend using cosmos-kit for creating signers that work with Keplr and other wallets.
import { getOfflineSignerAmino as getOfflineSigner } from "cosmjs-utils";
import { getOfflineSignerProto as getOfflineSigner } from "cosmjs-utils";
WARNING: NOT RECOMMENDED TO USE PLAIN-TEXT MNEMONICS. Please take care of your security and use best practices such as AES encryption and/or methods from 12factor applications.
import { chains } from "chain-registry";
const mnemonic =
"unfold client turtle either pilot stock floor glow toward bullet car science";
const chain = chains.find(({ chain_name }) => chain_name === "coolcat");
const signer = await getOfflineSigner({
mnemonic,
chain,
});
Now that you have your stargateClient
, you can broadcast messages:
const { send } = cosmos.bank.v1beta1.MessageComposer.withTypeUrl;
const msg = send({
amount: [
{
denom: "uccat",
amount: "1000",
},
],
toAddress: address,
fromAddress: address,
});
const fee: StdFee = {
amount: [
{
denom: "uccat",
amount: "864",
},
],
gas: "86364",
};
const response = await stargateClient.signAndBroadcast(address, [msg], fee);
If you want to manually construct a stargate client
import { OfflineSigner, GeneratedType, Registry } from "@cosmjs/proto-signing";
import { AminoTypes, SigningStargateClient } from "@cosmjs/stargate";
import {
cosmosAminoConverters,
cosmosProtoRegistry,
cosmwasmAminoConverters,
cosmwasmProtoRegistry,
ibcProtoRegistry,
ibcAminoConverters,
publicawesomeAminoConverters,
publicawesomeProtoRegistry
} from '@coolcatchain/chain';
const signer: OfflineSigner = /* create your signer (see above) */
const rpcEndpint = 'https://rpc.coolcat.space/'; // or another URL
const protoRegistry: ReadonlyArray<[string, GeneratedType]> = [
...cosmosProtoRegistry,
...coolcatProtoRegistry,
...cosmwasmProtoRegistry,
...ibcProtoRegistry
];
const aminoConverters = {
...cosmosAminoConverters,
...coolcatAminoConverters,
...cosmwasmAminoConverters,
...ibcAminoConverters
};
const registry = new Registry(protoRegistry);
const aminoTypes = new AminoTypes(aminoConverters);
const stargateClient = await SigningStargateClient.connectWithSigner(rpcEndpoint, signer, {
registry,
aminoTypes
});
🛠 Built by Digital Kitchen, based on Cosmology ⚛️ goodness!
Code built with the help of these related projects:
- @cosmwasm/ts-codegen for generated CosmWasm contract Typescript classes
- @osmonauts/telescope a "babel for the Cosmos", Telescope is a TypeScript Transpiler for Cosmos Protobufs.
- cosmos-kit A wallet connector for the Cosmos ⚛️