Skip to content
Library for interacting with applications built on the Cosmos SDK πŸ“š
JavaScript
Branch: develop
Clone or download
Latest commit 5e8fbe1 Aug 7, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci switch release repo Aug 1, 2019
node_modules fixed await Jul 4, 2019
src validatorSigningInfos endpoint Aug 6, 2019
test cleaned repo Jun 19, 2019
.babelrc cleaned repo Jun 19, 2019
.eslintrc.js cleaned repo Jun 19, 2019
.gitignore fixed await Jul 4, 2019
CHANGELOG.md release-0.1.3 Aug 6, 2019
LICENSE Initial commit Apr 29, 2019
README.md Update README.md Jun 21, 2019
package.json release-0.1.3 Aug 6, 2019
webpack.config.js Revert "Merge pull request #3 from AlexBHarley/feat/node-compatibility" Jul 4, 2019
yarn-error.log build webpack May 10, 2019
yarn.lock updated deps Aug 1, 2019

README.md

Cosmos JS - Wrapper for Cosmos REST API

Install

yarn add @lunie/cosmos-js

Use

Simple example of how to send tokens.

import Cosmos from "@lunie/cosmos-js"

const STARGATE_URL = "https://stargate.cosmos.network"
const ADDRESS = "cosmos1abcd1234"
const cosmos = Cosmos(STARGATE_URL, ADDRESS)

// create the transaction object
const msg = cosmos
  .MsgSend({toAddress: 'cosmos1abcd09876', amounts: [{ denom: 'stake', amount: 10 }})

// estimate the needed gas amount
const gasEstimate = await msg.simulate()

// create a signer
const ledgerSigner = ... // async (signMessage: string) => { signature: Buffer, publicKey: Buffer }

// send the transaction
const { included }= await msg.send({ gas: gasEstimate }, ledgerSigner)

// await tx to be included in a block
await included()

API

If you want to query data only, you don't need to specify an address.

import { API } from "@lunie/cosmos-js"

const STARGATE_URL = "https://stargate.cosmos.network"

const api = API(STARGATE_URL)

const validators = await api.validators()

Create a sign message to sign with on a Ledger or with any other signer

const { signWithPrivateKey } = require('@lunie/cosmos-keys');
const { createSignMessage } = require('@lunie/cosmos-api');

const stdTx = {
  msg: [
    {
      type: `cosmos-sdk/Send`,
      value: {
        inputs: [
          {
            address: `cosmos1qperwt9wrnkg5k9e5gzfgjppzpqhyav5j24d66`,
            coins: [{ denom: `STAKE`, amount: `1` }]
          }
        ],
        outputs: [
          {
            address: `cosmos1yeckxz7tapz34kjwnjxvmxzurerquhtrmxmuxt`,
            coins: [{ denom: `STAKE`, amount: `1` }]
          }
        ]
      }
    }
  ],
  fee: { amount: [{ denom: ``, amount: `0` }], gas: `21906` },
  signatures: null,
  memo: ``
}

const signMessage = createSignMessage(stdTx, { sequence, accountNumber, chainId });
const signature = signWithPrivateKey(signMessage, Buffer.from(wallet.privateKey, 'hex'));

Create and sign a transaction from a message which then is ready to be broadcast

const { signWithPrivateKey } = require('@lunie/cosmos-keys');
const { createSignedTransaction } = require('@lunie/cosmos-api');

const sendMsg = {
  type: `cosmos-sdk/Send`,
  value: {
    inputs: [
      {
        address: `cosmos1qperwt9wrnkg5k9e5gzfgjppzpqhyav5j24d66`,
        coins: [{ denom: `STAKE`, amount: `1` }]
      }
    ],
    outputs: [
      {
        address: `cosmos1yeckxz7tapz34kjwnjxvmxzurerquhtrmxmuxt`,
        coins: [{ denom: `STAKE`, amount: `1` }]
      }
    ]
  }
}

const signer = signMessage = > signWithPrivateKey(signMessage, Buffer.from(wallet.privateKey, 'hex'))

const signMessage = createSignedTransaction({ gas: 1000, gasPrices = [{ amount: "10", denom: "uatom" }], memo = `Hi from Lunie` }, [sendMsg], signer, chainId: "test-chain", accountNumber: 0, sequence: 12);
You can’t perform that action at this time.