mcps-sdk-js
Version:
MCPS JavaScript SDK
317 lines (279 loc) • 7.49 kB
text/typescript
import { Coin, Msg, Pubkey, TxType } from './types';
import { TxModelCreator } from '../helper';
import * as pbs from "./proto";
// AccessType permission types
export enum AccessType {
ACCESS_TYPE_UNSPECIFIED = 'ACCESS_TYPE_UNSPECIFIED',
ACCESS_TYPE_NOBODY = 'ACCESS_TYPE_NOBODY',
ACCESS_TYPE_ONLY_ADDRESS = 'ACCESS_TYPE_ONLY_ADDRESS',
ACCESS_TYPE_EVERYBODY = 'ACCESS_TYPE_EVERYBODY',
}
/**
* param struct for Msg Store Code tx
*/
export interface StoreCodeTxParam {
sender: string,
wasm_byte_code: string,
source?:string,
builder?:string,
instantiate_permission?:{ permission:AccessType, address:string },
}
/**
* Msg for Msg Store Code
* @hidden
*/
export class MsgStoreCode extends Msg {
value: StoreCodeTxParam;
constructor(msg:StoreCodeTxParam) {
super(TxType.MsgStoreCode);
this.value = msg;
}
static getModelClass():any{
return pbs.contract_tx_pb.MsgStoreCode;
}
getModel():any{
let msg = new ((this.constructor as any).getModelClass())();
msg.setSender(this.value.sender);
msg.setWasmByteCode(this.value.wasm_byte_code);
if (this.value.source) { msg.setSource(this.value.source); }
if (this.value.builder) { msg.setBuilder(this.value.builder); }
if (this.value.instantiate_permission && this.value.instantiate_permission.permission) {
let accessConfig = new pbs.contract_tx_pb.AccessConfig();
accessConfig.setPermission(pbs.contract_types_pb.AccessType[this.value.instantiate_permission.permission]);
if (this.value.instantiate_permission.address) {
accessConfig.setAddress(this.value.instantiate_permission.address);
}
msg.setInstantiatePermission(accessConfig);
}
return msg;
}
validate() {
if (!this.value.sender) {
throw new Error("sender is empty");
}
if (!this.value.wasm_byte_code) {
throw new Error("wasm_byte_code is empty");
}
}
}
/**
* param struct for Instantiate Contract tx
*/
export interface InstantiateContractTxParam {
sender: string,
admin?: string,
code_id: number,
label: string,
init_msg: Buffer,
init_funds: Coin[],
}
/**
* Msg for Msg Instantiate Contract
* @hidden
*/
export class MsgInstantiateContract extends Msg {
value: InstantiateContractTxParam;
constructor(msg:InstantiateContractTxParam) {
super(TxType.MsgInstantiateContract);
this.value = msg;
}
static getModelClass():any{
return pbs.contract_tx_pb.MsgInstantiateContract;
}
getModel():any{
let msg = new ((this.constructor as any).getModelClass())();
msg.setSender(this.value.sender);
if (this.value.admin) {msg.setAdmin(this.value.admin);}
msg.setCodeId(this.value.code_id);
if (this.value.label) {msg.setLabel(this.value.label);}
msg.setInitMsg(this.value.init_msg);
this.value.init_funds.forEach((item)=>{
msg.addInitFunds(TxModelCreator.createCoinModel(item.denom, item.amount));
});
return msg;
}
validate() {
if (!this.value.sender) {
throw new Error("sender is empty");
}
if (!this.value.code_id) {
throw new Error("code_id is empty");
}
if (!this.value.label) {
throw new Error("label is empty");
}
if (!this.value.init_msg) {
throw new Error("init_msg is empty");
}
if (!(this.value.init_funds && this.value.init_funds.length)) {
throw new Error("init_funds is empty");
}
}
}
/**
* param struct for Execute Contract tx
*/
export interface ExecuteContractTxParam {
sender: string,
contract: string,
msg:Buffer,
sent_funds:Coin[],
}
/**
* Msg for Msg Execute Contract
* @hidden
*/
export class MsgExecuteContract extends Msg {
value: ExecuteContractTxParam;
constructor(msg:ExecuteContractTxParam) {
super(TxType.MsgExecuteContract);
this.value = msg;
}
static getModelClass():any{
return pbs.contract_tx_pb.MsgExecuteContract;
}
getModel():any{
let msg = new ((this.constructor as any).getModelClass())();
msg.setSender(this.value.sender);
msg.setContract(this.value.contract);
msg.setMsg(this.value.msg);
this.value.sent_funds.forEach((item)=>{
msg.addSentFunds(TxModelCreator.createCoinModel(item.denom, item.amount));
});
return msg;
}
validate() {
if (!this.value.sender) {
throw new Error("sender is empty");
}
if (!this.value.contract) {
throw new Error("contract is empty");
}
if (!this.value.msg) {
throw new Error("msg is empty");
}
if (!(this.value.sent_funds && this.value.sent_funds.length)) {
throw new Error("sent_funds is empty");
}
}
}
/**
* param struct for Migrate Contract tx
*/
export interface MigrateContractTxParam {
sender: string,
contract: string,
code_id: number,
migrate_msg: Buffer,
}
/**
* Msg for Msg Execute Contract
* @hidden
*/
export class MsgMigrateContract extends Msg {
value: MigrateContractTxParam;
constructor(msg:MigrateContractTxParam) {
super(TxType.MsgMigrateContract);
this.value = msg;
}
static getModelClass():any{
return pbs.contract_tx_pb.MsgMigrateContract;
}
getModel():any{
let msg = new ((this.constructor as any).getModelClass())();
msg.setSender(this.value.sender);
msg.setContract(this.value.contract);
msg.setCodeId(this.value.code_id);
msg.setMigrateMsg(this.value.migrate_msg);
return msg;
}
validate() {
if (!this.value.sender) {
throw new Error("sender is empty");
}
if (!this.value.contract) {
throw new Error("contract is empty");
}
if (!this.value.code_id) {
throw new Error("code_id is empty");
}
if (!this.value.migrate_msg) {
throw new Error("migrate_msg is empty");
}
}
}
/**
* param struct for Update Admin tx
*/
export interface UpdateAdminTxParam {
sender: string,
new_admin: string,
contract: string,
}
/**
* Msg for Msg Execute Contract
* @hidden
*/
export class MsgUpdateAdmin extends Msg {
value: UpdateAdminTxParam;
constructor(msg:UpdateAdminTxParam) {
super(TxType.MsgUpdateAdmin);
this.value = msg;
}
static getModelClass():any{
return pbs.contract_tx_pb.MsgUpdateAdmin;
}
getModel():any{
let msg = new ((this.constructor as any).getModelClass())();
msg.setSender(this.value.sender);
msg.setNewAdmin(this.value.new_admin);
msg.setContract(this.value.contract);
return msg;
}
validate() {
if (!this.value.sender) {
throw new Error("sender is empty");
}
if (!this.value.new_admin) {
throw new Error("new_admin is empty");
}
if (!this.value.contract) {
throw new Error("contract is empty");
}
}
}
/**
* param struct for Clear Admin tx
*/
export interface ClearAdminTxParam {
sender: string,
contract: string,
}
/**
* Msg for Msg Execute Contract
* @hidden
*/
export class MsgClearAdmin extends Msg {
value: ClearAdminTxParam;
constructor(msg:ClearAdminTxParam) {
super(TxType.MsgClearAdmin);
this.value = msg;
}
static getModelClass():any{
return pbs.contract_tx_pb.MsgClearAdmin;
}
getModel():any{
let msg = new ((this.constructor as any).getModelClass())();
msg.setSender(this.value.sender);
msg.setContract(this.value.contract);
return msg;
}
validate() {
if (!this.value.sender) {
throw new Error("sender is empty");
}
if (!this.value.contract) {
throw new Error("contract is empty");
}
}
}