@cosmjs/cli

Installation and first run
The cosmjs-cli
executable is available via npm. We recommend local
installations to your demo project. If you don't have one yet, just
mkdir cosmjs-cli-installation && cd cosmjs-cli-installation && yarn init --yes
.
locally with yarn
$ yarn add @cosmjs/cli --dev
$ ./node_modules/.bin/cosmjs-cli
locally with npm
$ npm install @cosmjs/cli --save-dev
$ ./node_modules/.bin/cosmjs-cli
globally with yarn
$ yarn global add @cosmjs/cli
$ cosmjs-cli
globally with npm
$ npm install -g @cosmjs/cli
$ cosmjs-cli
Getting started
- Install
@cosmjs/cli
and run cosmjs-cli
as shown above
- Start a local wasmd blockchain
- Start with
./bin/cosmjs-cli --init examples/local_faucet.ts
- Play around as in the following example code
const account = await client.getAccount(faucetAddress);
const emptyAddress = toBech32("cosmos", Random.getBytes(20));
const memo = "My very first tx!";
const msgSend = {
fromAddress: faucetAddress,
toAddress: emptyAddress,
amount: coins(1234, "ucosm"),
};
const msgAny = {
typeUrl: "/cosmos.bank.v1beta1.MsgSend",
value: msgSend,
};
const broadcastResult = await client.signAndBroadcast(
faucetAddress,
[msgAny],
defaultFee,
memo,
);
Extended helpers
The above code shows you the use of the API and various objects and is a great
way to learn how to embed cosmjs into your project. However, if you just want a
cli to perform some quick queries on a chain, you can use an extended set of
helpers:
Start with ./bin/cosmjs-cli --init examples/helpers.ts
(This points to the Demonet at https://lcd.demo-08.cosmwasm.com for ease of use.
Other networks, look below)
Setup Account:
const mnemonic = loadOrCreateMnemonic("foo.key");
const { address, client } = await connect(mnemonic, {});
address;
client.getAccount();
hitFaucet(defaultFaucetUrl, address, "COSM");
client.getAccount();
View contracts:
client.getCodes();
const contracts = await client.getContracts(1);
contracts;
const info = await client.getContract(contracts[0].address);
info;
info.initMsg;
client.queryContractSmart(addr, { balance: { address } });
Instantiate and use ERC20 contract:
const initMsg = {
name: "Foo Coin",
symbol: "FOO",
decimals: 2,
initial_balances: [{ address, amount: "123456789" }],
};
const foo = await client.instantiate(1, initMsg, "FOO");
foo;
foo.logs[0].events[0];
const fooAddr = foo.contractAddress;
const fooAddr2 = await client
.getContracts(1)
.then(
(contracts) =>
contracts.filter((x) => x.label == "FOO").map((x) => x.address)[0],
)[(fooAddr, fooAddr2)];
client.queryContractSmart(fooAddr, { balance: { address } });
const rcpt = await randomAddress("cosmos");
rcpt;
client.queryContractSmart(fooAddr, { balance: { address: rcpt } });
const execMsg = { transfer: { recipient: rcpt, amount: "808" } };
const exec = await client.execute(fooAddr, execMsg);
exec;
exec.logs[0].events[0];
client.queryContractSmart(fooAddr, { balance: { address: rcpt } });
Or just send tokens:
client.getAccount(rcpt);
const sent = await client.sendTokens(rcpt, [
{ amount: "1234", denom: "ucosm" },
]);
sent;
foo.logs[0].events[0];
Use Custom Network
All the network info can be configured inside the last argument to connect. To
see how to connect to the Regen Testnet, try this. (Note you need to use
.editor
in the repl to allow multi-line commands. Alternative is to place
entire regenOptions
on one line.
Run ./bin/cosmjs-cli --init examples/helpers.ts
.editor
const regenOptions = {
httpUrl: "https://regen-lcd.vitwit.com/",
networkId: "kontraua",
feeToken: "utree",
gasPrice: 0.025,
bech32prefix: "xrn:",
}
^D
const mnemonic = loadOrCreateMnemonic("regen.key");
const {address, client} = await connect(mnemonic, regenOptions);
address
client.getAccount("xrn:1pdfr7xuckj6lhdphdde6peres9ufwgpsv87mag")
client.getAccount()
Hit the faucet with your address (in browser): https://regen.vitwit.com/faucet
then continue in node
client.getAccount();
At this point you can continue all the other behaviors from above, looking at
codes, etc. Do note that the ERC contract is code 5
on this network (instead
of 1
above).
Importing keys from wasmcli
If you are using the go commands and have tokens there, you may want to reuse
the same account. (If you don't know what this is, just skip this section). You
can reuse the mnemonic between the Go tooling and the Node.js tooling, but this
violates all security protocols - only use this for testnets. In the future we
will offer proper encrypted key management for cosmjs.
(You can replace wasmcli
with xrncli
and use regenOptions
if you wish to
use that testnet)
Create a new key - note mnemonic and address
$ wasmcli keys add demo2
- name: demo2
type: local
address: cosmos1d4ut3z9c0kplgz5ma9t6ee637tagjqfyu4sxyl
pubkey: cosmospub1addwnpepqtagg2smk2zvj77xaslej2wevwz7jft0q5hj5yuwvek3r6z0ufjtxnde4rq
mnemonic: ""
threshold: 0
pubkeys: []
**Important** write this mnemonic phrase in a safe place.
It is the only way to recover your account if you ever forget your password.
cousin nephew vintage label empty sunny cargo mushroom photo side clarify sleep solid entire deal tattoo vehicle record discover arrive sting staff salt uncle
Save mnemonic to a file
echo "cousin nephew vintage label empty sunny cargo mushroom photo side clarify sleep solid entire deal tattoo vehicle record discover arrive sting staff salt uncle" > wasmcli.key
Load it up in cosmjs: ./bin/cosmjs-cli --init examples/helpers.ts
const mnemonic = loadOrCreateMnemonic("wasmcli.key");
const { address, client } = await connect(mnemonic, regenOptions);
address;
Once you have access to the same key as in the cli, you can use those tokens to
play with contracts.
Diving into Contracts
Check out the
mask documentation
to view how to use some custom helpers to upload code and use non-trivial
contracts with proper types.
License
This package is part of the cosmjs repository, licensed under the Apache License
2.0 (see NOTICE and
LICENSE).