JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 505
  • Score
    100M100P100Q94304F
  • License Apache-2.0

A signing library for Cosmos

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

https://cosmos.github.io/sig/

Install

Please note that the NPM package name is @tendermint/sig rather than @cosmos/sig.

Yarn
yarn add @tendermint/sig
NPM
npm install --save @tendermint/sig

Usage

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
// true

Please 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. 🎁