@ritbit/v4-client-js 1.3.17

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