@ 宇宙客户/核心
Cosmos SDK 块链的 REST API 客户端
安装
npm install @cosmos-client/core
谨慎
软件包名称 cosmos-client 已贬值。 请使用 @cosmos-client/core 换句话说.
Discord 社区
插件模块
实例
import cosmosclient from '@cosmos-client/core';
import Long from 'long';
describe('bank', () => {
it('send', async () => {
expect.hasAssertions();
const sdk = new cosmosclient.CosmosSDK('http://localhost:1317', 'testchain');
const privKey = new cosmosclient.proto.cosmos.crypto.secp256k1.PrivKey({
key: await cosmosclient.generatePrivKeyFromMnemonic('joke door law post fragile cruel torch silver siren mechanic flush surround'),
});
const pubKey = privKey.pubKey();
const address = cosmosclient.AccAddress.fromPublicKey(pubKey);
expect(address.toString()).toStrictEqual('cosmos14ynfqqa6j5k3kcqm2ymf3l66d9x07ysxgnvdyx');
const fromAddress = address;
const toAddress = address;
// get account info
const account = await cosmosclient.rest.auth
.account(sdk, fromAddress)
.then((res) => cosmosclient.codec.protoJSONToInstance(cosmosclient.codec.castProtoJSONOfProtoAny(res.data.account)))
.catch((_) => undefined);
if (!(account instanceof cosmosclient.proto.cosmos.auth.v1beta1.BaseAccount)) {
console.log(account);
return;
}
// build tx
const msgSend = new cosmosclient.proto.cosmos.bank.v1beta1.MsgSend({
from_address: fromAddress.toString(),
to_address: toAddress.toString(),
amount: [{ denom: 'token', amount: '1' }],
});
const txBody = new cosmosclient.proto.cosmos.tx.v1beta1.TxBody({
messages: [cosmosclient.codec.instanceToProtoAny(msgSend)],
});
const authInfo = new cosmosclient.proto.cosmos.tx.v1beta1.AuthInfo({
signer_infos: [
{
public_key: cosmosclient.codec.instanceToProtoAny(pubKey),
mode_info: {
single: {
mode: cosmosclient.proto.cosmos.tx.signing.v1beta1.SignMode.SIGN_MODE_DIRECT,
},
},
sequence: account.sequence,
},
],
fee: {
gas_limit: Long.fromString('200000'),
},
});
// sign
const txBuilder = new cosmosclient.TxBuilder(sdk, txBody, authInfo);
const signDocBytes = txBuilder.signDocBytes(account.account_number);
txBuilder.addSignature(privKey.sign(signDocBytes));
// broadcast
const res = await cosmosclient.rest.tx.broadcastTx(sdk, {
tx_bytes: txBuilder.txBytes(),
mode: rest.tx.BroadcastTxMode.Block,
});
console.log(res);
expect(res.data.tx_response?.raw_log?.match('failed')).toBeFalsy();
});
});
前端开发者
在类似的东西 polyfill.ts 在Angular(当然在其他前端框架中类似的东西)中,不要忘记输入这个语句.
如果没有这个声明, 串接 JSON 事件的结果包括 Long 类型字段会错误.
import Long from 'long';
import * as $protobuf from 'protobufjs/minimal';
$protobuf.util.Long = Long;
$protobuf.configure();
用于图书馆开发者
安装协议缓冲编译器
sudo apt -y install protobuf-compiler
或者说
brew install protobuf
使用 星点 测试.
第一个数位主版本和第二个数位小版本应该与宇宙SDK相匹配. 第三位数补丁版本可以独立递增.
页:1 proto.d.ts 错误
在 proto.d.ts 文件结尾处添加以下一行,并在出错点时将 pardmint 替换为 global termint .
import global_tendermint = tendermint;