@ritbit/v4-client-js 2.4.0 → 2.4.2

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 (296) hide show
  1. package/build/cjs/src/clients/composite-client.js +10 -9
  2. package/build/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  3. package/build/esm/src/clients/composite-client.d.ts +3 -3
  4. package/build/esm/src/clients/composite-client.d.ts.map +1 -1
  5. package/build/esm/src/clients/composite-client.js +10 -9
  6. package/build/esm/tsconfig.esm.tsbuildinfo +1 -1
  7. package/package.json +11 -3
  8. package/.env +0 -1
  9. package/.eslintignore +0 -2
  10. package/.eslintrc.js +0 -15
  11. package/.gitleaks.toml +0 -24
  12. package/.gitleaksignore +0 -1
  13. package/.nvmrc +0 -1
  14. package/.prettierignore +0 -3
  15. package/.prettierrc.json +0 -6
  16. package/.releaserc +0 -10
  17. package/.vscode/launch.json +0 -11
  18. package/__native__/__ios__/v4-native-client.js +0 -251395
  19. package/__native__/__ios__/v4-native-client.js.map +0 -1
  20. package/__tests__/clients/composite-client.test.ts +0 -140
  21. package/__tests__/helpers/baseClients.ts +0 -23
  22. package/__tests__/helpers/constants.ts +0 -131
  23. package/__tests__/lib/helpers.test.ts +0 -55
  24. package/__tests__/lib/util.test.ts +0 -77
  25. package/__tests__/lib/validation.test.ts +0 -289
  26. package/__tests__/modules/client/AccountEndpoints.test.ts +0 -236
  27. package/__tests__/modules/client/FaucetEndpoint.test.ts +0 -14
  28. package/__tests__/modules/client/MarketsEndpoints.test.ts +0 -84
  29. package/__tests__/modules/client/Transfers.test.ts +0 -44
  30. package/__tests__/modules/client/UtilityEndpoints.test.ts +0 -29
  31. package/__tests__/modules/client/ValidatorGetEndpoints.test.ts +0 -50
  32. package/__tests__/modules/client/ValidatorPostEndpoints.test.ts +0 -52
  33. package/__tests__/modules/client/constants.ts +0 -5
  34. package/__tests__/modules/onboarding.test.ts +0 -66
  35. package/build/cjs/__tests__/clients/composite-client.test.js +0 -130
  36. package/build/cjs/__tests__/helpers/baseClients.js +0 -29
  37. package/build/cjs/__tests__/helpers/constants.js +0 -110
  38. package/build/cjs/__tests__/lib/helpers.test.js +0 -46
  39. package/build/cjs/__tests__/lib/util.test.js +0 -67
  40. package/build/cjs/__tests__/lib/validation.test.js +0 -254
  41. package/build/cjs/__tests__/modules/client/AccountEndpoints.test.js +0 -171
  42. package/build/cjs/__tests__/modules/client/FaucetEndpoint.test.js +0 -15
  43. package/build/cjs/__tests__/modules/client/MarketsEndpoints.test.js +0 -69
  44. package/build/cjs/__tests__/modules/client/Transfers.test.js +0 -44
  45. package/build/cjs/__tests__/modules/client/UtilityEndpoints.test.js +0 -28
  46. package/build/cjs/__tests__/modules/client/ValidatorGetEndpoints.test.js +0 -46
  47. package/build/cjs/__tests__/modules/client/ValidatorPostEndpoints.test.js +0 -53
  48. package/build/cjs/__tests__/modules/client/constants.js +0 -7
  49. package/build/cjs/__tests__/modules/onboarding.test.js +0 -50
  50. package/build/cjs/examples/account_endpoints.js +0 -129
  51. package/build/cjs/examples/batch_cancel_orders_example.js +0 -93
  52. package/build/cjs/examples/composite_example.js +0 -50
  53. package/build/cjs/examples/constants.js +0 -35
  54. package/build/cjs/examples/faucet_endpoint.js +0 -23
  55. package/build/cjs/examples/gov_add_new_market.js +0 -77
  56. package/build/cjs/examples/human_readable_orders.json +0 -86
  57. package/build/cjs/examples/human_readable_short_term_orders.json +0 -42
  58. package/build/cjs/examples/json-encoding.js +0 -32
  59. package/build/cjs/examples/long_term_order_cancel_example.js +0 -63
  60. package/build/cjs/examples/markets_endpoints.js +0 -134
  61. package/build/cjs/examples/native_examples.js +0 -112
  62. package/build/cjs/examples/noble_example.js +0 -88
  63. package/build/cjs/examples/optimal_node.js +0 -70
  64. package/build/cjs/examples/permissioned_keys_example.js +0 -104
  65. package/build/cjs/examples/raw_orders.json +0 -130
  66. package/build/cjs/examples/short_term_order_cancel_example.js +0 -54
  67. package/build/cjs/examples/short_term_order_composite_example.js +0 -68
  68. package/build/cjs/examples/test.js +0 -50
  69. package/build/cjs/examples/transfer_example_deposit.js +0 -29
  70. package/build/cjs/examples/transfer_example_send.js +0 -42
  71. package/build/cjs/examples/transfer_example_subaccount_transfer.js +0 -29
  72. package/build/cjs/examples/transfer_example_withdraw.js +0 -30
  73. package/build/cjs/examples/transfer_example_withdraw_other.js +0 -42
  74. package/build/cjs/examples/utility_endpoints.js +0 -42
  75. package/build/cjs/examples/validator_get_example.js +0 -158
  76. package/build/cjs/examples/validator_post_example.js +0 -76
  77. package/build/cjs/examples/wallet_address.js +0 -22
  78. package/build/cjs/examples/websocket_example.js +0 -36
  79. package/build/cjs/examples/websocket_orderbook_example.js +0 -196
  80. package/build/esm/__tests__/clients/composite-client.test.d.ts +0 -2
  81. package/build/esm/__tests__/clients/composite-client.test.d.ts.map +0 -1
  82. package/build/esm/__tests__/clients/composite-client.test.js +0 -128
  83. package/build/esm/__tests__/helpers/baseClients.d.ts +0 -19
  84. package/build/esm/__tests__/helpers/baseClients.d.ts.map +0 -1
  85. package/build/esm/__tests__/helpers/baseClients.js +0 -22
  86. package/build/esm/__tests__/helpers/constants.d.ts +0 -19
  87. package/build/esm/__tests__/helpers/constants.d.ts.map +0 -1
  88. package/build/esm/__tests__/helpers/constants.js +0 -104
  89. package/build/esm/__tests__/lib/helpers.test.d.ts +0 -2
  90. package/build/esm/__tests__/lib/helpers.test.d.ts.map +0 -1
  91. package/build/esm/__tests__/lib/helpers.test.js +0 -41
  92. package/build/esm/__tests__/lib/util.test.d.ts +0 -2
  93. package/build/esm/__tests__/lib/util.test.d.ts.map +0 -1
  94. package/build/esm/__tests__/lib/util.test.js +0 -65
  95. package/build/esm/__tests__/lib/validation.test.d.ts +0 -2
  96. package/build/esm/__tests__/lib/validation.test.d.ts.map +0 -1
  97. package/build/esm/__tests__/lib/validation.test.js +0 -249
  98. package/build/esm/__tests__/modules/client/AccountEndpoints.test.d.ts +0 -2
  99. package/build/esm/__tests__/modules/client/AccountEndpoints.test.d.ts.map +0 -1
  100. package/build/esm/__tests__/modules/client/AccountEndpoints.test.js +0 -169
  101. package/build/esm/__tests__/modules/client/FaucetEndpoint.test.d.ts +0 -2
  102. package/build/esm/__tests__/modules/client/FaucetEndpoint.test.d.ts.map +0 -1
  103. package/build/esm/__tests__/modules/client/FaucetEndpoint.test.js +0 -13
  104. package/build/esm/__tests__/modules/client/MarketsEndpoints.test.d.ts +0 -2
  105. package/build/esm/__tests__/modules/client/MarketsEndpoints.test.d.ts.map +0 -1
  106. package/build/esm/__tests__/modules/client/MarketsEndpoints.test.js +0 -66
  107. package/build/esm/__tests__/modules/client/Transfers.test.d.ts +0 -2
  108. package/build/esm/__tests__/modules/client/Transfers.test.d.ts.map +0 -1
  109. package/build/esm/__tests__/modules/client/Transfers.test.js +0 -39
  110. package/build/esm/__tests__/modules/client/UtilityEndpoints.test.d.ts +0 -2
  111. package/build/esm/__tests__/modules/client/UtilityEndpoints.test.d.ts.map +0 -1
  112. package/build/esm/__tests__/modules/client/UtilityEndpoints.test.js +0 -26
  113. package/build/esm/__tests__/modules/client/ValidatorGetEndpoints.test.d.ts +0 -2
  114. package/build/esm/__tests__/modules/client/ValidatorGetEndpoints.test.d.ts.map +0 -1
  115. package/build/esm/__tests__/modules/client/ValidatorGetEndpoints.test.js +0 -44
  116. package/build/esm/__tests__/modules/client/ValidatorPostEndpoints.test.d.ts +0 -2
  117. package/build/esm/__tests__/modules/client/ValidatorPostEndpoints.test.d.ts.map +0 -1
  118. package/build/esm/__tests__/modules/client/ValidatorPostEndpoints.test.js +0 -48
  119. package/build/esm/__tests__/modules/client/constants.d.ts +0 -4
  120. package/build/esm/__tests__/modules/client/constants.d.ts.map +0 -1
  121. package/build/esm/__tests__/modules/client/constants.js +0 -4
  122. package/build/esm/__tests__/modules/onboarding.test.d.ts +0 -2
  123. package/build/esm/__tests__/modules/onboarding.test.d.ts.map +0 -1
  124. package/build/esm/__tests__/modules/onboarding.test.js +0 -48
  125. package/build/esm/examples/account_endpoints.d.ts +0 -5
  126. package/build/esm/examples/account_endpoints.d.ts.map +0 -1
  127. package/build/esm/examples/account_endpoints.js +0 -127
  128. package/build/esm/examples/batch_cancel_orders_example.d.ts +0 -2
  129. package/build/esm/examples/batch_cancel_orders_example.d.ts.map +0 -1
  130. package/build/esm/examples/batch_cancel_orders_example.js +0 -88
  131. package/build/esm/examples/composite_example.d.ts +0 -2
  132. package/build/esm/examples/composite_example.d.ts.map +0 -1
  133. package/build/esm/examples/composite_example.js +0 -45
  134. package/build/esm/examples/constants.d.ts +0 -13
  135. package/build/esm/examples/constants.d.ts.map +0 -1
  136. package/build/esm/examples/constants.js +0 -29
  137. package/build/esm/examples/faucet_endpoint.d.ts +0 -5
  138. package/build/esm/examples/faucet_endpoint.d.ts.map +0 -1
  139. package/build/esm/examples/faucet_endpoint.js +0 -21
  140. package/build/esm/examples/gov_add_new_market.d.ts +0 -2
  141. package/build/esm/examples/gov_add_new_market.d.ts.map +0 -1
  142. package/build/esm/examples/gov_add_new_market.js +0 -72
  143. package/build/esm/examples/human_readable_orders.json +0 -86
  144. package/build/esm/examples/human_readable_short_term_orders.json +0 -42
  145. package/build/esm/examples/json-encoding.d.ts +0 -2
  146. package/build/esm/examples/json-encoding.d.ts.map +0 -1
  147. package/build/esm/examples/json-encoding.js +0 -27
  148. package/build/esm/examples/long_term_order_cancel_example.d.ts +0 -2
  149. package/build/esm/examples/long_term_order_cancel_example.d.ts.map +0 -1
  150. package/build/esm/examples/long_term_order_cancel_example.js +0 -58
  151. package/build/esm/examples/markets_endpoints.d.ts +0 -5
  152. package/build/esm/examples/markets_endpoints.d.ts.map +0 -1
  153. package/build/esm/examples/markets_endpoints.js +0 -131
  154. package/build/esm/examples/native_examples.d.ts +0 -2
  155. package/build/esm/examples/native_examples.d.ts.map +0 -1
  156. package/build/esm/examples/native_examples.js +0 -110
  157. package/build/esm/examples/noble_example.d.ts +0 -2
  158. package/build/esm/examples/noble_example.d.ts.map +0 -1
  159. package/build/esm/examples/noble_example.js +0 -83
  160. package/build/esm/examples/optimal_node.d.ts +0 -2
  161. package/build/esm/examples/optimal_node.d.ts.map +0 -1
  162. package/build/esm/examples/optimal_node.js +0 -68
  163. package/build/esm/examples/permissioned_keys_example.d.ts +0 -2
  164. package/build/esm/examples/permissioned_keys_example.d.ts.map +0 -1
  165. package/build/esm/examples/permissioned_keys_example.js +0 -99
  166. package/build/esm/examples/raw_orders.json +0 -130
  167. package/build/esm/examples/short_term_order_cancel_example.d.ts +0 -2
  168. package/build/esm/examples/short_term_order_cancel_example.d.ts.map +0 -1
  169. package/build/esm/examples/short_term_order_cancel_example.js +0 -49
  170. package/build/esm/examples/short_term_order_composite_example.d.ts +0 -2
  171. package/build/esm/examples/short_term_order_composite_example.d.ts.map +0 -1
  172. package/build/esm/examples/short_term_order_composite_example.js +0 -63
  173. package/build/esm/examples/test.d.ts +0 -2
  174. package/build/esm/examples/test.d.ts.map +0 -1
  175. package/build/esm/examples/test.js +0 -45
  176. package/build/esm/examples/transfer_example_deposit.d.ts +0 -2
  177. package/build/esm/examples/transfer_example_deposit.d.ts.map +0 -1
  178. package/build/esm/examples/transfer_example_deposit.js +0 -24
  179. package/build/esm/examples/transfer_example_send.d.ts +0 -2
  180. package/build/esm/examples/transfer_example_send.d.ts.map +0 -1
  181. package/build/esm/examples/transfer_example_send.js +0 -37
  182. package/build/esm/examples/transfer_example_subaccount_transfer.d.ts +0 -2
  183. package/build/esm/examples/transfer_example_subaccount_transfer.d.ts.map +0 -1
  184. package/build/esm/examples/transfer_example_subaccount_transfer.js +0 -24
  185. package/build/esm/examples/transfer_example_withdraw.d.ts +0 -2
  186. package/build/esm/examples/transfer_example_withdraw.d.ts.map +0 -1
  187. package/build/esm/examples/transfer_example_withdraw.js +0 -25
  188. package/build/esm/examples/transfer_example_withdraw_other.d.ts +0 -2
  189. package/build/esm/examples/transfer_example_withdraw_other.d.ts.map +0 -1
  190. package/build/esm/examples/transfer_example_withdraw_other.js +0 -37
  191. package/build/esm/examples/utility_endpoints.d.ts +0 -5
  192. package/build/esm/examples/utility_endpoints.d.ts.map +0 -1
  193. package/build/esm/examples/utility_endpoints.js +0 -40
  194. package/build/esm/examples/validator_get_example.d.ts +0 -2
  195. package/build/esm/examples/validator_get_example.d.ts.map +0 -1
  196. package/build/esm/examples/validator_get_example.js +0 -156
  197. package/build/esm/examples/validator_post_example.d.ts +0 -2
  198. package/build/esm/examples/validator_post_example.d.ts.map +0 -1
  199. package/build/esm/examples/validator_post_example.js +0 -71
  200. package/build/esm/examples/wallet_address.d.ts +0 -2
  201. package/build/esm/examples/wallet_address.d.ts.map +0 -1
  202. package/build/esm/examples/wallet_address.js +0 -17
  203. package/build/esm/examples/websocket_example.d.ts +0 -2
  204. package/build/esm/examples/websocket_example.d.ts.map +0 -1
  205. package/build/esm/examples/websocket_example.js +0 -34
  206. package/build/esm/examples/websocket_orderbook_example.d.ts +0 -2
  207. package/build/esm/examples/websocket_orderbook_example.d.ts.map +0 -1
  208. package/build/esm/examples/websocket_orderbook_example.js +0 -194
  209. package/commitlint.config.js +0 -8
  210. package/examples/account_endpoints.ts +0 -129
  211. package/examples/batch_cancel_orders_example.ts +0 -130
  212. package/examples/composite_example.ts +0 -65
  213. package/examples/constants.ts +0 -42
  214. package/examples/faucet_endpoint.ts +0 -24
  215. package/examples/gov_add_new_market.json +0 -64
  216. package/examples/gov_add_new_market.ts +0 -95
  217. package/examples/human_readable_orders.json +0 -86
  218. package/examples/human_readable_short_term_orders.json +0 -42
  219. package/examples/json-encoding.ts +0 -33
  220. package/examples/long_term_order_cancel_example.ts +0 -87
  221. package/examples/markets_endpoints.ts +0 -134
  222. package/examples/native_examples.ts +0 -151
  223. package/examples/noble_example.ts +0 -107
  224. package/examples/optimal_node.ts +0 -70
  225. package/examples/permissioned_keys_example.ts +0 -162
  226. package/examples/raw_orders.json +0 -130
  227. package/examples/short_term_order_cancel_example.ts +0 -68
  228. package/examples/short_term_order_composite_example.ts +0 -80
  229. package/examples/test.ts +0 -65
  230. package/examples/transfer_example_deposit.ts +0 -28
  231. package/examples/transfer_example_send.ts +0 -60
  232. package/examples/transfer_example_subaccount_transfer.ts +0 -29
  233. package/examples/transfer_example_withdraw.ts +0 -31
  234. package/examples/transfer_example_withdraw_other.ts +0 -60
  235. package/examples/utility_endpoints.ts +0 -42
  236. package/examples/validator_get_example.ts +0 -160
  237. package/examples/validator_post_example.ts +0 -81
  238. package/examples/wallet_address.ts +0 -18
  239. package/examples/websocket_example.ts +0 -44
  240. package/examples/websocket_orderbook_example.ts +0 -239
  241. package/jest.config.js +0 -12
  242. package/jest.globalSetup.js +0 -5
  243. package/jest.setup.js +0 -1
  244. package/ritbit-v4-client-js-2.2.6.tgz +0 -0
  245. package/scripts/bump_version.sh +0 -16
  246. package/scripts/generate-cctp-protos.sh +0 -41
  247. package/scripts/mobile_build_pack.sh +0 -5
  248. package/scripts/publish-if-not-exists.sh +0 -21
  249. package/src/clients/composite-client.ts +0 -1469
  250. package/src/clients/constants.ts +0 -361
  251. package/src/clients/faucet-client.ts +0 -48
  252. package/src/clients/helpers/chain-helpers.ts +0 -231
  253. package/src/clients/helpers/request-helpers.ts +0 -71
  254. package/src/clients/indexer-client.ts +0 -61
  255. package/src/clients/lib/axios/axiosRequest.ts +0 -41
  256. package/src/clients/lib/axios/errors.ts +0 -41
  257. package/src/clients/lib/axios/index.ts +0 -7
  258. package/src/clients/lib/axios/types.ts +0 -6
  259. package/src/clients/lib/cctpProto.ts +0 -4197
  260. package/src/clients/lib/errors.ts +0 -63
  261. package/src/clients/lib/registry.ts +0 -93
  262. package/src/clients/modules/account.ts +0 -438
  263. package/src/clients/modules/composer.ts +0 -669
  264. package/src/clients/modules/get.ts +0 -791
  265. package/src/clients/modules/local-wallet.ts +0 -79
  266. package/src/clients/modules/markets.ts +0 -76
  267. package/src/clients/modules/post.ts +0 -1043
  268. package/src/clients/modules/proto-includes.ts +0 -34
  269. package/src/clients/modules/rest.ts +0 -40
  270. package/src/clients/modules/signer.ts +0 -139
  271. package/src/clients/modules/tendermintClient.ts +0 -168
  272. package/src/clients/modules/utility.ts +0 -47
  273. package/src/clients/modules/vault.ts +0 -23
  274. package/src/clients/native.ts +0 -1689
  275. package/src/clients/noble-client.ts +0 -108
  276. package/src/clients/socket-client.ts +0 -331
  277. package/src/clients/subaccount.ts +0 -57
  278. package/src/clients/types.ts +0 -191
  279. package/src/clients/validator-client.ts +0 -106
  280. package/src/index.ts +0 -19
  281. package/src/lib/constants.ts +0 -28
  282. package/src/lib/errors.ts +0 -38
  283. package/src/lib/helpers.ts +0 -99
  284. package/src/lib/onboarding.ts +0 -96
  285. package/src/lib/trading-key-utils.ts +0 -136
  286. package/src/lib/utils.ts +0 -84
  287. package/src/lib/validation.ts +0 -197
  288. package/src/network_optimizer.ts +0 -132
  289. package/src/types.ts +0 -44
  290. package/tasks.json +0 -16
  291. package/tsconfig.base.json +0 -21
  292. package/tsconfig.cjs.json +0 -10
  293. package/tsconfig.eslint.json +0 -14
  294. package/tsconfig.esm.json +0 -11
  295. package/tsconfig.json +0 -6
  296. package/webpack.config.js +0 -56
@@ -1,1043 +0,0 @@
1
- import { Coin, Secp256k1Pubkey } from '@cosmjs/amino';
2
- import { Uint53 } from '@cosmjs/math';
3
- import { EncodeObject, Registry } from '@cosmjs/proto-signing';
4
- import { Account, calculateFee, GasPrice, IndexedTx, StdFee } from '@cosmjs/stargate';
5
- import { Method, tendermint37 } from '@cosmjs/tendermint-rpc';
6
- import Long from 'long';
7
- import protobuf from 'protobufjs';
8
-
9
- type BroadcastTxAsyncResponse = tendermint37.BroadcastTxAsyncResponse;
10
- type BroadcastTxSyncResponse = tendermint37.BroadcastTxSyncResponse;
11
-
12
- import { AuthenticatorType, GAS_MULTIPLIER, SelectedGasDenom } from '../constants';
13
- import { UnexpectedClientError } from '../lib/errors';
14
- import { generateRegistry } from '../lib/registry';
15
- import { SubaccountInfo } from '../subaccount';
16
- import {
17
- OrderFlags,
18
- BroadcastMode,
19
- TransactionOptions,
20
- IPlaceOrder,
21
- ICancelOrder,
22
- DenomConfig,
23
- ITwapParameters,
24
- IBuilderCodeParameters,
25
- } from '../types';
26
- import { Composer } from './composer';
27
- import { Get } from './get';
28
- import {
29
- Order_Side,
30
- Order_TimeInForce,
31
- Any,
32
- MsgPlaceOrder,
33
- MsgCancelOrder,
34
- Order_ConditionType,
35
- OrderBatch,
36
- } from './proto-includes';
37
-
38
- // Required for encoding and decoding queries that are of type Long.
39
- // Must be done once but since the individal modules should be usable
40
- // - must be set in each module that encounters encoding/decoding Longs.
41
- // Reference: https://github.com/protobufjs/protobuf.js/issues/921
42
- protobuf.util.Long = Long;
43
- protobuf.configure();
44
-
45
- export class Post {
46
- public readonly composer: Composer;
47
- private readonly registry: Registry;
48
- private readonly chainId: string;
49
- public readonly get: Get;
50
- public readonly denoms: DenomConfig;
51
- public readonly defaultClientMemo?: string;
52
-
53
- public selectedGasDenom: SelectedGasDenom = SelectedGasDenom.USDC;
54
- public readonly defaultGasPrice: GasPrice;
55
- public readonly defaultChainGasPrice: GasPrice;
56
-
57
- public useTimestampNonce: boolean = false;
58
- public timestampNonceOffsetMs: number = 0;
59
- private accountNumberCache: Map<string, Account> = new Map();
60
-
61
- constructor(
62
- get: Get,
63
- chainId: string,
64
- denoms: DenomConfig,
65
- defaultClientMemo?: string,
66
- useTimestampNonce?: boolean,
67
- timestampNonceOffsetMs?: number,
68
- ) {
69
- this.get = get;
70
- this.chainId = chainId;
71
- this.registry = generateRegistry();
72
- this.composer = new Composer();
73
- this.denoms = denoms;
74
- this.defaultClientMemo = defaultClientMemo;
75
- this.defaultGasPrice = GasPrice.fromString(
76
- `0.025${denoms.USDC_GAS_DENOM !== undefined ? denoms.USDC_GAS_DENOM : denoms.USDC_DENOM}`,
77
- );
78
- this.defaultChainGasPrice = GasPrice.fromString(
79
- `25000000000${
80
- denoms.CHAINTOKEN_GAS_DENOM !== undefined
81
- ? denoms.CHAINTOKEN_GAS_DENOM
82
- : denoms.CHAINTOKEN_DENOM
83
- }`,
84
- );
85
- if (useTimestampNonce === true) {
86
- this.useTimestampNonce = useTimestampNonce;
87
- this.timestampNonceOffsetMs = timestampNonceOffsetMs ?? this.timestampNonceOffsetMs;
88
- }
89
- }
90
-
91
- /**
92
- * @description Retrieves the account number for the given wallet address and populates the accountNumberCache.
93
- * The account number is required for txOptions when signing a transaction.
94
- * Pre-populating the cache avoids a round-trip request during the first transaction creation in the session, preventing it from being a performance blocker.
95
- * @returns { typeUrl } при первом вызове; undefined при cache hit (данные уже в кеше).
96
- */
97
- public async populateAccountNumberCache(
98
- address: string
99
- ): Promise<{ typeUrl: string } | undefined> {
100
- if (this.accountNumberCache.has(address)) return undefined;
101
-
102
- const result = await this.get.getAccount(address);
103
- const { typeUrl, ...account } = result;
104
- this.accountNumberCache.set(address, account);
105
- return typeUrl != null ? { typeUrl } : undefined;
106
- }
107
-
108
- setSelectedGasDenom(selectedGasDenom: SelectedGasDenom): void {
109
- this.selectedGasDenom = selectedGasDenom;
110
- }
111
-
112
- getGasPrice(): GasPrice {
113
- return this.selectedGasDenom === SelectedGasDenom.USDC
114
- ? this.defaultGasPrice
115
- : this.defaultChainGasPrice;
116
- }
117
-
118
- /**
119
- * @description Simulate a transaction
120
- * the calling function is responsible for creating the messages.
121
- *
122
- * @throws UnexpectedClientError if a malformed response is returned with no GRPC error
123
- * at any point.
124
- * @returns The Fee for broadcasting a transaction.
125
- */
126
- async simulate(
127
- subaccount: SubaccountInfo,
128
- messaging: () => Promise<EncodeObject[]>,
129
- gasPrice: GasPrice = this.getGasPrice(),
130
- memo?: string,
131
- account?: () => Promise<Account>,
132
- ): Promise<StdFee> {
133
- let msgs: EncodeObject[];
134
- // protocol expects timestamp nonce in UTC milliseconds, which is the unit returned by Date.now()
135
- let sequence = Date.now() + this.timestampNonceOffsetMs;
136
-
137
- if (this.useTimestampNonce) {
138
- msgs = await messaging();
139
- } else {
140
- const msgsPromise = messaging();
141
- const accountPromise = account ? await account() : this.account(subaccount.address);
142
- const msgsAndAccount = await Promise.all([msgsPromise, accountPromise]);
143
- msgs = msgsAndAccount[0];
144
- sequence = msgsAndAccount[1].sequence;
145
- }
146
-
147
- return this.simulateTransaction(
148
- subaccount.signingWallet.pubKey!,
149
- sequence,
150
- msgs,
151
- gasPrice,
152
- memo,
153
- );
154
- }
155
-
156
- /**
157
- * @description Sign a transaction
158
- * the calling function is responsible for creating the messages.
159
- *
160
- * @throws UnexpectedClientError if a malformed response is returned with no GRPC error
161
- * at any point.
162
- * @returns The Signature.
163
- */
164
- async sign(
165
- subaccount: SubaccountInfo,
166
- messaging: () => Promise<EncodeObject[]>,
167
- zeroFee: boolean,
168
- gasPrice: GasPrice = this.getGasPrice(),
169
- memo?: string,
170
- account?: () => Promise<Account>,
171
- ): Promise<Uint8Array> {
172
- const msgsPromise = await messaging();
173
- const accountPromise = account ? await account() : this.account(subaccount.address);
174
- const msgsAndAccount = await Promise.all([msgsPromise, accountPromise]);
175
- const msgs = msgsAndAccount[0];
176
- return this.signTransaction(subaccount, msgs, msgsAndAccount[1], zeroFee, gasPrice, memo);
177
- }
178
-
179
- /**
180
- * @description Send a transaction
181
- * the calling function is responsible for creating the messages.
182
- *
183
- * @throws UnexpectedClientError if a malformed response is returned with no GRPC error
184
- * at any point.
185
- * @returns The Tx Hash.
186
- */
187
- async send(
188
- subaccount: SubaccountInfo,
189
- messaging: () => Promise<EncodeObject[]>,
190
- zeroFee: boolean,
191
- gasPrice: GasPrice = this.getGasPrice(),
192
- memo?: string,
193
- broadcastMode?: BroadcastMode,
194
- account?: () => Promise<Account>,
195
- gasAdjustment: number = GAS_MULTIPLIER,
196
- additionalFeeCoins?: Coin[],
197
- ): Promise<BroadcastTxAsyncResponse | BroadcastTxSyncResponse | IndexedTx> {
198
- const msgsPromise = messaging();
199
- const accountPromise = account ? await account() : this.account(subaccount.address);
200
- const msgsAndAccount = await Promise.all([msgsPromise, accountPromise]);
201
- const msgs = msgsAndAccount[0];
202
-
203
- return this.signAndSendTransaction(
204
- subaccount,
205
- msgsAndAccount[1],
206
- msgs,
207
- zeroFee,
208
- gasPrice,
209
- memo ?? this.defaultClientMemo,
210
- broadcastMode ?? this.defaultBroadcastMode(msgs),
211
- gasAdjustment,
212
- additionalFeeCoins,
213
- );
214
- }
215
-
216
- /**
217
- * @description Calculate the default broadcast mode.
218
- */
219
- private defaultBroadcastMode(msgs: EncodeObject[]): BroadcastMode {
220
- if (
221
- msgs.length === 1 &&
222
- (msgs[0].typeUrl === '/ritbit.clob.MsgPlaceOrder' ||
223
- msgs[0].typeUrl === '/ritbit.clob.MsgCancelOrder')
224
- ) {
225
- const orderFlags =
226
- msgs[0].typeUrl === '/ritbit.clob.MsgPlaceOrder'
227
- ? (msgs[0].value as MsgPlaceOrder).order?.orderId?.orderFlags
228
- : (msgs[0].value as MsgCancelOrder).orderId?.orderFlags;
229
-
230
- switch (orderFlags) {
231
- case OrderFlags.SHORT_TERM:
232
- return Method.BroadcastTxSync;
233
-
234
- case OrderFlags.LONG_TERM:
235
- case OrderFlags.CONDITIONAL:
236
- return Method.BroadcastTxCommit;
237
-
238
- default:
239
- break;
240
- }
241
- }
242
- return Method.BroadcastTxSync;
243
- }
244
-
245
- /**
246
- * @description Sign and send a message
247
- *
248
- * @returns The Tx Response.
249
- */
250
- private async signTransaction(
251
- subaccount: SubaccountInfo,
252
- messages: EncodeObject[],
253
- account: Account,
254
- zeroFee: boolean,
255
- gasPrice: GasPrice = this.getGasPrice(),
256
- memo?: string,
257
- gasAdjustment: number = GAS_MULTIPLIER,
258
- additionalFeeCoins?: Coin[],
259
- ): Promise<Uint8Array> {
260
- // protocol expects timestamp nonce in UTC milliseconds, which is the unit returned by Date.now()
261
- const sequence = this.useTimestampNonce
262
- ? Date.now() + this.timestampNonceOffsetMs
263
- : account.sequence;
264
- // Simulate transaction if no fee is specified.
265
- let fee: StdFee = zeroFee
266
- ? {
267
- amount: [],
268
- gas: '1000000',
269
- }
270
- : await this.simulateTransaction(
271
- subaccount.signingWallet.pubKey!,
272
- sequence,
273
- messages,
274
- gasPrice,
275
- memo,
276
- gasAdjustment,
277
- );
278
-
279
- if (additionalFeeCoins && additionalFeeCoins.length > 0) {
280
- const byDenom = new Map<string, string>();
281
- for (const c of fee.amount) {
282
- const cur = byDenom.get(c.denom) ?? '0';
283
- byDenom.set(c.denom, (BigInt(cur) + BigInt(c.amount)).toString());
284
- }
285
- for (const c of additionalFeeCoins) {
286
- const cur = byDenom.get(c.denom) ?? '0';
287
- byDenom.set(c.denom, (BigInt(cur) + BigInt(c.amount)).toString());
288
- }
289
- fee = {
290
- ...fee,
291
- amount: Array.from(byDenom.entries()).map(([denom, amount]) => ({ denom, amount })),
292
- };
293
- }
294
-
295
- const txOptions: TransactionOptions = {
296
- sequence,
297
- accountNumber: account.accountNumber,
298
- chainId: this.chainId,
299
- authenticators: subaccount.authenticators,
300
- };
301
- // Generate signed transaction.
302
- return subaccount.signingWallet.signTransaction(messages, txOptions, fee, memo);
303
- }
304
-
305
- /**
306
- * @description Retrieve an account structure for transactions.
307
- * For short term orders, the sequence doesn't matter. Use cached if available.
308
- * For long term and conditional orders, a round trip to validator must be made.
309
- * when timestamp nonce is supported, no need to fetch account sequence number
310
- */
311
- public async account(address: string, orderFlags?: OrderFlags): Promise<Account> {
312
- if (orderFlags === OrderFlags.SHORT_TERM || this.useTimestampNonce) {
313
- if (this.accountNumberCache.has(address)) {
314
- // If order is SHORT_TERM or if timestamp nonce is enabled, the sequence doesn't matter
315
- return this.accountNumberCache.get(address)!;
316
- }
317
- }
318
- const result = await this.get.getAccount(address);
319
- const { typeUrl: _typeUrl, ...account } = result;
320
- this.accountNumberCache.set(address, account);
321
- return account;
322
- }
323
-
324
- /**
325
- * @description Sign and send a message
326
- *
327
- * @returns The Tx Response.
328
- */
329
- private async signAndSendTransaction(
330
- subaccount: SubaccountInfo,
331
- account: Account,
332
- messages: EncodeObject[],
333
- zeroFee: boolean,
334
- gasPrice: GasPrice = this.getGasPrice(),
335
- memo?: string,
336
- broadcastMode?: BroadcastMode,
337
- gasAdjustment: number = GAS_MULTIPLIER,
338
- additionalFeeCoins?: Coin[],
339
- ): Promise<BroadcastTxAsyncResponse | BroadcastTxSyncResponse | IndexedTx> {
340
- const signedTransaction = await this.signTransaction(
341
- subaccount,
342
- messages,
343
- account,
344
- zeroFee,
345
- gasPrice,
346
- memo,
347
- gasAdjustment,
348
- additionalFeeCoins,
349
- );
350
- return this.sendSignedTransaction(signedTransaction, broadcastMode);
351
- }
352
-
353
- /**
354
- * @description Send signed transaction.
355
- *
356
- * @returns The Tx Response.
357
- */
358
- async sendSignedTransaction(
359
- signedTransaction: Uint8Array,
360
- broadcastMode?: BroadcastMode,
361
- ): Promise<BroadcastTxAsyncResponse | BroadcastTxSyncResponse | IndexedTx> {
362
- return this.get.tendermintClient.broadcastTransaction(
363
- signedTransaction,
364
- broadcastMode !== undefined ? broadcastMode : Method.BroadcastTxSync,
365
- );
366
- }
367
-
368
- /**
369
- * @description Simulate broadcasting a transaction.
370
- *
371
- * @throws UnexpectedClientError if a malformed response is returned with no GRPC error
372
- * at any point.
373
- * @returns The Fee for broadcasting a transaction.
374
- */
375
- private async simulateTransaction(
376
- pubKey: Secp256k1Pubkey,
377
- sequence: number,
378
- messages: readonly EncodeObject[],
379
- gasPrice: GasPrice = this.getGasPrice(),
380
- memo?: string,
381
- gasAdjustment: number = GAS_MULTIPLIER,
382
- ): Promise<StdFee> {
383
- // Get simulated response.
384
- const encodedMessages: Any[] = messages.map((message: EncodeObject) =>
385
- this.registry.encodeAsAny(message),
386
- );
387
- const simulationResponse = await this.get.stargateQueryClient.tx.simulate(
388
- encodedMessages,
389
- memo,
390
- pubKey,
391
- sequence,
392
- );
393
-
394
- // The promise should have been rejected if the gasInfo was undefined.
395
- if (simulationResponse.gasInfo === undefined) {
396
- throw new UnexpectedClientError();
397
- }
398
-
399
- // Calculate and return fee from gasEstimate.
400
- const gasEstimate: number = Uint53.fromString(
401
- simulationResponse.gasInfo.gasUsed.toString(),
402
- ).toNumber();
403
- const fee = calculateFee(Math.floor(gasEstimate * gasAdjustment), gasPrice);
404
-
405
- // TODO(TRCL-2550): Temporary workaround before IBC denom is supported in '@cosmjs/stargate'.
406
- // The '@cosmjs/stargate' does not support denom with '/', so currently GAS_PRICE is
407
- // represented in 'uusdc', and the output of `calculateFee` is in '', which is replaced
408
- // below by USDC_DENOM string.
409
- const amount: Coin[] = fee.amount.map((coin: Coin) => {
410
- if (coin.denom === 'uusdc') {
411
- return {
412
- amount: coin.amount,
413
- denom: this.denoms.USDC_DENOM,
414
- };
415
- }
416
- return coin;
417
- });
418
-
419
- return {
420
- ...fee,
421
- amount,
422
- };
423
- }
424
-
425
- // ------ State-Changing Requests ------ //
426
-
427
- async placeOrder(
428
- subaccount: SubaccountInfo,
429
- clientId: number,
430
- clobPairId: number,
431
- side: Order_Side,
432
- quantums: Long,
433
- subticks: Long,
434
- timeInForce: Order_TimeInForce,
435
- orderFlags: number,
436
- reduceOnly: boolean,
437
- goodTilBlock?: number,
438
- goodTilBlockTime?: number,
439
- clientMetadata: number = 0,
440
- conditionType: Order_ConditionType = Order_ConditionType.CONDITION_TYPE_UNSPECIFIED,
441
- conditionalOrderTriggerSubticks: Long = Long.fromInt(0),
442
- twapParameters?: ITwapParameters,
443
- builderCodeParameters?: IBuilderCodeParameters,
444
- orderRouterAddress?: string,
445
- broadcastMode?: BroadcastMode,
446
- ): Promise<BroadcastTxAsyncResponse | BroadcastTxSyncResponse | IndexedTx> {
447
- const msg = await this.placeOrderMsg(
448
- subaccount.address,
449
- subaccount.subaccountNumber,
450
- clientId,
451
- clobPairId,
452
- side,
453
- quantums,
454
- subticks,
455
- timeInForce,
456
- orderFlags,
457
- reduceOnly,
458
- goodTilBlock,
459
- goodTilBlockTime,
460
- clientMetadata,
461
- conditionType,
462
- conditionalOrderTriggerSubticks,
463
- twapParameters,
464
- builderCodeParameters,
465
- orderRouterAddress,
466
- );
467
- const account: Promise<Account> = this.account(subaccount.address, orderFlags);
468
- return this.send(
469
- subaccount,
470
- () => Promise.resolve([msg]),
471
- true,
472
- undefined,
473
- undefined,
474
- broadcastMode,
475
- () => account,
476
- );
477
- }
478
-
479
- async placeOrderMsg(
480
- address: string,
481
- subaccountNumber: number,
482
- clientId: number,
483
- clobPairId: number,
484
- side: Order_Side,
485
- quantums: Long,
486
- subticks: Long,
487
- timeInForce: Order_TimeInForce,
488
- orderFlags: number,
489
- reduceOnly: boolean,
490
- goodTilBlock?: number,
491
- goodTilBlockTime?: number,
492
- clientMetadata: number = 0,
493
- conditionType: Order_ConditionType = Order_ConditionType.CONDITION_TYPE_UNSPECIFIED,
494
- conditionalOrderTriggerSubticks: Long = Long.fromInt(0),
495
- twapParameters?: ITwapParameters,
496
- builderCodeParameters?: IBuilderCodeParameters,
497
- orderRouterAddress?: string,
498
- ): Promise<EncodeObject> {
499
- return new Promise((resolve) => {
500
- const msg = this.composer.composeMsgPlaceOrder(
501
- address,
502
- subaccountNumber,
503
- clientId,
504
- clobPairId,
505
- orderFlags,
506
- goodTilBlock ?? 0,
507
- goodTilBlockTime ?? 0,
508
- side,
509
- quantums,
510
- subticks,
511
- timeInForce,
512
- reduceOnly,
513
- clientMetadata,
514
- conditionType,
515
- conditionalOrderTriggerSubticks,
516
- twapParameters,
517
- builderCodeParameters,
518
- orderRouterAddress,
519
- );
520
- resolve(msg);
521
- });
522
- }
523
-
524
- async placeOrderObject(
525
- subaccount: SubaccountInfo,
526
- placeOrder: IPlaceOrder,
527
- broadcastMode?: BroadcastMode,
528
- ): Promise<BroadcastTxAsyncResponse | BroadcastTxSyncResponse | IndexedTx> {
529
- return this.placeOrder(
530
- subaccount,
531
- placeOrder.clientId,
532
- placeOrder.clobPairId,
533
- placeOrder.side,
534
- placeOrder.quantums,
535
- placeOrder.subticks,
536
- placeOrder.timeInForce,
537
- placeOrder.orderFlags,
538
- placeOrder.reduceOnly,
539
- placeOrder.goodTilBlock,
540
- placeOrder.goodTilBlockTime,
541
- placeOrder.clientMetadata,
542
- placeOrder.conditionType ?? Order_ConditionType.CONDITION_TYPE_UNSPECIFIED,
543
- placeOrder.conditionalOrderTriggerSubticks ?? Long.fromInt(0),
544
- placeOrder.twapParameters,
545
- placeOrder.builderCodeParameters,
546
- placeOrder.orderRouterAddress,
547
- broadcastMode,
548
- );
549
- }
550
-
551
- async cancelOrder(
552
- subaccount: SubaccountInfo,
553
- clientId: number,
554
- orderFlags: OrderFlags,
555
- clobPairId: number,
556
- goodTilBlock?: number,
557
- goodTilBlockTime?: number,
558
- broadcastMode?: BroadcastMode,
559
- ): Promise<BroadcastTxAsyncResponse | BroadcastTxSyncResponse | IndexedTx> {
560
- const msg = await this.cancelOrderMsg(
561
- subaccount.address,
562
- subaccount.subaccountNumber,
563
- clientId,
564
- orderFlags,
565
- clobPairId,
566
- goodTilBlock ?? 0,
567
- goodTilBlockTime ?? 0,
568
- );
569
- return this.send(
570
- subaccount,
571
- () => Promise.resolve([msg]),
572
- true,
573
- undefined,
574
- undefined,
575
- broadcastMode,
576
- );
577
- }
578
-
579
- async cancelOrderMsg(
580
- address: string,
581
- subaccountNumber: number,
582
- clientId: number,
583
- orderFlags: OrderFlags,
584
- clobPairId: number,
585
- goodTilBlock?: number,
586
- goodTilBlockTime?: number,
587
- ): Promise<EncodeObject> {
588
- return new Promise((resolve) => {
589
- const msg = this.composer.composeMsgCancelOrder(
590
- address,
591
- subaccountNumber,
592
- clientId,
593
- clobPairId,
594
- orderFlags,
595
- goodTilBlock ?? 0,
596
- goodTilBlockTime ?? 0,
597
- );
598
- resolve(msg);
599
- });
600
- }
601
-
602
- async cancelOrderObject(
603
- subaccount: SubaccountInfo,
604
- cancelOrder: ICancelOrder,
605
- broadcastMode?: BroadcastMode,
606
- ): Promise<BroadcastTxAsyncResponse | BroadcastTxSyncResponse | IndexedTx> {
607
- return this.cancelOrder(
608
- subaccount,
609
- cancelOrder.clientId,
610
- cancelOrder.orderFlags,
611
- cancelOrder.clobPairId,
612
- cancelOrder.goodTilBlock,
613
- cancelOrder.goodTilBlockTime,
614
- broadcastMode,
615
- );
616
- }
617
-
618
- async batchCancelShortTermOrders(
619
- subaccount: SubaccountInfo,
620
- shortTermOrders: OrderBatch[],
621
- goodTilBlock: number,
622
- broadcastMode?: BroadcastMode,
623
- ): Promise<BroadcastTxAsyncResponse | BroadcastTxSyncResponse | IndexedTx> {
624
- const msg = await this.batchCancelShortTermOrdersMsg(
625
- subaccount.address,
626
- subaccount.subaccountNumber,
627
- shortTermOrders,
628
- goodTilBlock,
629
- );
630
- return this.send(
631
- subaccount,
632
- () => Promise.resolve([msg]),
633
- true,
634
- undefined,
635
- undefined,
636
- broadcastMode,
637
- );
638
- }
639
-
640
- async batchCancelShortTermOrdersMsg(
641
- address: string,
642
- subaccountNumber: number,
643
- shortTermOrders: OrderBatch[],
644
- goodTilBlock: number,
645
- ): Promise<EncodeObject> {
646
- return new Promise((resolve) => {
647
- const msg = this.composer.composeMsgBatchCancelShortTermOrders(
648
- address,
649
- subaccountNumber,
650
- shortTermOrders,
651
- goodTilBlock,
652
- );
653
- resolve(msg);
654
- });
655
- }
656
-
657
- async transfer(
658
- subaccount: SubaccountInfo,
659
- recipientAddress: string,
660
- recipientSubaccountNumber: number,
661
- assetId: number,
662
- amount: Long,
663
- broadcastMode?: BroadcastMode,
664
- ): Promise<BroadcastTxAsyncResponse | BroadcastTxSyncResponse | IndexedTx> {
665
- const msg = await this.transferMsg(
666
- subaccount.address,
667
- subaccount.subaccountNumber,
668
- recipientAddress,
669
- recipientSubaccountNumber,
670
- assetId,
671
- amount,
672
- );
673
- return this.send(
674
- subaccount,
675
- () => Promise.resolve([msg]),
676
- false,
677
- undefined,
678
- undefined,
679
- broadcastMode,
680
- );
681
- }
682
-
683
- async transferMsg(
684
- address: string,
685
- subaccountNumber: number,
686
- recipientAddress: string,
687
- recipientSubaccountNumber: number,
688
- assetId: number,
689
- amount: Long,
690
- ): Promise<EncodeObject> {
691
- return new Promise((resolve) => {
692
- const msg = this.composer.composeMsgTransfer(
693
- address,
694
- subaccountNumber,
695
- recipientAddress,
696
- recipientSubaccountNumber,
697
- assetId,
698
- amount,
699
- );
700
- resolve(msg);
701
- });
702
- }
703
-
704
- async deposit(
705
- subaccount: SubaccountInfo,
706
- assetId: number,
707
- quantums: Long,
708
- broadcastMode?: BroadcastMode,
709
- ): Promise<BroadcastTxAsyncResponse | BroadcastTxSyncResponse | IndexedTx> {
710
- const msg = await this.depositMsg(
711
- subaccount.address,
712
- subaccount.subaccountNumber,
713
- assetId,
714
- quantums,
715
- );
716
- return this.send(
717
- subaccount,
718
- () => Promise.resolve([msg]),
719
- false,
720
- undefined,
721
- undefined,
722
- broadcastMode,
723
- );
724
- }
725
-
726
- async depositMsg(
727
- address: string,
728
- subaccountNumber: number,
729
- assetId: number,
730
- quantums: Long,
731
- ): Promise<EncodeObject> {
732
- return new Promise((resolve) => {
733
- const msg = this.composer.composeMsgDepositToSubaccount(
734
- address,
735
- subaccountNumber,
736
- assetId,
737
- quantums,
738
- );
739
- resolve(msg);
740
- });
741
- }
742
-
743
- async withdraw(
744
- subaccount: SubaccountInfo,
745
- assetId: number,
746
- quantums: Long,
747
- recipient?: string,
748
- broadcastMode?: BroadcastMode,
749
- ): Promise<BroadcastTxAsyncResponse | BroadcastTxSyncResponse | IndexedTx> {
750
- const msg = await this.withdrawMsg(
751
- subaccount.address,
752
- subaccount.subaccountNumber,
753
- assetId,
754
- quantums,
755
- recipient,
756
- );
757
- return this.send(
758
- subaccount,
759
- () => Promise.resolve([msg]),
760
- false,
761
- undefined,
762
- undefined,
763
- broadcastMode,
764
- );
765
- }
766
-
767
- async withdrawMsg(
768
- address: string,
769
- subaccountNumber: number,
770
- assetId: number,
771
- quantums: Long,
772
- recipient?: string,
773
- ): Promise<EncodeObject> {
774
- return new Promise((resolve) => {
775
- const msg = this.composer.composeMsgWithdrawFromSubaccount(
776
- address,
777
- subaccountNumber,
778
- assetId,
779
- quantums,
780
- recipient,
781
- );
782
- resolve(msg);
783
- });
784
- }
785
-
786
- async sendToken(
787
- subaccount: SubaccountInfo,
788
- recipient: string,
789
- coinDenom: string,
790
- quantums: string,
791
- zeroFee: boolean = true,
792
- broadcastMode?: BroadcastMode,
793
- ): Promise<BroadcastTxAsyncResponse | BroadcastTxSyncResponse | IndexedTx> {
794
- const msg = await this.sendTokenMsg(subaccount.address, recipient, coinDenom, quantums);
795
- return this.send(
796
- subaccount,
797
- () => Promise.resolve([msg]),
798
- zeroFee,
799
- coinDenom === this.denoms.CHAINTOKEN_DENOM ? this.defaultChainGasPrice : this.defaultGasPrice,
800
- undefined,
801
- broadcastMode,
802
- );
803
- }
804
-
805
- async sendTokenMsg(
806
- address: string,
807
- recipient: string,
808
- coinDenom: string,
809
- quantums: string,
810
- ): Promise<EncodeObject> {
811
- if (coinDenom !== this.denoms.CHAINTOKEN_DENOM && coinDenom !== this.denoms.USDC_DENOM) {
812
- throw new Error('Unsupported coinDenom');
813
- }
814
-
815
- return new Promise((resolve) => {
816
- const msg = this.composer.composeMsgSendToken(address, recipient, coinDenom, quantums);
817
- resolve(msg);
818
- });
819
- }
820
-
821
- async delegate(
822
- subaccount: SubaccountInfo,
823
- delegator: string,
824
- validator: string,
825
- amount: string,
826
- broadcastMode?: BroadcastMode,
827
- ): Promise<BroadcastTxAsyncResponse | BroadcastTxSyncResponse | IndexedTx> {
828
- const msg = this.composer.composeMsgDelegate(delegator, validator, {
829
- denom: this.denoms.CHAINTOKEN_DENOM,
830
- amount,
831
- });
832
- return this.send(
833
- subaccount,
834
- () => Promise.resolve([msg]),
835
- false,
836
- this.defaultChainGasPrice,
837
- undefined,
838
- broadcastMode,
839
- );
840
- }
841
-
842
- delegateMsg(delegator: string, validator: string, amount: string): EncodeObject {
843
- return this.composer.composeMsgDelegate(delegator, validator, {
844
- denom: this.denoms.CHAINTOKEN_DENOM,
845
- amount,
846
- });
847
- }
848
-
849
- async undelegate(
850
- subaccount: SubaccountInfo,
851
- delegator: string,
852
- validator: string,
853
- amount: string,
854
- broadcastMode?: BroadcastMode,
855
- ): Promise<BroadcastTxAsyncResponse | BroadcastTxSyncResponse | IndexedTx> {
856
- const msg = this.composer.composeMsgUndelegate(delegator, validator, {
857
- denom: this.denoms.CHAINTOKEN_DENOM,
858
- amount,
859
- });
860
- return this.send(
861
- subaccount,
862
- () => Promise.resolve([msg]),
863
- false,
864
- this.defaultChainGasPrice,
865
- undefined,
866
- broadcastMode,
867
- );
868
- }
869
-
870
- undelegateMsg(delegator: string, validator: string, amount: string): EncodeObject {
871
- return this.composer.composeMsgUndelegate(delegator, validator, {
872
- denom: this.denoms.CHAINTOKEN_DENOM,
873
- amount,
874
- });
875
- }
876
-
877
- async withdrawDelegatorReward(
878
- subaccount: SubaccountInfo,
879
- delegator: string,
880
- validator: string,
881
- broadcastMode?: BroadcastMode,
882
- ): Promise<BroadcastTxAsyncResponse | BroadcastTxSyncResponse | IndexedTx> {
883
- const msg = this.composer.composeMsgWithdrawDelegatorReward(delegator, validator);
884
- return this.send(
885
- subaccount,
886
- () => Promise.resolve([msg]),
887
- false,
888
- this.defaultGasPrice,
889
- undefined,
890
- broadcastMode,
891
- );
892
- }
893
-
894
- withdrawDelegatorRewardMsg(delegator: string, validator: string): EncodeObject {
895
- return this.composer.composeMsgWithdrawDelegatorReward(delegator, validator);
896
- }
897
-
898
- // vaults
899
- async depositToMegavault(
900
- subaccount: SubaccountInfo,
901
- quoteQuantums: Uint8Array,
902
- broadcastMode?: BroadcastMode,
903
- ): Promise<BroadcastTxAsyncResponse | BroadcastTxSyncResponse | IndexedTx> {
904
- const msg = await this.depositToMegavaultMsg(
905
- subaccount.address,
906
- subaccount.subaccountNumber,
907
- quoteQuantums,
908
- );
909
- return this.send(
910
- subaccount,
911
- () => Promise.resolve([msg]),
912
- false,
913
- undefined,
914
- undefined,
915
- broadcastMode,
916
- );
917
- }
918
-
919
- depositToMegavaultMsg(
920
- ...args: Parameters<Composer['composeMsgDepositToMegavault']>
921
- ): EncodeObject {
922
- return this.composer.composeMsgDepositToMegavault(...args);
923
- }
924
-
925
- async withdrawFromMegavault(
926
- subaccount: SubaccountInfo,
927
- shares: Uint8Array,
928
- minQuoteQuantums: Uint8Array,
929
- broadcastMode?: BroadcastMode,
930
- ): Promise<BroadcastTxAsyncResponse | BroadcastTxSyncResponse | IndexedTx> {
931
- const msg = await this.withdrawFromMegavaultMsg(
932
- subaccount.address,
933
- subaccount.subaccountNumber,
934
- shares,
935
- minQuoteQuantums,
936
- );
937
- return this.send(
938
- subaccount,
939
- () => Promise.resolve([msg]),
940
- false,
941
- undefined,
942
- undefined,
943
- broadcastMode,
944
- );
945
- }
946
-
947
- withdrawFromMegavaultMsg(
948
- ...args: Parameters<Composer['composeMsgWithdrawFromMegavault']>
949
- ): EncodeObject {
950
- return this.composer.composeMsgWithdrawFromMegavault(...args);
951
- }
952
-
953
- async registerAffiliate(
954
- subaccount: SubaccountInfo,
955
- affiliate: string,
956
- broadcastMode?: BroadcastMode,
957
- gasAdjustment: number = 2,
958
- ): Promise<BroadcastTxAsyncResponse | BroadcastTxSyncResponse | IndexedTx> {
959
- const msg = this.registerAffiliateMsg(subaccount.address, affiliate);
960
- return this.send(
961
- subaccount,
962
- () => Promise.resolve([msg]),
963
- false,
964
- undefined,
965
- undefined,
966
- broadcastMode,
967
- undefined,
968
- gasAdjustment,
969
- );
970
- }
971
-
972
- registerAffiliateMsg(...args: Parameters<Composer['composeMsgRegisterAffiliate']>): EncodeObject {
973
- return this.composer.composeMsgRegisterAffiliate(...args);
974
- }
975
-
976
- launchMarketMsg(
977
- ...args: Parameters<Composer['composeMsgCreateMarketPermissionless']>
978
- ): EncodeObject {
979
- return this.composer.composeMsgCreateMarketPermissionless(...args);
980
- }
981
-
982
- async createMarketPermissionless(
983
- ticker: string,
984
- subaccount: SubaccountInfo,
985
- broadcastMode?: BroadcastMode,
986
- gasAdjustment?: number,
987
- memo?: string,
988
- ): Promise<BroadcastTxAsyncResponse | BroadcastTxSyncResponse | IndexedTx> {
989
- const msg = this.launchMarketMsg(subaccount.address, ticker, subaccount.subaccountNumber);
990
-
991
- return this.send(
992
- subaccount,
993
- () => Promise.resolve([msg]),
994
- false,
995
- undefined,
996
- memo,
997
- broadcastMode,
998
- undefined,
999
- gasAdjustment,
1000
- );
1001
- }
1002
-
1003
- async addAuthenticator(
1004
- subaccount: SubaccountInfo,
1005
- authenticatorType: AuthenticatorType,
1006
- data: Uint8Array,
1007
- ): Promise<BroadcastTxAsyncResponse | BroadcastTxSyncResponse | IndexedTx> {
1008
- const msg = this.composer.composeMsgAddAuthenticator(
1009
- subaccount.address,
1010
- authenticatorType,
1011
- data,
1012
- );
1013
-
1014
- return this.send(
1015
- subaccount,
1016
- () => Promise.resolve([msg]),
1017
- false,
1018
- undefined,
1019
- undefined,
1020
- Method.BroadcastTxSync,
1021
- undefined,
1022
- undefined,
1023
- );
1024
- }
1025
-
1026
- async removeAuthenticator(
1027
- subaccount: SubaccountInfo,
1028
- id: Long,
1029
- ): Promise<BroadcastTxAsyncResponse | BroadcastTxSyncResponse | IndexedTx> {
1030
- const msg = this.composer.composeMsgRemoveAuthenticator(subaccount.address, id);
1031
-
1032
- return this.send(
1033
- subaccount,
1034
- () => Promise.resolve([msg]),
1035
- false,
1036
- undefined,
1037
- undefined,
1038
- Method.BroadcastTxSync,
1039
- undefined,
1040
- 3,
1041
- );
1042
- }
1043
- }