@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.
Files changed (155) hide show
  1. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/models.js +19 -3
  2. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/params.js +28 -3
  3. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.js +92 -5
  4. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.rpc.msg.js +7 -1
  5. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/assets/tx.js +19 -3
  6. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/tx.js +1 -1
  7. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/params.js +134 -0
  8. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.js +204 -0
  9. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.rpc.msg.js +57 -0
  10. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/lcd.js +4 -1
  11. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.query.js +3 -2
  12. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.tx.js +4 -2
  13. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/sending/tx.js +1 -1
  14. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/genesis.js +151 -0
  15. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/params.js +134 -0
  16. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.js +248 -0
  17. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.lcd.js +34 -0
  18. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.rpc.Query.js +71 -0
  19. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.js +282 -0
  20. package/build/cjs/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.rpc.msg.js +63 -0
  21. package/build/cjs/src/clients/composite-client.js +7 -3
  22. package/build/cjs/src/clients/constants.js +15 -3
  23. package/build/cjs/src/clients/lib/accounts.js +44 -5
  24. package/build/cjs/src/clients/lib/agent-approval-tx.js +83 -0
  25. package/build/cjs/src/clients/lib/agent-approval.js +119 -0
  26. package/build/cjs/src/clients/lib/eip712.js +592 -0
  27. package/build/cjs/src/clients/lib/eth-pubkey.js +68 -0
  28. package/build/cjs/src/clients/modules/account.js +7 -2
  29. package/build/cjs/src/clients/modules/composer.js +15 -2
  30. package/build/cjs/src/clients/modules/eip712-signer.js +189 -0
  31. package/build/cjs/src/clients/modules/eth-agent-wallet.js +101 -0
  32. package/build/cjs/src/clients/modules/eth-wallet.js +91 -0
  33. package/build/cjs/src/clients/modules/local-wallet.js +9 -2
  34. package/build/cjs/src/clients/modules/post.js +14 -4
  35. package/build/cjs/src/clients/modules/signer.js +7 -2
  36. package/build/cjs/src/index.js +38 -2
  37. package/build/cjs/src/lib/evm-address.js +92 -0
  38. package/build/cjs/src/lib/trading-key-utils.js +41 -3
  39. package/build/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  40. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/models.d.ts +15 -0
  41. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/models.d.ts.map +1 -1
  42. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/models.js +19 -3
  43. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/params.d.ts +24 -1
  44. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/params.d.ts.map +1 -1
  45. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/params.js +28 -3
  46. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.d.ts +43 -1
  47. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.d.ts.map +1 -1
  48. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.js +91 -4
  49. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.rpc.msg.d.ts +4 -1
  50. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.rpc.msg.d.ts.map +1 -1
  51. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/accountplus/tx.rpc.msg.js +8 -2
  52. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/assets/tx.d.ts +9 -0
  53. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/assets/tx.d.ts.map +1 -1
  54. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/assets/tx.js +19 -3
  55. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/tx.d.ts +14 -1
  56. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/tx.d.ts.map +1 -1
  57. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/bridge/tx.js +1 -1
  58. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/params.d.ts +116 -0
  59. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/params.d.ts.map +1 -0
  60. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/params.js +98 -0
  61. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.d.ts +80 -0
  62. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.d.ts.map +1 -0
  63. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.js +168 -0
  64. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.rpc.msg.d.ts +21 -0
  65. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.rpc.msg.d.ts.map +1 -0
  66. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/denomwrap/tx.rpc.msg.js +20 -0
  67. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/lcd.d.ts +1 -0
  68. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/lcd.d.ts.map +1 -1
  69. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/lcd.js +4 -1
  70. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.query.d.ts +4 -0
  71. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.query.d.ts.map +1 -1
  72. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.query.js +3 -2
  73. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.tx.d.ts +2 -0
  74. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.tx.d.ts.map +1 -1
  75. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/rpc.tx.js +4 -2
  76. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/sending/tx.d.ts +0 -1
  77. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/sending/tx.d.ts.map +1 -1
  78. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/sending/tx.js +1 -1
  79. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/genesis.d.ts +79 -0
  80. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/genesis.d.ts.map +1 -0
  81. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/genesis.js +115 -0
  82. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/params.d.ts +116 -0
  83. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/params.d.ts.map +1 -0
  84. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/params.js +98 -0
  85. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.d.ts +82 -0
  86. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.d.ts.map +1 -0
  87. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.js +212 -0
  88. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.lcd.d.ts +11 -0
  89. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.lcd.d.ts.map +1 -0
  90. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.lcd.js +30 -0
  91. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.rpc.Query.d.ts +29 -0
  92. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.rpc.Query.d.ts.map +1 -0
  93. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/query.rpc.Query.js +33 -0
  94. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.d.ts +123 -0
  95. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.d.ts.map +1 -0
  96. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.js +246 -0
  97. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.rpc.msg.d.ts +36 -0
  98. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.rpc.msg.d.ts.map +1 -0
  99. package/build/esm/node_modules/@ritbit/v4-proto/src/codegen/ritbit/wrap/tx.rpc.msg.js +26 -0
  100. package/build/esm/src/clients/composite-client.d.ts +6 -1
  101. package/build/esm/src/clients/composite-client.d.ts.map +1 -1
  102. package/build/esm/src/clients/composite-client.js +7 -3
  103. package/build/esm/src/clients/constants.d.ts +13 -1
  104. package/build/esm/src/clients/constants.d.ts.map +1 -1
  105. package/build/esm/src/clients/constants.js +13 -1
  106. package/build/esm/src/clients/lib/accounts.d.ts +4 -3
  107. package/build/esm/src/clients/lib/accounts.d.ts.map +1 -1
  108. package/build/esm/src/clients/lib/accounts.js +44 -5
  109. package/build/esm/src/clients/lib/agent-approval-tx.d.ts +46 -0
  110. package/build/esm/src/clients/lib/agent-approval-tx.d.ts.map +1 -0
  111. package/build/esm/src/clients/lib/agent-approval-tx.js +79 -0
  112. package/build/esm/src/clients/lib/agent-approval.d.ts +64 -0
  113. package/build/esm/src/clients/lib/agent-approval.d.ts.map +1 -0
  114. package/build/esm/src/clients/lib/agent-approval.js +112 -0
  115. package/build/esm/src/clients/lib/eip712.d.ts +95 -0
  116. package/build/esm/src/clients/lib/eip712.d.ts.map +1 -0
  117. package/build/esm/src/clients/lib/eip712.js +581 -0
  118. package/build/esm/src/clients/lib/eth-pubkey.d.ts +44 -0
  119. package/build/esm/src/clients/lib/eth-pubkey.d.ts.map +1 -0
  120. package/build/esm/src/clients/lib/eth-pubkey.js +61 -0
  121. package/build/esm/src/clients/modules/account.d.ts +5 -1
  122. package/build/esm/src/clients/modules/account.d.ts.map +1 -1
  123. package/build/esm/src/clients/modules/account.js +7 -2
  124. package/build/esm/src/clients/modules/composer.d.ts +12 -1
  125. package/build/esm/src/clients/modules/composer.d.ts.map +1 -1
  126. package/build/esm/src/clients/modules/composer.js +15 -2
  127. package/build/esm/src/clients/modules/eip712-signer.d.ts +99 -0
  128. package/build/esm/src/clients/modules/eip712-signer.d.ts.map +1 -0
  129. package/build/esm/src/clients/modules/eip712-signer.js +183 -0
  130. package/build/esm/src/clients/modules/eth-agent-wallet.d.ts +39 -0
  131. package/build/esm/src/clients/modules/eth-agent-wallet.d.ts.map +1 -0
  132. package/build/esm/src/clients/modules/eth-agent-wallet.js +97 -0
  133. package/build/esm/src/clients/modules/eth-wallet.d.ts +32 -0
  134. package/build/esm/src/clients/modules/eth-wallet.d.ts.map +1 -0
  135. package/build/esm/src/clients/modules/eth-wallet.js +83 -0
  136. package/build/esm/src/clients/modules/local-wallet.d.ts +2 -1
  137. package/build/esm/src/clients/modules/local-wallet.d.ts.map +1 -1
  138. package/build/esm/src/clients/modules/local-wallet.js +9 -2
  139. package/build/esm/src/clients/modules/post.d.ts +1 -1
  140. package/build/esm/src/clients/modules/post.d.ts.map +1 -1
  141. package/build/esm/src/clients/modules/post.js +14 -4
  142. package/build/esm/src/clients/modules/signer.d.ts +2 -1
  143. package/build/esm/src/clients/modules/signer.d.ts.map +1 -1
  144. package/build/esm/src/clients/modules/signer.js +7 -2
  145. package/build/esm/src/index.d.ts +13 -0
  146. package/build/esm/src/index.d.ts.map +1 -1
  147. package/build/esm/src/index.js +9 -1
  148. package/build/esm/src/lib/evm-address.d.ts +31 -0
  149. package/build/esm/src/lib/evm-address.d.ts.map +1 -0
  150. package/build/esm/src/lib/evm-address.js +85 -0
  151. package/build/esm/src/lib/trading-key-utils.d.ts +3 -0
  152. package/build/esm/src/lib/trading-key-utils.d.ts.map +1 -1
  153. package/build/esm/src/lib/trading-key-utils.js +42 -4
  154. package/build/esm/tsconfig.esm.tsbuildinfo +1 -1
  155. 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