Package Exports
- @tendermint/sig
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@tendermint/sig) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
sig
EXPERIMENTAL. DO NOT USE THIS YET.
A signing library for Cosmos.
Supported in Node.js and browsers.
Demo
@TODO: add demo links
Documentation
Install
Please note that the NPM package name is @tendermint/sig rather than @cosmos/sig.
Yarn
yarn add @tendermint/sigNPM
npm install --save @tendermint/sigUsage
Derive a wallet (private key, public key, and address) from a mnemonic
import { createWalletFromMnemonic } from '@tendermint/sig';
const mnemonic = 'trouble salon husband push melody usage fine ensure blade deal miss twin';
const wallet = createWalletFromMnemonic(mnemonic); // BIP39 mnemonic string
/*
{
address: 'cosmos1asm039pzjkkg9ghlvj267p5g3whtxd2t4leg5c',
privateKey: Uint8Array [
202, 60, 140, 106, 178, 180, 60, 1,
186, 68, 206, 224, 207, 179, 79, 81,
119, 98, 98, 1, 207, 170, 209, 161,
1, 124, 151, 236, 205, 151, 3, 229
],
publicKey: Uint8Array [
3, 159, 35, 41, 130, 48, 3, 247,
139, 242, 113, 41, 200, 176, 73, 27,
102, 232, 113, 226, 80, 184, 107, 144,
217, 88, 151, 21, 22, 185, 68, 28,
211
]
}
*/Derive a Bech32 address from a public key
import { createAddress } from '@tendermint/sig';
const address = createAddress(publicKey); // Buffer or Uint8Array
// 'cosmos1asm039pzjkkg9ghlvj267p5g3whtxd2t4leg5c'Sign a transaction
import { signTx } from '@tendermint/sig';
const tx = {
fee: {
amount: [{ amount: '0', denom: '' }],
gas: '10000'
},
memo: '',
msgs: [{
type: 'cosmos-sdk/Send',
value: {
inputs: [{
address: 'cosmos1qperwt9wrnkg5k9e5gzfgjppzpqhyav5j24d66',
coins: [{ amount: '1', denom: 'STAKE' }]
}],
outputs: [{
address: 'cosmos1yeckxz7tapz34kjwnjxvmxzurerquhtrmxmuxt',
coins: [{ amount: '1', denom: 'STAKE' }]
}]
}
}]
};
const signMeta = {
account_number: '1',
chain_id: 'cosmos',
sequence: '0'
};
const stdTx = signTx(tx, signMeta, wallet); // Wallet or privateKey / publicKey pair; see example above
/*
{
fee: { amount: [{ amount: '0', denom: '' }], gas: '10000' },
memo: '',
msgs: [{
type: 'cosmos-sdk/Send',
value: {
inputs: [{
'address': 'cosmos1qperwt9wrnkg5k9e5gzfgjppzpqhyav5j24d66',
'coins': [{ amount: '1', denom: 'STAKE' }]
}],
outputs: [{
address: 'cosmos1yeckxz7tapz34kjwnjxvmxzurerquhtrmxmuxt',
coins: [{ amount: '1', denom: 'STAKE' }]
}]
}
}],
signatures: [{
signature: 'uwQQzsubfzk/EwedKbZI/IDiXru5M6GuEBA2DZ+U7LVBwO80MFhU6ULA/5yjT8F0Bdx113VzS/GtbntazzNPwQ==',
pub_key: { type: 'tendermint/PubKeySecp256k1', value: 'A58jKYIwA/eL8nEpyLBJG2boceJQuGuQ2ViXFRa5RBzT' }
}]
}
*/Verify a transaction
import { verifyTx } from '@tendermint/sig';
const valid = verifyTx(stdTx, signMeta); // signed transaction and metadata; see example above
// truePlease see the documentation for the full API.
Contributing
sig is very new! Questions, feedback, use cases, issues, and code are all very, very welcome.
Thank you for helping us help you help us all. 🎁