@ritbit/v4-client-js 2.5.2 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/models.js +19 -3
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/params.js +28 -3
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.js +92 -5
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.rpc.msg.js +7 -1
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/assets/tx.js +19 -3
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/tx.js +1 -1
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/params.js +134 -0
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.js +204 -0
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.rpc.msg.js +57 -0
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/lcd.js +4 -1
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.query.js +3 -2
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.tx.js +4 -2
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/sending/tx.js +1 -1
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/genesis.js +151 -0
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/params.js +134 -0
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.js +248 -0
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.lcd.js +34 -0
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.rpc.Query.js +71 -0
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.js +282 -0
- package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.rpc.msg.js +63 -0
- package/build/cjs/src/clients/composite-client.js +7 -3
- package/build/cjs/src/clients/constants.js +15 -3
- package/build/cjs/src/clients/lib/accounts.js +44 -5
- package/build/cjs/src/clients/lib/agent-approval-tx.js +83 -0
- package/build/cjs/src/clients/lib/agent-approval.js +119 -0
- package/build/cjs/src/clients/lib/eip712.js +592 -0
- package/build/cjs/src/clients/lib/eth-pubkey.js +68 -0
- package/build/cjs/src/clients/modules/account.js +7 -2
- package/build/cjs/src/clients/modules/composer.js +15 -2
- package/build/cjs/src/clients/modules/eip712-signer.js +189 -0
- package/build/cjs/src/clients/modules/eth-agent-wallet.js +101 -0
- package/build/cjs/src/clients/modules/eth-wallet.js +91 -0
- package/build/cjs/src/clients/modules/local-wallet.js +9 -2
- package/build/cjs/src/clients/modules/post.js +14 -4
- package/build/cjs/src/clients/modules/signer.js +7 -2
- package/build/cjs/src/index.js +38 -2
- package/build/cjs/src/lib/evm-address.js +92 -0
- package/build/cjs/src/lib/trading-key-utils.js +41 -3
- package/build/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/models.d.ts +15 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/models.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/models.js +19 -3
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/params.d.ts +24 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/params.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/params.js +28 -3
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.d.ts +43 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.js +91 -4
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.rpc.msg.d.ts +4 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.rpc.msg.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.rpc.msg.js +8 -2
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/assets/tx.d.ts +9 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/assets/tx.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/assets/tx.js +19 -3
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/tx.d.ts +14 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/tx.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/tx.js +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/params.d.ts +116 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/params.d.ts.map +1 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/params.js +98 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.d.ts +80 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.d.ts.map +1 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.js +168 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.rpc.msg.d.ts +21 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.rpc.msg.d.ts.map +1 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.rpc.msg.js +20 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/lcd.d.ts +1 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/lcd.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/lcd.js +4 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.query.d.ts +4 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.query.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.query.js +3 -2
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.tx.d.ts +2 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.tx.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.tx.js +4 -2
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/sending/tx.d.ts +0 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/sending/tx.d.ts.map +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/sending/tx.js +1 -1
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/genesis.d.ts +79 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/genesis.d.ts.map +1 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/genesis.js +115 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/params.d.ts +116 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/params.d.ts.map +1 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/params.js +98 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.d.ts +82 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.d.ts.map +1 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.js +212 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.lcd.d.ts +11 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.lcd.d.ts.map +1 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.lcd.js +30 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.rpc.Query.d.ts +29 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.rpc.Query.d.ts.map +1 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.rpc.Query.js +33 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.d.ts +123 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.d.ts.map +1 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.js +246 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.rpc.msg.d.ts +36 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.rpc.msg.d.ts.map +1 -0
- package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.rpc.msg.js +26 -0
- package/build/esm/src/clients/composite-client.d.ts +6 -1
- package/build/esm/src/clients/composite-client.d.ts.map +1 -1
- package/build/esm/src/clients/composite-client.js +7 -3
- package/build/esm/src/clients/constants.d.ts +13 -1
- package/build/esm/src/clients/constants.d.ts.map +1 -1
- package/build/esm/src/clients/constants.js +13 -1
- package/build/esm/src/clients/lib/accounts.d.ts +4 -3
- package/build/esm/src/clients/lib/accounts.d.ts.map +1 -1
- package/build/esm/src/clients/lib/accounts.js +44 -5
- package/build/esm/src/clients/lib/agent-approval-tx.d.ts +46 -0
- package/build/esm/src/clients/lib/agent-approval-tx.d.ts.map +1 -0
- package/build/esm/src/clients/lib/agent-approval-tx.js +79 -0
- package/build/esm/src/clients/lib/agent-approval.d.ts +64 -0
- package/build/esm/src/clients/lib/agent-approval.d.ts.map +1 -0
- package/build/esm/src/clients/lib/agent-approval.js +112 -0
- package/build/esm/src/clients/lib/eip712.d.ts +95 -0
- package/build/esm/src/clients/lib/eip712.d.ts.map +1 -0
- package/build/esm/src/clients/lib/eip712.js +581 -0
- package/build/esm/src/clients/lib/eth-pubkey.d.ts +44 -0
- package/build/esm/src/clients/lib/eth-pubkey.d.ts.map +1 -0
- package/build/esm/src/clients/lib/eth-pubkey.js +61 -0
- package/build/esm/src/clients/modules/account.d.ts +5 -1
- package/build/esm/src/clients/modules/account.d.ts.map +1 -1
- package/build/esm/src/clients/modules/account.js +7 -2
- package/build/esm/src/clients/modules/composer.d.ts +12 -1
- package/build/esm/src/clients/modules/composer.d.ts.map +1 -1
- package/build/esm/src/clients/modules/composer.js +15 -2
- package/build/esm/src/clients/modules/eip712-signer.d.ts +99 -0
- package/build/esm/src/clients/modules/eip712-signer.d.ts.map +1 -0
- package/build/esm/src/clients/modules/eip712-signer.js +183 -0
- package/build/esm/src/clients/modules/eth-agent-wallet.d.ts +39 -0
- package/build/esm/src/clients/modules/eth-agent-wallet.d.ts.map +1 -0
- package/build/esm/src/clients/modules/eth-agent-wallet.js +97 -0
- package/build/esm/src/clients/modules/eth-wallet.d.ts +32 -0
- package/build/esm/src/clients/modules/eth-wallet.d.ts.map +1 -0
- package/build/esm/src/clients/modules/eth-wallet.js +83 -0
- package/build/esm/src/clients/modules/local-wallet.d.ts +2 -1
- package/build/esm/src/clients/modules/local-wallet.d.ts.map +1 -1
- package/build/esm/src/clients/modules/local-wallet.js +9 -2
- package/build/esm/src/clients/modules/post.d.ts +1 -1
- package/build/esm/src/clients/modules/post.d.ts.map +1 -1
- package/build/esm/src/clients/modules/post.js +14 -4
- package/build/esm/src/clients/modules/signer.d.ts +2 -1
- package/build/esm/src/clients/modules/signer.d.ts.map +1 -1
- package/build/esm/src/clients/modules/signer.js +7 -2
- package/build/esm/src/index.d.ts +13 -0
- package/build/esm/src/index.d.ts.map +1 -1
- package/build/esm/src/index.js +9 -1
- package/build/esm/src/lib/evm-address.d.ts +31 -0
- package/build/esm/src/lib/evm-address.d.ts.map +1 -0
- package/build/esm/src/lib/evm-address.js +85 -0
- package/build/esm/src/lib/trading-key-utils.d.ts +3 -0
- package/build/esm/src/lib/trading-key-utils.d.ts.map +1 -1
- package/build/esm/src/lib/trading-key-utils.js +42 -4
- package/build/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,581 @@
|
|
|
1
|
+
import { toBase64 } from '@cosmjs/encoding';
|
|
2
|
+
import { MsgAddAuthenticator, MsgRemoveAuthenticator } from '@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx';
|
|
3
|
+
import { MsgDepositToSubaccount, MsgWithdrawFromSubaccount, } from '@ritbit/v4-proto/src/codegen/ritbit/sending/transfer';
|
|
4
|
+
import { MsgRegisterAffiliate } from '@ritbit/v4-proto/src/codegen/ritbit/affiliates/tx';
|
|
5
|
+
import { MsgWithdrawal } from '@ritbit/v4-proto/src/codegen/ritbit/bridge/tx';
|
|
6
|
+
import { MsgCreateMarketPermissionless } from '@ritbit/v4-proto/src/codegen/ritbit/listing/tx';
|
|
7
|
+
import { MsgCreateTransfer } from '@ritbit/v4-proto/src/codegen/ritbit/sending/tx';
|
|
8
|
+
import { MsgRedeem as MsgWrapRedeem, MsgWithdraw as MsgWrapWithdraw, } from '@ritbit/v4-proto/src/codegen/ritbit/wrap/tx';
|
|
9
|
+
import { MsgDepositToMegavault, MsgWithdrawFromMegavault, } from '@ritbit/v4-proto/src/codegen/ritbit/vault/tx';
|
|
10
|
+
import { MsgSend } from 'cosmjs-types/cosmos/bank/v1beta1/tx';
|
|
11
|
+
import { MsgWithdrawDelegatorReward } from 'cosmjs-types/cosmos/distribution/v1beta1/tx';
|
|
12
|
+
import { MsgDelegate, MsgUndelegate } from 'cosmjs-types/cosmos/staking/v1beta1/tx';
|
|
13
|
+
import { AuthInfo, SignDoc, TxBody } from 'cosmjs-types/cosmos/tx/v1beta1/tx';
|
|
14
|
+
import { concat, getBytes, keccak256, TypedDataEncoder } from 'ethers';
|
|
15
|
+
import Long from 'long';
|
|
16
|
+
import { TYPE_URL_MSG_ADD_AUTHENTICATOR, TYPE_URL_MSG_CREATE_MARKET_PERMISSIONLESS, TYPE_URL_MSG_CREATE_TRANSFER, TYPE_URL_MSG_DELEGATE, TYPE_URL_MSG_DEPOSIT_TO_MEGAVAULT, TYPE_URL_MSG_DEPOSIT_TO_SUBACCOUNT, TYPE_URL_MSG_REGISTER_AFFILIATE, TYPE_URL_MSG_REMOVE_AUTHENTICATOR, TYPE_URL_MSG_SEND, TYPE_URL_MSG_UNDELEGATE, TYPE_URL_MSG_WITHDRAW_DELEGATOR_REWARD, TYPE_URL_MSG_WITHDRAWAL, TYPE_URL_MSG_WRAP_REDEEM, TYPE_URL_MSG_WRAP_WITHDRAW, TYPE_URL_MSG_WITHDRAW_FROM_MEGAVAULT, TYPE_URL_MSG_WITHDRAW_FROM_SUBACCOUNT, } from '../constants';
|
|
17
|
+
function coinToAmino(coin) {
|
|
18
|
+
const value = {};
|
|
19
|
+
if (coin.denom !== '') {
|
|
20
|
+
value.denom = coin.denom;
|
|
21
|
+
}
|
|
22
|
+
// Coin.amount is amino.dont_omitempty: always rendered.
|
|
23
|
+
value.amount = coin.amount;
|
|
24
|
+
return value;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* SubaccountId rendered as an amino JSON object. The chain's gogoproto
|
|
28
|
+
* declares subaccount ids as non-nullable embedded messages, so the field is
|
|
29
|
+
* always present on the wire (and thus always rendered, possibly as {}),
|
|
30
|
+
* while its own empty/zero subfields are omitted.
|
|
31
|
+
*/
|
|
32
|
+
function subaccountIdToAmino(id) {
|
|
33
|
+
const value = {};
|
|
34
|
+
if (id !== undefined && id.owner !== '') {
|
|
35
|
+
value.owner = id.owner;
|
|
36
|
+
}
|
|
37
|
+
if (id !== undefined && id.number !== 0) {
|
|
38
|
+
value.number = id.number;
|
|
39
|
+
}
|
|
40
|
+
return value;
|
|
41
|
+
}
|
|
42
|
+
function isLongSet(value) {
|
|
43
|
+
return value !== undefined && !Long.fromValue(value).isZero();
|
|
44
|
+
}
|
|
45
|
+
const defaultEip712AminoConverters = {
|
|
46
|
+
[TYPE_URL_MSG_SEND]: (bytes) => {
|
|
47
|
+
const msg = MsgSend.decode(bytes);
|
|
48
|
+
const value = {};
|
|
49
|
+
if (msg.fromAddress !== '') {
|
|
50
|
+
value.from_address = msg.fromAddress;
|
|
51
|
+
}
|
|
52
|
+
if (msg.toAddress !== '') {
|
|
53
|
+
value.to_address = msg.toAddress;
|
|
54
|
+
}
|
|
55
|
+
// amount is amino.dont_omitempty + legacy_coins: always rendered.
|
|
56
|
+
value.amount = msg.amount.map(coinToAmino);
|
|
57
|
+
return { type: 'cosmos-sdk/MsgSend', value };
|
|
58
|
+
},
|
|
59
|
+
[TYPE_URL_MSG_ADD_AUTHENTICATOR]: (bytes) => {
|
|
60
|
+
const msg = MsgAddAuthenticator.decode(bytes);
|
|
61
|
+
const value = {};
|
|
62
|
+
if (msg.sender !== '') {
|
|
63
|
+
value.sender = msg.sender;
|
|
64
|
+
}
|
|
65
|
+
if (msg.authenticatorType !== '') {
|
|
66
|
+
value.authenticator_type = msg.authenticatorType;
|
|
67
|
+
}
|
|
68
|
+
if (msg.data.length > 0) {
|
|
69
|
+
value.data = toBase64(msg.data);
|
|
70
|
+
}
|
|
71
|
+
if (msg.name !== '') {
|
|
72
|
+
value.name = msg.name;
|
|
73
|
+
}
|
|
74
|
+
if (isLongSet(msg.expiresAt)) {
|
|
75
|
+
value.expires_at = msg.expiresAt.toString();
|
|
76
|
+
}
|
|
77
|
+
return { type: 'ritbit/accountplus/MsgAddAuthenticator', value };
|
|
78
|
+
},
|
|
79
|
+
[TYPE_URL_MSG_REMOVE_AUTHENTICATOR]: (bytes) => {
|
|
80
|
+
const msg = MsgRemoveAuthenticator.decode(bytes);
|
|
81
|
+
const value = {};
|
|
82
|
+
if (msg.sender !== '') {
|
|
83
|
+
value.sender = msg.sender;
|
|
84
|
+
}
|
|
85
|
+
if (isLongSet(msg.id)) {
|
|
86
|
+
value.id = msg.id.toString();
|
|
87
|
+
}
|
|
88
|
+
return { type: 'ritbit/accountplus/MsgRemoveAuthenticator', value };
|
|
89
|
+
},
|
|
90
|
+
[TYPE_URL_MSG_WITHDRAW_FROM_SUBACCOUNT]: (bytes) => {
|
|
91
|
+
const msg = MsgWithdrawFromSubaccount.decode(bytes);
|
|
92
|
+
const value = {};
|
|
93
|
+
// sender is gogoproto non-nullable: always present.
|
|
94
|
+
value.sender = subaccountIdToAmino(msg.sender);
|
|
95
|
+
if (msg.recipient !== '') {
|
|
96
|
+
value.recipient = msg.recipient;
|
|
97
|
+
}
|
|
98
|
+
if (msg.assetId !== 0) {
|
|
99
|
+
value.asset_id = msg.assetId;
|
|
100
|
+
}
|
|
101
|
+
if (isLongSet(msg.quantums)) {
|
|
102
|
+
value.quantums = msg.quantums.toString();
|
|
103
|
+
}
|
|
104
|
+
return { type: 'ritbit/sending/MsgWithdrawFromSubaccount', value };
|
|
105
|
+
},
|
|
106
|
+
[TYPE_URL_MSG_DEPOSIT_TO_SUBACCOUNT]: (bytes) => {
|
|
107
|
+
const msg = MsgDepositToSubaccount.decode(bytes);
|
|
108
|
+
const value = {};
|
|
109
|
+
if (msg.sender !== '') {
|
|
110
|
+
value.sender = msg.sender;
|
|
111
|
+
}
|
|
112
|
+
// recipient is gogoproto non-nullable: always present.
|
|
113
|
+
value.recipient = subaccountIdToAmino(msg.recipient);
|
|
114
|
+
if (msg.assetId !== 0) {
|
|
115
|
+
value.asset_id = msg.assetId;
|
|
116
|
+
}
|
|
117
|
+
if (isLongSet(msg.quantums)) {
|
|
118
|
+
value.quantums = msg.quantums.toString();
|
|
119
|
+
}
|
|
120
|
+
return { type: 'ritbit/sending/MsgDepositToSubaccount', value };
|
|
121
|
+
},
|
|
122
|
+
[TYPE_URL_MSG_CREATE_TRANSFER]: (bytes) => {
|
|
123
|
+
const msg = MsgCreateTransfer.decode(bytes);
|
|
124
|
+
const value = {};
|
|
125
|
+
if (msg.transfer !== undefined) {
|
|
126
|
+
const transfer = {
|
|
127
|
+
// sender/recipient are gogoproto non-nullable: always present.
|
|
128
|
+
sender: subaccountIdToAmino(msg.transfer.sender),
|
|
129
|
+
recipient: subaccountIdToAmino(msg.transfer.recipient),
|
|
130
|
+
};
|
|
131
|
+
if (msg.transfer.assetId !== 0) {
|
|
132
|
+
transfer.asset_id = msg.transfer.assetId;
|
|
133
|
+
}
|
|
134
|
+
if (isLongSet(msg.transfer.amount)) {
|
|
135
|
+
transfer.amount = msg.transfer.amount.toString();
|
|
136
|
+
}
|
|
137
|
+
value.transfer = transfer;
|
|
138
|
+
}
|
|
139
|
+
return { type: 'ritbit/sending/MsgCreateTransfer', value };
|
|
140
|
+
},
|
|
141
|
+
// Staking from the web: master-account transactions the wallet signs.
|
|
142
|
+
// legacy coins render with both fields always present; the claim message
|
|
143
|
+
// keeps the SDK's historical amino name (…DelegationReward, not Delegator).
|
|
144
|
+
// Pinned by the MsgDelegate/MsgUndelegate/MsgWithdrawDelegatorReward goldens.
|
|
145
|
+
[TYPE_URL_MSG_DELEGATE]: (bytes) => {
|
|
146
|
+
const msg = MsgDelegate.decode(bytes);
|
|
147
|
+
const value = {};
|
|
148
|
+
if (msg.delegatorAddress !== '') {
|
|
149
|
+
value.delegator_address = msg.delegatorAddress;
|
|
150
|
+
}
|
|
151
|
+
if (msg.validatorAddress !== '') {
|
|
152
|
+
value.validator_address = msg.validatorAddress;
|
|
153
|
+
}
|
|
154
|
+
if (msg.amount !== undefined) {
|
|
155
|
+
value.amount = coinToAmino(msg.amount);
|
|
156
|
+
}
|
|
157
|
+
return { type: 'cosmos-sdk/MsgDelegate', value };
|
|
158
|
+
},
|
|
159
|
+
[TYPE_URL_MSG_UNDELEGATE]: (bytes) => {
|
|
160
|
+
const msg = MsgUndelegate.decode(bytes);
|
|
161
|
+
const value = {};
|
|
162
|
+
if (msg.delegatorAddress !== '') {
|
|
163
|
+
value.delegator_address = msg.delegatorAddress;
|
|
164
|
+
}
|
|
165
|
+
if (msg.validatorAddress !== '') {
|
|
166
|
+
value.validator_address = msg.validatorAddress;
|
|
167
|
+
}
|
|
168
|
+
if (msg.amount !== undefined) {
|
|
169
|
+
value.amount = coinToAmino(msg.amount);
|
|
170
|
+
}
|
|
171
|
+
return { type: 'cosmos-sdk/MsgUndelegate', value };
|
|
172
|
+
},
|
|
173
|
+
[TYPE_URL_MSG_WITHDRAW_DELEGATOR_REWARD]: (bytes) => {
|
|
174
|
+
const msg = MsgWithdrawDelegatorReward.decode(bytes);
|
|
175
|
+
const value = {};
|
|
176
|
+
if (msg.delegatorAddress !== '') {
|
|
177
|
+
value.delegator_address = msg.delegatorAddress;
|
|
178
|
+
}
|
|
179
|
+
if (msg.validatorAddress !== '') {
|
|
180
|
+
value.validator_address = msg.validatorAddress;
|
|
181
|
+
}
|
|
182
|
+
return { type: 'cosmos-sdk/MsgWithdrawDelegationReward', value };
|
|
183
|
+
},
|
|
184
|
+
// The bridge withdrawal the web's withdraw form sends. math.Int renders as a
|
|
185
|
+
// decimal string; uint64 as a string; zero scalars are omitted. Pinned by the
|
|
186
|
+
// MsgBridgeWithdrawal golden.
|
|
187
|
+
[TYPE_URL_MSG_WITHDRAWAL]: (bytes) => {
|
|
188
|
+
const msg = MsgWithdrawal.decode(bytes);
|
|
189
|
+
const value = {};
|
|
190
|
+
if (msg.sender !== '') {
|
|
191
|
+
value.sender = msg.sender;
|
|
192
|
+
}
|
|
193
|
+
if (msg.amount !== '' && msg.amount !== '0') {
|
|
194
|
+
value.amount = msg.amount;
|
|
195
|
+
}
|
|
196
|
+
if (msg.ethRecipient !== '') {
|
|
197
|
+
value.eth_recipient = msg.ethRecipient;
|
|
198
|
+
}
|
|
199
|
+
if (isLongSet(msg.ethChainId)) {
|
|
200
|
+
value.eth_chain_id = msg.ethChainId.toString();
|
|
201
|
+
}
|
|
202
|
+
if (msg.assetId !== 0) {
|
|
203
|
+
value.asset_id = msg.assetId;
|
|
204
|
+
}
|
|
205
|
+
return { type: 'ritbit/bridge/MsgWithdrawal', value };
|
|
206
|
+
},
|
|
207
|
+
[TYPE_URL_MSG_REGISTER_AFFILIATE]: (bytes) => {
|
|
208
|
+
const msg = MsgRegisterAffiliate.decode(bytes);
|
|
209
|
+
const value = {};
|
|
210
|
+
if (msg.referee !== '') {
|
|
211
|
+
value.referee = msg.referee;
|
|
212
|
+
}
|
|
213
|
+
if (msg.affiliate !== '') {
|
|
214
|
+
value.affiliate = msg.affiliate;
|
|
215
|
+
}
|
|
216
|
+
return { type: 'ritbit/affiliates/MsgRegisterAffiliate', value };
|
|
217
|
+
},
|
|
218
|
+
[TYPE_URL_MSG_CREATE_MARKET_PERMISSIONLESS]: (bytes) => {
|
|
219
|
+
const msg = MsgCreateMarketPermissionless.decode(bytes);
|
|
220
|
+
const value = {};
|
|
221
|
+
if (msg.ticker !== '') {
|
|
222
|
+
value.ticker = msg.ticker;
|
|
223
|
+
}
|
|
224
|
+
// subaccount_id is a nullable pointer: present only when set.
|
|
225
|
+
if (msg.subaccountId !== undefined) {
|
|
226
|
+
value.subaccount_id = subaccountIdToAmino(msg.subaccountId);
|
|
227
|
+
}
|
|
228
|
+
return { type: 'ritbit/listing/MsgCreateMarketPermissionless', value };
|
|
229
|
+
},
|
|
230
|
+
[TYPE_URL_MSG_WRAP_WITHDRAW]: (bytes) => {
|
|
231
|
+
const msg = MsgWrapWithdraw.decode(bytes);
|
|
232
|
+
const value = {};
|
|
233
|
+
if (msg.sender !== '') {
|
|
234
|
+
value.sender = msg.sender;
|
|
235
|
+
}
|
|
236
|
+
if (msg.amount !== '' && msg.amount !== '0') {
|
|
237
|
+
value.amount = msg.amount;
|
|
238
|
+
}
|
|
239
|
+
if (msg.receiver !== '') {
|
|
240
|
+
value.receiver = msg.receiver;
|
|
241
|
+
}
|
|
242
|
+
if (isLongSet(msg.timeoutSeconds)) {
|
|
243
|
+
value.timeout_seconds = msg.timeoutSeconds.toString();
|
|
244
|
+
}
|
|
245
|
+
if (msg.voucherDenom !== '') {
|
|
246
|
+
value.voucher_denom = msg.voucherDenom;
|
|
247
|
+
}
|
|
248
|
+
return { type: 'ritbit/wrap/MsgWithdraw', value };
|
|
249
|
+
},
|
|
250
|
+
[TYPE_URL_MSG_WRAP_REDEEM]: (bytes) => {
|
|
251
|
+
const msg = MsgWrapRedeem.decode(bytes);
|
|
252
|
+
const value = {};
|
|
253
|
+
if (msg.sender !== '') {
|
|
254
|
+
value.sender = msg.sender;
|
|
255
|
+
}
|
|
256
|
+
if (msg.amount !== '' && msg.amount !== '0') {
|
|
257
|
+
value.amount = msg.amount;
|
|
258
|
+
}
|
|
259
|
+
if (msg.voucherDenom !== '') {
|
|
260
|
+
value.voucher_denom = msg.voucherDenom;
|
|
261
|
+
}
|
|
262
|
+
return { type: 'ritbit/wrap/MsgRedeem', value };
|
|
263
|
+
},
|
|
264
|
+
// Vault deposits/withdrawals are master-account transactions the wallet
|
|
265
|
+
// signs directly (the web's vault form). Amino shapes mirror the chain's
|
|
266
|
+
// aminojson encoding exactly — pinned by the MsgDepositToMegavault /
|
|
267
|
+
// MsgWithdrawFromMegavault vectors in eip712_goldens.json.
|
|
268
|
+
[TYPE_URL_MSG_DEPOSIT_TO_MEGAVAULT]: (bytes) => {
|
|
269
|
+
const msg = MsgDepositToMegavault.decode(bytes);
|
|
270
|
+
const value = {};
|
|
271
|
+
// subaccount_id is a nullable pointer on the chain: present only when set.
|
|
272
|
+
if (msg.subaccountId !== undefined) {
|
|
273
|
+
value.subaccount_id = subaccountIdToAmino(msg.subaccountId);
|
|
274
|
+
}
|
|
275
|
+
// SerializableInt renders as the raw big-int bytes in base64.
|
|
276
|
+
if (msg.quoteQuantums.length > 0) {
|
|
277
|
+
value.quote_quantums = toBase64(msg.quoteQuantums);
|
|
278
|
+
}
|
|
279
|
+
return { type: 'ritbit/vault/MsgDepositToMegavault', value };
|
|
280
|
+
},
|
|
281
|
+
[TYPE_URL_MSG_WITHDRAW_FROM_MEGAVAULT]: (bytes) => {
|
|
282
|
+
const msg = MsgWithdrawFromMegavault.decode(bytes);
|
|
283
|
+
const value = {};
|
|
284
|
+
// subaccount_id and shares are gogoproto non-nullable: always present.
|
|
285
|
+
value.subaccount_id = subaccountIdToAmino(msg.subaccountId);
|
|
286
|
+
const shares = {};
|
|
287
|
+
if (msg.shares !== undefined && msg.shares.numShares.length > 0) {
|
|
288
|
+
shares.num_shares = toBase64(msg.shares.numShares);
|
|
289
|
+
}
|
|
290
|
+
value.shares = shares;
|
|
291
|
+
if (msg.minQuoteQuantums.length > 0) {
|
|
292
|
+
value.min_quote_quantums = toBase64(msg.minQuoteQuantums);
|
|
293
|
+
}
|
|
294
|
+
return { type: 'ritbit/vault/MsgWithdrawFromMegavault', value };
|
|
295
|
+
},
|
|
296
|
+
};
|
|
297
|
+
const eip712AminoConverters = {
|
|
298
|
+
...defaultEip712AminoConverters,
|
|
299
|
+
};
|
|
300
|
+
/**
|
|
301
|
+
* Registers (or overrides) the amino converter for a msg typeUrl, extending
|
|
302
|
+
* the set of message types that can be EIP-712 signed.
|
|
303
|
+
*/
|
|
304
|
+
export function registerEip712AminoConverter(typeUrl, converter) {
|
|
305
|
+
eip712AminoConverters[typeUrl] = converter;
|
|
306
|
+
}
|
|
307
|
+
function convertAnyToAminoMsg(msgAny) {
|
|
308
|
+
const converter = eip712AminoConverters[msgAny.typeUrl];
|
|
309
|
+
if (converter === undefined) {
|
|
310
|
+
throw new Error(`EIP-712 signing does not support msg type ${msgAny.typeUrl}`);
|
|
311
|
+
}
|
|
312
|
+
return converter(msgAny.value);
|
|
313
|
+
}
|
|
314
|
+
// ---------------------------------------------------------------------------
|
|
315
|
+
// Types generation (port of cosmos/evm ethereum/eip712/types.go)
|
|
316
|
+
// ---------------------------------------------------------------------------
|
|
317
|
+
const ROOT_PREFIX = '_';
|
|
318
|
+
const TYPE_PREFIX = 'Type';
|
|
319
|
+
const TX_FIELD = 'Tx';
|
|
320
|
+
const MAX_DUPLICATE_TYPE_DEFS = 1000;
|
|
321
|
+
/** Port of message.go msgFieldForIndex: msgs[2] becomes 'msg2'. */
|
|
322
|
+
function msgFieldForIndex(i) {
|
|
323
|
+
return `msg${i}`;
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Port of types.go sanitizeTypedef: '_.foo_bar.baz' -> 'TypeFooBarBaz'.
|
|
327
|
+
* Title-cases each underscore-separated subpart (first letter only, the rest
|
|
328
|
+
* of the casing is preserved — cases.Title with NoLower).
|
|
329
|
+
*/
|
|
330
|
+
function sanitizeTypedef(str) {
|
|
331
|
+
return str
|
|
332
|
+
.split('.')
|
|
333
|
+
.map((part) => {
|
|
334
|
+
if (part === ROOT_PREFIX) {
|
|
335
|
+
return TYPE_PREFIX;
|
|
336
|
+
}
|
|
337
|
+
return part
|
|
338
|
+
.split('_')
|
|
339
|
+
.map((subpart) => (subpart === '' ? '' : subpart.charAt(0).toUpperCase() + subpart.slice(1)))
|
|
340
|
+
.join('');
|
|
341
|
+
})
|
|
342
|
+
.join('');
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Port of types.go sortedJSONKeys: keys sorted in REVERSE lexicographic
|
|
346
|
+
* (byte-wise descending) order, for deterministic type generation.
|
|
347
|
+
*/
|
|
348
|
+
function sortedJsonKeys(obj) {
|
|
349
|
+
return Object.keys(obj).sort((a, b) => (a < b ? 1 : a > b ? -1 : 0));
|
|
350
|
+
}
|
|
351
|
+
/** Port of types.go getEthTypeForJSON. Empty string for objects/arrays/null. */
|
|
352
|
+
function getEthTypeForJson(value) {
|
|
353
|
+
switch (typeof value) {
|
|
354
|
+
case 'boolean':
|
|
355
|
+
return 'bool';
|
|
356
|
+
case 'number':
|
|
357
|
+
return 'int64';
|
|
358
|
+
case 'string':
|
|
359
|
+
return 'string';
|
|
360
|
+
default:
|
|
361
|
+
return '';
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
function typesAreEqual(types1, types2) {
|
|
365
|
+
if (types1.length !== types2.length) {
|
|
366
|
+
return false;
|
|
367
|
+
}
|
|
368
|
+
for (let i = 0; i < types1.length; i++) {
|
|
369
|
+
if (types1[i].name !== types2[i].name || types1[i].type !== types2[i].type) {
|
|
370
|
+
return false;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
return true;
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Port of types.go addTypesToRoot: inserts the type list at the next
|
|
377
|
+
* available '<typeDef><n>' key (reusing an identical existing definition) and
|
|
378
|
+
* returns that key. All typedefs therefore carry a numeric suffix, e.g.
|
|
379
|
+
* 'TypeMsgSend0', 'TypeValue0'.
|
|
380
|
+
*/
|
|
381
|
+
function addTypesToRoot(typeMap, typeDef, types) {
|
|
382
|
+
for (let index = 0; index < MAX_DUPLICATE_TYPE_DEFS; index++) {
|
|
383
|
+
const indexedTypeDef = `${typeDef}${index}`;
|
|
384
|
+
const existingTypes = typeMap[indexedTypeDef];
|
|
385
|
+
if (existingTypes !== undefined && typesAreEqual(types, existingTypes)) {
|
|
386
|
+
return indexedTypeDef;
|
|
387
|
+
}
|
|
388
|
+
if (existingTypes === undefined) {
|
|
389
|
+
typeMap[indexedTypeDef] = types;
|
|
390
|
+
return indexedTypeDef;
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
throw new Error('exceeded maximum number of duplicates for a single type definition');
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Port of types.go recursivelyAddTypesToRoot: walks the msg JSON with keys in
|
|
397
|
+
* reverse-sorted order, unwrapping the first element of arrays, mapping JSON
|
|
398
|
+
* primitives to string/int64/bool and recursing into nested objects with the
|
|
399
|
+
* '_.field' prefix scheme.
|
|
400
|
+
*/
|
|
401
|
+
function recursivelyAddTypesToRoot(typeMap, rootType, prefix, payload) {
|
|
402
|
+
const typesToAdd = [];
|
|
403
|
+
const typeDef = prefix === ROOT_PREFIX ? rootType : sanitizeTypedef(prefix);
|
|
404
|
+
for (const fieldName of sortedJsonKeys(payload)) {
|
|
405
|
+
let field = payload[fieldName];
|
|
406
|
+
if (field === null || field === undefined) {
|
|
407
|
+
continue;
|
|
408
|
+
}
|
|
409
|
+
// Handle array types by unwrapping the first element. Arrays with
|
|
410
|
+
// multiple types are not supported in EIP-712.
|
|
411
|
+
let isCollection = false;
|
|
412
|
+
if (Array.isArray(field)) {
|
|
413
|
+
if (field.length === 0) {
|
|
414
|
+
// Arbitrarily use string[] for empty arrays, since we cannot access
|
|
415
|
+
// the underlying object.
|
|
416
|
+
typesToAdd.push({ name: fieldName, type: 'string[]' });
|
|
417
|
+
continue;
|
|
418
|
+
}
|
|
419
|
+
[field] = field;
|
|
420
|
+
isCollection = true;
|
|
421
|
+
}
|
|
422
|
+
const ethType = getEthTypeForJson(field);
|
|
423
|
+
if (ethType !== '') {
|
|
424
|
+
typesToAdd.push({ name: fieldName, type: isCollection ? `${ethType}[]` : ethType });
|
|
425
|
+
continue;
|
|
426
|
+
}
|
|
427
|
+
if (typeof field === 'object' && !Array.isArray(field)) {
|
|
428
|
+
const fieldPrefix = `${prefix}.${fieldName}`;
|
|
429
|
+
let fieldTypeDef = recursivelyAddTypesToRoot(typeMap, rootType, fieldPrefix, field);
|
|
430
|
+
fieldTypeDef = sanitizeTypedef(fieldTypeDef);
|
|
431
|
+
if (isCollection) {
|
|
432
|
+
fieldTypeDef += '[]';
|
|
433
|
+
}
|
|
434
|
+
typesToAdd.push({ name: fieldName, type: fieldTypeDef });
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
return addTypesToRoot(typeMap, typeDef, typesToAdd);
|
|
438
|
+
}
|
|
439
|
+
/** Port of types.go msgRootType: e.g. 'cosmos-sdk/MsgSend' -> 'TypeMsgSend'. */
|
|
440
|
+
function msgRootType(msg) {
|
|
441
|
+
const typeTokenized = msg.type.split('/');
|
|
442
|
+
return `${TYPE_PREFIX}${typeTokenized[typeTokenized.length - 1]}`;
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* Port of types.go createEIP712Types: the static skeleton (EIP712Domain, Tx,
|
|
446
|
+
* Fee, Coin) plus recursively generated per-msg types, with each msgN's
|
|
447
|
+
* resolved typedef appended to Tx.
|
|
448
|
+
*/
|
|
449
|
+
function createEip712Types(payload, numMsgs) {
|
|
450
|
+
const types = {
|
|
451
|
+
EIP712Domain: [
|
|
452
|
+
{ name: 'name', type: 'string' },
|
|
453
|
+
{ name: 'version', type: 'string' },
|
|
454
|
+
{ name: 'chainId', type: 'uint256' },
|
|
455
|
+
{ name: 'verifyingContract', type: 'string' },
|
|
456
|
+
{ name: 'salt', type: 'string' },
|
|
457
|
+
],
|
|
458
|
+
Tx: [
|
|
459
|
+
{ name: 'account_number', type: 'string' },
|
|
460
|
+
{ name: 'chain_id', type: 'string' },
|
|
461
|
+
{ name: 'fee', type: 'Fee' },
|
|
462
|
+
{ name: 'memo', type: 'string' },
|
|
463
|
+
{ name: 'sequence', type: 'string' },
|
|
464
|
+
],
|
|
465
|
+
Fee: [
|
|
466
|
+
{ name: 'amount', type: 'Coin[]' },
|
|
467
|
+
{ name: 'gas', type: 'string' },
|
|
468
|
+
],
|
|
469
|
+
Coin: [
|
|
470
|
+
{ name: 'denom', type: 'string' },
|
|
471
|
+
{ name: 'amount', type: 'string' },
|
|
472
|
+
],
|
|
473
|
+
};
|
|
474
|
+
for (let i = 0; i < numMsgs; i++) {
|
|
475
|
+
const field = msgFieldForIndex(i);
|
|
476
|
+
const msg = payload[field];
|
|
477
|
+
const msgTypeDef = recursivelyAddTypesToRoot(types, msgRootType(msg), ROOT_PREFIX, msg);
|
|
478
|
+
types[TX_FIELD].push({ name: field, type: msgTypeDef });
|
|
479
|
+
}
|
|
480
|
+
return types;
|
|
481
|
+
}
|
|
482
|
+
// ---------------------------------------------------------------------------
|
|
483
|
+
// Domain (port of domain.go) and SignDoc decoding (port of encoding.go)
|
|
484
|
+
// ---------------------------------------------------------------------------
|
|
485
|
+
/**
|
|
486
|
+
* Port of domain.go createEIP712Domain. The chainId is rendered the way geth's
|
|
487
|
+
* math.HexOrDecimal256 marshals it (0x-prefixed lowercase hex).
|
|
488
|
+
*/
|
|
489
|
+
export function createEip712Domain(evmChainId) {
|
|
490
|
+
return {
|
|
491
|
+
name: 'Cosmos Web3',
|
|
492
|
+
version: '1.0.0',
|
|
493
|
+
chainId: `0x${evmChainId.toString(16)}`,
|
|
494
|
+
verifyingContract: 'cosmos',
|
|
495
|
+
salt: '0',
|
|
496
|
+
};
|
|
497
|
+
}
|
|
498
|
+
/**
|
|
499
|
+
* Port of encoding.go decodeProtobufSignDoc + message.go FlattenPayloadMessages:
|
|
500
|
+
* decodes a SIGN_MODE_DIRECT SignDoc, renders the equivalent aminojson sign
|
|
501
|
+
* doc payload and flattens the msgs array into msg0/msg1/... fields.
|
|
502
|
+
*
|
|
503
|
+
* Returns the flattened payload (= the typed-data message) and the number of
|
|
504
|
+
* msgs it contains.
|
|
505
|
+
*/
|
|
506
|
+
export function signDocToEip712Message(signDoc) {
|
|
507
|
+
var _a, _b, _c, _d;
|
|
508
|
+
const body = TxBody.decode(signDoc.bodyBytes);
|
|
509
|
+
const authInfo = AuthInfo.decode(signDoc.authInfoBytes);
|
|
510
|
+
// Same restrictions as the chain-side decoder (encoding.go).
|
|
511
|
+
if (body.timeoutHeight.toString() !== '0') {
|
|
512
|
+
throw new Error('EIP-712 signing does not support TxBody.timeoutHeight');
|
|
513
|
+
}
|
|
514
|
+
if (body.extensionOptions.length !== 0 || body.nonCriticalExtensionOptions.length !== 0) {
|
|
515
|
+
throw new Error('EIP-712 signing does not support TxBody extensionOptions or nonCriticalExtensionOptions');
|
|
516
|
+
}
|
|
517
|
+
if (authInfo.signerInfos.length !== 1) {
|
|
518
|
+
throw new Error(`invalid number of signer infos provided, expected 1 got ${authInfo.signerInfos.length}`);
|
|
519
|
+
}
|
|
520
|
+
if (body.messages.length === 0) {
|
|
521
|
+
throw new Error('unable to build EIP-712 payload: transaction does not contain any messages');
|
|
522
|
+
}
|
|
523
|
+
// The aminojson sign doc envelope (x/tx AminoSignDoc): account_number,
|
|
524
|
+
// sequence, chain_id, memo, fee and msgs are amino.dont_omitempty (always
|
|
525
|
+
// rendered); timeout_height is omitted when 0 (and rejected above);
|
|
526
|
+
// fee.payer/granter are dropped by the chain-side conversion.
|
|
527
|
+
const message = {
|
|
528
|
+
account_number: signDoc.accountNumber.toString(),
|
|
529
|
+
chain_id: signDoc.chainId,
|
|
530
|
+
fee: {
|
|
531
|
+
amount: ((_b = (_a = authInfo.fee) === null || _a === void 0 ? void 0 : _a.amount) !== null && _b !== void 0 ? _b : []).map(coinToAmino),
|
|
532
|
+
gas: ((_d = (_c = authInfo.fee) === null || _c === void 0 ? void 0 : _c.gasLimit) !== null && _d !== void 0 ? _d : 0).toString(),
|
|
533
|
+
},
|
|
534
|
+
memo: body.memo,
|
|
535
|
+
sequence: authInfo.signerInfos[0].sequence.toString(),
|
|
536
|
+
};
|
|
537
|
+
// Flattening (message.go): msgs array -> msg0/msg1/... fields, msgs dropped.
|
|
538
|
+
body.messages.forEach((msgAny, i) => {
|
|
539
|
+
message[msgFieldForIndex(i)] = convertAnyToAminoMsg(msgAny);
|
|
540
|
+
});
|
|
541
|
+
return { message, numMsgs: body.messages.length };
|
|
542
|
+
}
|
|
543
|
+
/**
|
|
544
|
+
* Converts a SIGN_MODE_DIRECT SignDoc into the EIP-712 typed data the chain
|
|
545
|
+
* expects a browser wallet to sign (port of cosmos/evm's WrapTxToTypedData
|
|
546
|
+
* over decodeProtobufSignDoc).
|
|
547
|
+
*
|
|
548
|
+
* @param evmChainId The EIP-155 chain id of the chain (e.g. 111984).
|
|
549
|
+
*/
|
|
550
|
+
export function signDocToEip712TypedData(signDoc, evmChainId) {
|
|
551
|
+
const { message, numMsgs } = signDocToEip712Message(signDoc);
|
|
552
|
+
return {
|
|
553
|
+
types: createEip712Types(message, numMsgs),
|
|
554
|
+
primaryType: TX_FIELD,
|
|
555
|
+
domain: createEip712Domain(evmChainId),
|
|
556
|
+
message,
|
|
557
|
+
};
|
|
558
|
+
}
|
|
559
|
+
/** Same as signDocToEip712TypedData, from raw protobuf SignDoc bytes. */
|
|
560
|
+
export function signDocBytesToEip712TypedData(signDocBytes, evmChainId) {
|
|
561
|
+
return signDocToEip712TypedData(SignDoc.decode(signDocBytes), evmChainId);
|
|
562
|
+
}
|
|
563
|
+
// ---------------------------------------------------------------------------
|
|
564
|
+
// Digest
|
|
565
|
+
// ---------------------------------------------------------------------------
|
|
566
|
+
/**
|
|
567
|
+
* The EIP-712 digest the wallet signs:
|
|
568
|
+
* keccak256(0x1901 || hashStruct(EIP712Domain) || hashStruct(Tx)).
|
|
569
|
+
*
|
|
570
|
+
* The domain separator is hashed with the DECLARED domain types (geth's
|
|
571
|
+
* apitypes behavior) — verifyingContract and salt are 'string' fields here,
|
|
572
|
+
* not address/bytes32 — so it cannot go through ethers' built-in
|
|
573
|
+
* TypedDataEncoder.hash(), whose fixed domain schema differs.
|
|
574
|
+
*/
|
|
575
|
+
export function eip712Digest(typedData) {
|
|
576
|
+
const { EIP712Domain: domainTypes, ...messageTypes } = typedData.types;
|
|
577
|
+
const domainHash = TypedDataEncoder.hashStruct('EIP712Domain', { EIP712Domain: domainTypes }, typedData.domain);
|
|
578
|
+
const messageHash = TypedDataEncoder.hashStruct(typedData.primaryType, messageTypes, typedData.message);
|
|
579
|
+
return getBytes(keccak256(concat(['0x1901', domainHash, messageHash])));
|
|
580
|
+
}
|
|
581
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWlwNzEyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudHMvbGliL2VpcDcxMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDakgsT0FBTyxFQUNMLHNCQUFzQixFQUN0Qix5QkFBeUIsR0FDMUIsTUFBTSxzREFBc0QsQ0FBQztBQUM5RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN6RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDOUUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDL0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDbkYsT0FBTyxFQUNMLFNBQVMsSUFBSSxhQUFhLEVBQzFCLFdBQVcsSUFBSSxlQUFlLEdBQy9CLE1BQU0sNkNBQTZDLENBQUM7QUFDckQsT0FBTyxFQUNMLHFCQUFxQixFQUNyQix3QkFBd0IsR0FDekIsTUFBTSw4Q0FBOEMsQ0FBQztBQUV0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDOUQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDekYsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUVwRixPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUU5RSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDdkUsT0FBTyxJQUFJLE1BQU0sTUFBTSxD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
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Pubkey, SinglePubkey } from '@cosmjs/amino';
|
|
2
|
+
import { Any } from 'cosmjs-types/google/protobuf/any';
|
|
3
|
+
/**
|
|
4
|
+
* Pubkey helpers for the eth_secp256k1 key type accepted by the chain
|
|
5
|
+
* (cosmos/evm). The proto wire format of the pubkey is identical to
|
|
6
|
+
* `cosmos.crypto.secp256k1.PubKey` (field 1: 33-byte compressed key) — only
|
|
7
|
+
* the Any typeUrl differs. Signing differs too: SIGN_MODE_DIRECT sign bytes
|
|
8
|
+
* are hashed with keccak256 instead of sha256 (see eth-wallet.ts), and the
|
|
9
|
+
* address is derived ethereum-style (see lib/evm-address.ts).
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* `AccountData.algo` marker reported by the eth offline signer. Typed as plain
|
|
13
|
+
* `string` (not a literal) so it can be compared against and asserted to
|
|
14
|
+
* cosmjs's `Algo` union, which does not include an eth variant.
|
|
15
|
+
*/
|
|
16
|
+
export declare const ETH_SECP256K1_ALGO: string;
|
|
17
|
+
/** Amino-style type discriminator, analogous to 'tendermint/PubKeySecp256k1'. */
|
|
18
|
+
export declare const ETH_SECP256K1_PUBKEY_TYPE = "evm/PubKeyEthSecp256k1";
|
|
19
|
+
/** Any typeUrl of the eth pubkey, as registered by cosmos/evm. */
|
|
20
|
+
export declare const ETH_SECP256K1_PUBKEY_TYPE_URL = "/cosmos.evm.crypto.v1.ethsecp256k1.PubKey";
|
|
21
|
+
export interface EthSecp256k1Pubkey extends SinglePubkey {
|
|
22
|
+
readonly type: typeof ETH_SECP256K1_PUBKEY_TYPE;
|
|
23
|
+
/** Base64-encoded 33-byte compressed secp256k1 public key. */
|
|
24
|
+
readonly value: string;
|
|
25
|
+
}
|
|
26
|
+
export declare function isEthSecp256k1Pubkey(pubkey: Pubkey): pubkey is EthSecp256k1Pubkey;
|
|
27
|
+
/**
|
|
28
|
+
* Wraps a raw compressed secp256k1 public key into the eth pubkey object,
|
|
29
|
+
* analogous to cosmjs's `encodeSecp256k1Pubkey()`.
|
|
30
|
+
*/
|
|
31
|
+
export declare function encodeEthSecp256k1Pubkey(pubkey: Uint8Array): EthSecp256k1Pubkey;
|
|
32
|
+
/**
|
|
33
|
+
* Encodes the eth pubkey into a protobuf `Any`, analogous to cosmjs's
|
|
34
|
+
* `encodePubkey()` (which throws for non-cosmos key types). The value bytes
|
|
35
|
+
* reuse the `cosmos.crypto.secp256k1.PubKey` encoder — the wire format is the
|
|
36
|
+
* same, only the typeUrl differs.
|
|
37
|
+
*/
|
|
38
|
+
export declare function ethSecp256k1PubkeyToAny(pubkey: EthSecp256k1Pubkey): Any;
|
|
39
|
+
/**
|
|
40
|
+
* Decodes the value bytes of an eth pubkey `Any` (the reverse of
|
|
41
|
+
* `ethSecp256k1PubkeyToAny()`).
|
|
42
|
+
*/
|
|
43
|
+
export declare function decodeEthSecp256k1Pubkey(value: Uint8Array): EthSecp256k1Pubkey;
|
|
44
|
+
//# sourceMappingURL=eth-pubkey.d.ts.map
|