Streamline Amino JSON type definitions and fix tests

This commit is contained in:
Simon Warta 2021-03-11 12:16:01 +01:00
parent 8743000e2a
commit 981c3ac919
2 changed files with 144 additions and 68 deletions

View File

@ -1,18 +1,18 @@
/* eslint-disable @typescript-eslint/naming-convention */
import {
MsgClearAdmin as LaunchpadMsgClearAdmin,
MsgExecuteContract as LaunchpadMsgExecuteContract,
MsgInstantiateContract as LaunchpadMsgInstantiateContract,
MsgMigrateContract as LaunchpadMsgMigrateContract,
MsgStoreCode as LaunchpadMsgStoreCode,
MsgUpdateAdmin as LaunchpadMsgUpdateAdmin,
} from "@cosmjs/cosmwasm-launchpad";
import { fromBase64, toUtf8 } from "@cosmjs/encoding";
import { coins } from "@cosmjs/launchpad";
import { AminoTypes } from "@cosmjs/stargate";
import Long from "long";
import { cosmWasmTypes } from "./aminotypes";
import {
AminoMsgClearAdmin,
AminoMsgExecuteContract,
AminoMsgInstantiateContract,
AminoMsgMigrateContract,
AminoMsgStoreCode,
AminoMsgUpdateAdmin,
cosmWasmTypes,
} from "./aminotypes";
import {
MsgClearAdmin,
MsgExecuteContract,
@ -36,7 +36,7 @@ describe("AminoTypes", () => {
typeUrl: "/cosmwasm.wasm.v1beta1.MsgStoreCode",
value: msg,
});
const expected: LaunchpadMsgStoreCode = {
const expected: AminoMsgStoreCode = {
type: "wasm/MsgStoreCode",
value: {
sender: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6",
@ -65,7 +65,7 @@ describe("AminoTypes", () => {
typeUrl: "/cosmwasm.wasm.v1beta1.MsgInstantiateContract",
value: msg,
});
const expected: LaunchpadMsgInstantiateContract = {
const expected: AminoMsgInstantiateContract = {
type: "wasm/MsgInstantiateContract",
value: {
sender: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6",
@ -74,7 +74,7 @@ describe("AminoTypes", () => {
init_msg: {
foo: "bar",
},
init_funds: coins(1234, "ucosm"),
funds: coins(1234, "ucosm"),
admin: "cosmos10dyr9899g6t0pelew4nvf4j5c3jcgv0r73qga5",
},
};
@ -91,7 +91,7 @@ describe("AminoTypes", () => {
typeUrl: "/cosmwasm.wasm.v1beta1.MsgUpdateAdmin",
value: msg,
});
const expected: LaunchpadMsgUpdateAdmin = {
const expected: AminoMsgUpdateAdmin = {
type: "wasm/MsgUpdateAdmin",
value: {
sender: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6",
@ -111,7 +111,7 @@ describe("AminoTypes", () => {
typeUrl: "/cosmwasm.wasm.v1beta1.MsgClearAdmin",
value: msg,
});
const expected: LaunchpadMsgClearAdmin = {
const expected: AminoMsgClearAdmin = {
type: "wasm/MsgClearAdmin",
value: {
sender: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6",
@ -136,7 +136,7 @@ describe("AminoTypes", () => {
typeUrl: "/cosmwasm.wasm.v1beta1.MsgExecuteContract",
value: msg,
});
const expected: LaunchpadMsgExecuteContract = {
const expected: AminoMsgExecuteContract = {
type: "wasm/MsgExecuteContract",
value: {
sender: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6",
@ -144,7 +144,7 @@ describe("AminoTypes", () => {
msg: {
foo: "bar",
},
sent_funds: coins(1234, "ucosm"),
funds: coins(1234, "ucosm"),
},
};
expect(aminoMsg).toEqual(expected);
@ -165,7 +165,7 @@ describe("AminoTypes", () => {
typeUrl: "/cosmwasm.wasm.v1beta1.MsgMigrateContract",
value: msg,
});
const expected: LaunchpadMsgMigrateContract = {
const expected: AminoMsgMigrateContract = {
type: "wasm/MsgMigrateContract",
value: {
sender: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6",
@ -182,7 +182,7 @@ describe("AminoTypes", () => {
describe("fromAmino", () => {
it("works for MsgStoreCode", () => {
const aminoMsg: LaunchpadMsgStoreCode = {
const aminoMsg: AminoMsgStoreCode = {
type: "wasm/MsgStoreCode",
value: {
sender: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6",
@ -206,7 +206,7 @@ describe("AminoTypes", () => {
});
it("works for MsgInstantiateContract", () => {
const aminoMsg: LaunchpadMsgInstantiateContract = {
const aminoMsg: AminoMsgInstantiateContract = {
type: "wasm/MsgInstantiateContract",
value: {
sender: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6",
@ -215,7 +215,7 @@ describe("AminoTypes", () => {
init_msg: {
foo: "bar",
},
init_funds: coins(1234, "ucosm"),
funds: coins(1234, "ucosm"),
admin: "cosmos10dyr9899g6t0pelew4nvf4j5c3jcgv0r73qga5",
},
};
@ -239,7 +239,7 @@ describe("AminoTypes", () => {
});
it("works for MsgUpdateAdmin", () => {
const aminoMsg: LaunchpadMsgUpdateAdmin = {
const aminoMsg: AminoMsgUpdateAdmin = {
type: "wasm/MsgUpdateAdmin",
value: {
sender: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6",
@ -260,7 +260,7 @@ describe("AminoTypes", () => {
});
it("works for MsgClearAdmin", () => {
const aminoMsg: LaunchpadMsgClearAdmin = {
const aminoMsg: AminoMsgClearAdmin = {
type: "wasm/MsgClearAdmin",
value: {
sender: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6",
@ -279,7 +279,7 @@ describe("AminoTypes", () => {
});
it("works for MsgExecuteContract", () => {
const aminoMsg: LaunchpadMsgExecuteContract = {
const aminoMsg: AminoMsgExecuteContract = {
type: "wasm/MsgExecuteContract",
value: {
sender: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6",
@ -287,7 +287,7 @@ describe("AminoTypes", () => {
msg: {
foo: "bar",
},
sent_funds: coins(1234, "ucosm"),
funds: coins(1234, "ucosm"),
},
};
const msg = new AminoTypes({ additions: cosmWasmTypes }).fromAmino(aminoMsg);
@ -308,7 +308,7 @@ describe("AminoTypes", () => {
});
it("works for MsgMigrateContract", () => {
const aminoMsg: LaunchpadMsgMigrateContract = {
const aminoMsg: AminoMsgMigrateContract = {
type: "wasm/MsgMigrateContract",
value: {
sender: "cosmos1pkptre7fdkl6gfrzlesjjvhxhlc3r4gmmk8rs6",

View File

@ -1,10 +1,4 @@
/* eslint-disable @typescript-eslint/naming-convention */
import {
MsgClearAdmin as LaunchpadMsgClearAdmin,
MsgMigrateContract as LaunchpadMsgMigrateContract,
MsgStoreCode as LaunchpadMsgStoreCode,
MsgUpdateAdmin as LaunchpadMsgUpdateAdmin,
} from "@cosmjs/cosmwasm-launchpad";
import { fromBase64, fromUtf8, toBase64, toUtf8 } from "@cosmjs/encoding";
import { Coin } from "@cosmjs/launchpad";
import { AminoConverter, coinFromProto } from "@cosmjs/stargate";
@ -20,34 +14,121 @@ import {
MsgUpdateAdmin,
} from "./codec/x/wasm/internal/types/tx";
interface MsgExecuteContractValueAmino {
/** Bech32 account address */
readonly sender: string;
/** Bech32 account address */
readonly contract: string;
/** Handle message as JavaScript object */
readonly msg: any;
readonly funds: readonly Coin[];
// TODO: implement
/**
* @see https://github.com/CosmWasm/wasmd/blob/v0.16.0-alpha1/x/wasm/internal/types/types.proto#L30-L35
*/
type AccessConfig = never;
/**
* The Amino JSON representation of
* https://github.com/CosmWasm/wasmd/blob/v0.16.0-alpha1/x/wasm/internal/types/tx.proto#L28-L40
*/
export interface AminoMsgStoreCode {
type: "wasm/MsgStoreCode";
value: {
/** Bech32 account address */
readonly sender: string;
/** Base64 encoded Wasm */
readonly wasm_byte_code: string;
/** A valid URI reference to the contract's source code. Can be empty. */
readonly source: string;
/** A docker tag. Can be empty. */
readonly builder: string;
readonly instantiate_permission?: AccessConfig;
};
}
interface MsgInstantiateContractValueAmino {
/** Bech32 account address */
readonly sender: string;
/** ID of the Wasm code that was uploaded before */
readonly code_id: string;
/** Human-readable label for this contract */
readonly label: string;
/** Init message as JavaScript object */
readonly init_msg: any;
readonly funds: readonly Coin[];
/** Bech32-encoded admin address */
readonly admin?: string;
/**
* The Amino JSON representation of
* https://github.com/CosmWasm/wasmd/blob/v0.16.0-alpha1/x/wasm/internal/types/tx.proto#L70-L80
*/
export interface AminoMsgExecuteContract {
type: "wasm/MsgExecuteContract";
value: {
/** Bech32 account address */
readonly sender: string;
/** Bech32 account address */
readonly contract: string;
/** Handle message as JavaScript object */
readonly msg: any;
readonly funds: readonly Coin[];
};
}
/**
* The Amino JSON representation of
* https://github.com/CosmWasm/wasmd/blob/v0.16.0-alpha1/x/wasm/internal/types/tx.proto#L47-L61
*/
export interface AminoMsgInstantiateContract {
type: "wasm/MsgInstantiateContract";
value: {
/** Bech32 account address */
readonly sender: string;
/** ID of the Wasm code that was uploaded before */
readonly code_id: string;
/** Human-readable label for this contract */
readonly label: string;
/** Init message as JavaScript object */
readonly init_msg: any;
readonly funds: readonly Coin[];
/** Bech32-encoded admin address */
readonly admin?: string;
};
}
/**
* The Amino JSON representation of
* https://github.com/CosmWasm/wasmd/blob/v0.16.0-alpha1/x/wasm/internal/types/tx.proto#L88-L98
*/
export interface AminoMsgMigrateContract {
type: "wasm/MsgMigrateContract";
value: {
/** Bech32 account address */
readonly sender: string;
/** Bech32 account address */
readonly contract: string;
/** The new code */
readonly code_id: string;
/** Migrate message as JavaScript object */
readonly msg: any;
};
}
/**
* The Amino JSON representation of
* https://github.com/CosmWasm/wasmd/blob/v0.16.0-alpha1/x/wasm/internal/types/tx.proto#L107-L115
*/
export interface AminoMsgUpdateAdmin {
type: "wasm/MsgUpdateAdmin";
value: {
/** Bech32-encoded sender address. This must be the old admin. */
readonly sender: string;
/** Bech32-encoded contract address to be updated */
readonly contract: string;
/** Bech32-encoded address of the new admin */
readonly new_admin: string;
};
}
/**
* The Amino JSON representation of
* https://github.com/CosmWasm/wasmd/blob/v0.16.0-alpha1/x/wasm/internal/types/tx.proto#L120-L126
*/
export interface AminoMsgClearAdmin {
type: "wasm/MsgClearAdmin";
value: {
/** Bech32-encoded sender address. This must be the old admin. */
readonly sender: string;
/** Bech32-encoded contract address to be updated */
readonly contract: string;
};
}
export const cosmWasmTypes: Record<string, AminoConverter> = {
"/cosmwasm.wasm.v1beta1.MsgStoreCode": {
aminoType: "wasm/MsgStoreCode",
toAmino: ({ sender, wasmByteCode, source, builder }: MsgStoreCode): LaunchpadMsgStoreCode["value"] => {
toAmino: ({ sender, wasmByteCode, source, builder }: MsgStoreCode): AminoMsgStoreCode["value"] => {
assertDefinedAndNotNull(sender, "missing sender");
assertDefinedAndNotNull(wasmByteCode, "missing wasmByteCode");
assertDefinedAndNotNull(source, "missing source");
@ -59,12 +140,7 @@ export const cosmWasmTypes: Record<string, AminoConverter> = {
builder: builder,
};
},
fromAmino: ({
sender,
wasm_byte_code,
source,
builder,
}: LaunchpadMsgStoreCode["value"]): MsgStoreCode => ({
fromAmino: ({ sender, wasm_byte_code, source, builder }: AminoMsgStoreCode["value"]): MsgStoreCode => ({
sender: sender,
wasmByteCode: fromBase64(wasm_byte_code),
source: source,
@ -81,7 +157,7 @@ export const cosmWasmTypes: Record<string, AminoConverter> = {
initMsg,
funds,
admin,
}: MsgInstantiateContract): MsgInstantiateContractValueAmino => {
}: MsgInstantiateContract): AminoMsgInstantiateContract["value"] => {
assertDefinedAndNotNull(sender, "missing sender");
assertDefinedAndNotNull(codeId, "missing codeId");
assertDefinedAndNotNull(label, "missing label");
@ -103,7 +179,7 @@ export const cosmWasmTypes: Record<string, AminoConverter> = {
init_msg,
funds,
admin,
}: MsgInstantiateContractValueAmino): MsgInstantiateContract => ({
}: AminoMsgInstantiateContract["value"]): MsgInstantiateContract => ({
sender: sender,
codeId: Long.fromString(code_id),
label: label,
@ -114,7 +190,7 @@ export const cosmWasmTypes: Record<string, AminoConverter> = {
},
"/cosmwasm.wasm.v1beta1.MsgUpdateAdmin": {
aminoType: "wasm/MsgUpdateAdmin",
toAmino: ({ sender, newAdmin, contract }: MsgUpdateAdmin): LaunchpadMsgUpdateAdmin["value"] => {
toAmino: ({ sender, newAdmin, contract }: MsgUpdateAdmin): AminoMsgUpdateAdmin["value"] => {
assertDefinedAndNotNull(sender, "missing sender");
assertDefinedAndNotNull(newAdmin, "missing newAdmin");
assertDefinedAndNotNull(contract, "missing contract");
@ -124,7 +200,7 @@ export const cosmWasmTypes: Record<string, AminoConverter> = {
contract: contract,
};
},
fromAmino: ({ sender, new_admin, contract }: LaunchpadMsgUpdateAdmin["value"]): MsgUpdateAdmin => ({
fromAmino: ({ sender, new_admin, contract }: AminoMsgUpdateAdmin["value"]): MsgUpdateAdmin => ({
sender: sender,
newAdmin: new_admin,
contract: contract,
@ -132,7 +208,7 @@ export const cosmWasmTypes: Record<string, AminoConverter> = {
},
"/cosmwasm.wasm.v1beta1.MsgClearAdmin": {
aminoType: "wasm/MsgClearAdmin",
toAmino: ({ sender, contract }: MsgClearAdmin): LaunchpadMsgClearAdmin["value"] => {
toAmino: ({ sender, contract }: MsgClearAdmin): AminoMsgClearAdmin["value"] => {
assertDefinedAndNotNull(sender, "missing sender");
assertDefinedAndNotNull(contract, "missing contract");
return {
@ -140,14 +216,14 @@ export const cosmWasmTypes: Record<string, AminoConverter> = {
contract: contract,
};
},
fromAmino: ({ sender, contract }: LaunchpadMsgClearAdmin["value"]): MsgClearAdmin => ({
fromAmino: ({ sender, contract }: AminoMsgClearAdmin["value"]): MsgClearAdmin => ({
sender: sender,
contract: contract,
}),
},
"/cosmwasm.wasm.v1beta1.MsgExecuteContract": {
aminoType: "wasm/MsgExecuteContract",
toAmino: ({ sender, contract, msg, funds }: MsgExecuteContract): MsgExecuteContractValueAmino => {
toAmino: ({ sender, contract, msg, funds }: MsgExecuteContract): AminoMsgExecuteContract["value"] => {
assertDefinedAndNotNull(sender, "missing sender");
assertDefinedAndNotNull(contract, "missing contract");
assertDefinedAndNotNull(msg, "missing msg");
@ -159,7 +235,7 @@ export const cosmWasmTypes: Record<string, AminoConverter> = {
funds: funds.map(coinFromProto),
};
},
fromAmino: ({ sender, contract, msg, funds }: MsgExecuteContractValueAmino): MsgExecuteContract => ({
fromAmino: ({ sender, contract, msg, funds }: AminoMsgExecuteContract["value"]): MsgExecuteContract => ({
sender: sender,
contract: contract,
msg: toUtf8(JSON.stringify(msg)),
@ -173,7 +249,7 @@ export const cosmWasmTypes: Record<string, AminoConverter> = {
contract,
codeId,
migrateMsg,
}: MsgMigrateContract): LaunchpadMsgMigrateContract["value"] => {
}: MsgMigrateContract): AminoMsgMigrateContract["value"] => {
assertDefinedAndNotNull(sender, "missing sender");
assertDefinedAndNotNull(contract, "missing contract");
assertDefinedAndNotNull(codeId, "missing codeId");
@ -190,7 +266,7 @@ export const cosmWasmTypes: Record<string, AminoConverter> = {
contract,
code_id,
msg,
}: LaunchpadMsgMigrateContract["value"]): MsgMigrateContract => ({
}: AminoMsgMigrateContract["value"]): MsgMigrateContract => ({
sender: sender,
contract: contract,
codeId: Long.fromString(code_id),