What is @cosmjs/proto-signing?
@cosmjs/proto-signing is a JavaScript library for creating, signing, and broadcasting transactions in the Cosmos ecosystem. It provides tools for working with protocol buffers and signing transactions using various key management solutions.
Creating a Signer
This feature allows you to create a signer using a mnemonic. The code sample demonstrates how to create a wallet from a mnemonic and retrieve the first account's address.
const { DirectSecp256k1HdWallet } = require('@cosmjs/proto-signing');
async function createSigner() {
const mnemonic = 'your mnemonic here';
const wallet = await DirectSecp256k1HdWallet.fromMnemonic(mnemonic);
const [firstAccount] = await wallet.getAccounts();
console.log(firstAccount.address);
}
createSigner();
Signing a Transaction
This feature allows you to sign a transaction. The code sample demonstrates how to create a transaction body, encode it, and sign it using a wallet created from a mnemonic.
const { DirectSecp256k1HdWallet, Registry, encodePubkey, makeAuthInfoBytes, makeSignDoc, TxBodyEncodeObject } = require('@cosmjs/proto-signing');
const { coins } = require('@cosmjs/stargate');
async function signTransaction() {
const mnemonic = 'your mnemonic here';
const wallet = await DirectSecp256k1HdWallet.fromMnemonic(mnemonic);
const [firstAccount] = await wallet.getAccounts();
const registry = new Registry();
const txBody = {
typeUrl: '/cosmos.tx.v1beta1.TxBody',
value: {
messages: [
{
typeUrl: '/cosmos.bank.v1beta1.MsgSend',
value: {
fromAddress: firstAccount.address,
toAddress: 'cosmos1recipientaddress',
amount: coins(1000, 'ucosm'),
},
},
],
},
};
const txBodyBytes = registry.encode(txBody);
const gasLimit = 200000;
const authInfoBytes = makeAuthInfoBytes(
[{ pubkey: encodePubkey(firstAccount.pubkey), sequence: 0 }],
coins(2000, 'ucosm'),
gasLimit
);
const chainId = 'cosmoshub-4';
const signDoc = makeSignDoc(txBodyBytes, authInfoBytes, chainId, 0);
const { signed, signature } = await wallet.signDirect(firstAccount.address, signDoc);
console.log(signed, signature);
}
signTransaction();
Broadcasting a Transaction
This feature allows you to broadcast a signed transaction to the Cosmos network. The code sample demonstrates how to connect to a Cosmos RPC endpoint and broadcast a signed transaction.
const { StargateClient } = require('@cosmjs/stargate');
async function broadcastTransaction() {
const client = await StargateClient.connect('https://rpc.cosmos.network');
const txRaw = 'your signed transaction here';
const result = await client.broadcastTx(txRaw);
console.log(result);
}
broadcastTransaction();