What is @cosmjs/amino?
@cosmjs/amino is a JavaScript library for working with the Amino encoding format used in the Cosmos ecosystem. It provides tools for encoding and decoding data structures, signing transactions, and interacting with Cosmos-based blockchains.
What are @cosmjs/amino's main functionalities?
Encoding and Decoding
This feature allows you to encode and decode data structures using the Amino encoding format. The code sample demonstrates encoding a Cosmos SDK message and then decoding it back to its original form.
const { encode, decode } = require('@cosmjs/amino');
const data = { type: 'cosmos-sdk/MsgSend', value: { from_address: 'cosmos1...', to_address: 'cosmos1...', amount: [{ denom: 'uatom', amount: '1000' }] } };
const encoded = encode(data);
const decoded = decode(encoded);
console.log(encoded);
console.log(decoded);
Signing Transactions
This feature allows you to create and serialize a sign document for transactions. The code sample demonstrates creating a sign document for a transaction and serializing it.
const { makeSignDoc, serializeSignDoc, StdSignDoc } = require('@cosmjs/amino');
const signDoc = makeSignDoc([{ type: 'cosmos-sdk/MsgSend', value: { from_address: 'cosmos1...', to_address: 'cosmos1...', amount: [{ denom: 'uatom', amount: '1000' }] } }], { amount: [{ denom: 'uatom', amount: '500' }], gas: '200000' }, 'cosmoshub-4', 'memo', 1, 1);
const serializedSignDoc = serializeSignDoc(signDoc);
console.log(serializedSignDoc);
Interacting with Cosmos-based Blockchains
This feature allows you to interact with Cosmos-based blockchains, including signing and broadcasting transactions. The code sample demonstrates creating a wallet, signing a transaction, and broadcasting it to the Cosmos network.
const { makeSignDoc, serializeSignDoc, StdSignDoc } = require('@cosmjs/amino');
const { DirectSecp256k1HdWallet } = require('@cosmjs/proto-signing');
const { assertIsBroadcastTxSuccess, SigningStargateClient } = require('@cosmjs/stargate');
async function main() {
const wallet = await DirectSecp256k1HdWallet.fromMnemonic('your mnemonic here');
const [firstAccount] = await wallet.getAccounts();
const client = await SigningStargateClient.connectWithSigner('https://rpc.cosmos.network', wallet);
const msgSend = {
type: 'cosmos-sdk/MsgSend',
value: {
from_address: firstAccount.address,
to_address: 'cosmos1...',
amount: [{ denom: 'uatom', amount: '1000' }]
}
};
const fee = {
amount: [{ denom: 'uatom', amount: '500' }],
gas: '200000'
};
const result = await client.signAndBroadcast(firstAccount.address, [msgSend], fee, 'memo');
assertIsBroadcastTxSuccess(result);
console.log(result);
}
main().catch(console.error);
Other packages similar to @cosmjs/amino
@cosmjs/proto-signing
@cosmjs/proto-signing is a library for signing Cosmos SDK transactions using Protobuf encoding. It provides similar functionality to @cosmjs/amino but uses Protobuf instead of Amino for encoding.
cosmjs-types
cosmjs-types is a library that provides TypeScript definitions for Cosmos SDK Protobuf messages. It is useful for developers who want to work with Protobuf-encoded messages in a type-safe manner.
cosmos-client
cosmos-client is a JavaScript client library for interacting with Cosmos SDK-based blockchains. It provides higher-level abstractions for common tasks such as querying the blockchain and broadcasting transactions.
@cosmjs/amino
Helpers for Amino for @cosmjs/stargate.
License
This package is part of the cosmjs repository, licensed under the Apache License
2.0 (see NOTICE and
LICENSE).