Merge pull request #241 from CosmWasm/decorate-MsgSend

Decorate MsgSend
This commit is contained in:
Will Clark 2020-06-23 17:04:29 +02:00 committed by GitHub
commit 4bea59d2b2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 84 additions and 3 deletions

View File

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

View File

@ -38,7 +38,7 @@ describe("decorator demo", () => {
@cosmosField.repeatedString(6)
public readonly listDemo?: readonly string[];
@cosmosField.nested(7, MsgNestedDemo)
@cosmosField.message(7, MsgNestedDemo)
public readonly nestedDemo?: MsgNestedDemo;
}

View File

@ -29,6 +29,9 @@ export const cosmosField = {
int64: (id: number): FieldDecorator => Field.d<number>(id, "int64"),
uint64: (id: number): FieldDecorator => Field.d<number>(id, "uint64"),
message: (id: number, ctor: Constructor<Message<{}>>): FieldDecorator => Field.d(id, ctor),
repeatedString: (id: number): FieldDecorator => Field.d<string[]>(id, "string", "repeated"),
nested: (id: number, ctor: Constructor<Message<{}>>): FieldDecorator => Field.d(id, ctor),
repeatedMessage: (id: number, ctor: Constructor<Message<{}>>): FieldDecorator =>
Field.d(id, ctor, "repeated"),
};

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.repeatedMessage(3, Coin)
public readonly amount?: readonly Coin[];
}

View File

@ -11,6 +11,7 @@ export declare const cosmosField: {
bytes: (id: number) => FieldDecorator;
int64: (id: number) => FieldDecorator;
uint64: (id: number) => FieldDecorator;
message: (id: number, ctor: Constructor<Message<{}>>) => FieldDecorator;
repeatedString: (id: number) => FieldDecorator;
nested: (id: number, ctor: Constructor<Message<{}>>) => FieldDecorator;
repeatedMessage: (id: number, ctor: Constructor<Message<{}>>) => FieldDecorator;
};

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[];
}