-
Notifications
You must be signed in to change notification settings - Fork 150
/
MsgSwapSend.ts
130 lines (118 loc) · 3.45 KB
/
MsgSwapSend.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import { JSONSerializable } from '../../../util/json';
import { Coin } from '../../Coin';
import { Denom } from '../../Denom';
import { AccAddress } from '../../bech32';
import { Any } from '@terra-money/terra.proto/google/protobuf/any';
import { MsgSwapSend as MsgSwapSend_pb } from '@terra-money/terra.proto/terra/market/v1beta1/tx';
/**
* Executes a market swap send between 2 denominations at the exchange rate registered by the
* Oracle module. The sender account will lose the amount of coins offered, and receiver will receive funds
* in the requested denomination after a swap and send fee has been applied.
*/
export class MsgSwapSend extends JSONSerializable<
MsgSwapSend.Amino,
MsgSwapSend.Data,
MsgSwapSend.Proto
> {
/**
* @param from_address sender's account address
* @param to_address receiver's account address
* @param offer_coin coin to be swapped (from)
* @param ask_denom desired denomination (to)
*/
constructor(
public from_address: AccAddress,
public to_address: AccAddress,
public offer_coin: Coin,
public ask_denom: Denom
) {
super();
}
public static fromAmino(data: MsgSwapSend.Amino): MsgSwapSend {
const {
value: { from_address, to_address, offer_coin, ask_denom },
} = data;
return new MsgSwapSend(
from_address,
to_address,
Coin.fromAmino(offer_coin),
ask_denom
);
}
public toAmino(): MsgSwapSend.Amino {
const { from_address, to_address, offer_coin, ask_denom } = this;
return {
type: 'market/MsgSwapSend',
value: {
from_address,
to_address,
offer_coin: offer_coin.toAmino(),
ask_denom,
},
};
}
public static fromProto(proto: MsgSwapSend.Proto): MsgSwapSend {
return new MsgSwapSend(
proto.fromAddress,
proto.toAddress,
Coin.fromProto(proto.offerCoin as Coin.Proto),
proto.askDenom
);
}
public toProto(): MsgSwapSend.Proto {
const { from_address, to_address, offer_coin, ask_denom } = this;
return MsgSwapSend_pb.fromPartial({
askDenom: ask_denom,
fromAddress: from_address,
offerCoin: offer_coin.toProto(),
toAddress: to_address,
});
}
public packAny(): Any {
return Any.fromPartial({
typeUrl: '/terra.market.v1beta1.MsgSwapSend',
value: MsgSwapSend_pb.encode(this.toProto()).finish(),
});
}
public static unpackAny(msgAny: Any): MsgSwapSend {
return MsgSwapSend.fromProto(MsgSwapSend_pb.decode(msgAny.value));
}
public static fromData(data: MsgSwapSend.Data): MsgSwapSend {
const { from_address, to_address, offer_coin, ask_denom } = data;
return new MsgSwapSend(
from_address,
to_address,
Coin.fromData(offer_coin),
ask_denom
);
}
public toData(): MsgSwapSend.Data {
const { from_address, to_address, offer_coin, ask_denom } = this;
return {
'@type': '/terra.market.v1beta1.MsgSwapSend',
from_address,
to_address,
offer_coin: offer_coin.toData(),
ask_denom,
};
}
}
export namespace MsgSwapSend {
export interface Amino {
type: 'market/MsgSwapSend';
value: {
from_address: AccAddress;
to_address: AccAddress;
offer_coin: Coin.Amino;
ask_denom: Denom;
};
}
export interface Data {
'@type': '/terra.market.v1beta1.MsgSwapSend';
from_address: AccAddress;
to_address: AccAddress;
offer_coin: Coin.Data;
ask_denom: Denom;
}
export type Proto = MsgSwapSend_pb;
}