Implement MsgSend using decorators

This commit is contained in:
Simon Warta 2020-06-23 15:15:33 +02:00
parent 1e4122f8d3
commit d1a069e94e
4 changed files with 77 additions and 0 deletions

View File

@ -41,6 +41,7 @@
"protobufjs": "~6.9.0"
},
"devDependencies": {
"@cosmjs/encoding": "^0.20.0",
"@cosmjs/utils": "^0.20.0"
}
}

View File

@ -0,0 +1,37 @@
/* eslint-disable @typescript-eslint/camelcase */
import { fromHex } from "@cosmjs/encoding";
import { cosmos_sdk as cosmosSdk } from "./generated/codecimpl";
import { Coin, MsgSend } from "./msgs";
describe("msgs", () => {
it("encodes decorated MsgSend equally to static code", () => {
const alice = fromHex("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
const bob = fromHex("BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB");
const amount = [
new Coin({ denom: "utoken", amount: "123" }),
new Coin({ denom: "ustake", amount: "654" }),
];
const donation = new MsgSend({ from_address: alice, to_address: bob, amount });
const expected = cosmosSdk.x.bank.v1.MsgSend.encode(
cosmosSdk.x.bank.v1.MsgSend.create({
fromAddress: alice,
toAddress: bob,
amount: [
cosmosSdk.v1.Coin.create({
denom: "utoken",
amount: "123",
}),
cosmosSdk.v1.Coin.create({
denom: "ustake",
amount: "654",
}),
],
}),
).finish();
const encoded = MsgSend.encode(donation).finish();
expect(encoded).toEqual(expected);
});
});

View File

@ -0,0 +1,27 @@
import { Message } from "protobufjs";
import { cosmosField, cosmosMessage } from "./decorator";
import { Registry } from "./registry";
export const defaultRegistry = new Registry();
@cosmosMessage(defaultRegistry, "/cosmos.Coin")
export class Coin extends Message<{}> {
@cosmosField.string(1)
public readonly denom?: string;
@cosmosField.string(2)
public readonly amount?: string;
}
@cosmosMessage(defaultRegistry, "/cosmos.bank.MsgSend")
export class MsgSend extends Message<{}> {
@cosmosField.bytes(1)
public readonly from_address?: Uint8Array;
@cosmosField.bytes(2)
public readonly to_address?: Uint8Array;
@cosmosField.repeatedNested(3, Coin)
public readonly amount?: readonly Coin[];
}

12
packages/demo-protobuf/types/msgs.d.ts vendored Normal file
View File

@ -0,0 +1,12 @@
import { Message } from "protobufjs";
import { Registry } from "./registry";
export declare const defaultRegistry: Registry;
export declare class Coin extends Message<{}> {
readonly denom?: string;
readonly amount?: string;
}
export declare class MsgSend extends Message<{}> {
readonly from_address?: Uint8Array;
readonly to_address?: Uint8Array;
readonly amount?: readonly Coin[];
}