@nadohq/shared 0.1.0-alpha.4

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 (551) hide show
  1. package/README.md +2 -0
  2. package/dist/abis/Clearinghouse.cjs +891 -0
  3. package/dist/abis/Clearinghouse.cjs.map +1 -0
  4. package/dist/abis/Clearinghouse.d.cts +669 -0
  5. package/dist/abis/Clearinghouse.d.ts +669 -0
  6. package/dist/abis/Clearinghouse.js +868 -0
  7. package/dist/abis/Clearinghouse.js.map +1 -0
  8. package/dist/abis/ERC20.cjs +215 -0
  9. package/dist/abis/ERC20.cjs.map +1 -0
  10. package/dist/abis/ERC20.d.cts +143 -0
  11. package/dist/abis/ERC20.d.ts +143 -0
  12. package/dist/abis/ERC20.js +192 -0
  13. package/dist/abis/ERC20.js.map +1 -0
  14. package/dist/abis/Endpoint.cjs +589 -0
  15. package/dist/abis/Endpoint.cjs.map +1 -0
  16. package/dist/abis/Endpoint.d.cts +433 -0
  17. package/dist/abis/Endpoint.d.ts +433 -0
  18. package/dist/abis/Endpoint.js +566 -0
  19. package/dist/abis/Endpoint.js.map +1 -0
  20. package/dist/abis/MockERC20.cjs +341 -0
  21. package/dist/abis/MockERC20.cjs.map +1 -0
  22. package/dist/abis/MockERC20.d.cts +239 -0
  23. package/dist/abis/MockERC20.d.ts +239 -0
  24. package/dist/abis/MockERC20.js +318 -0
  25. package/dist/abis/MockERC20.js.map +1 -0
  26. package/dist/abis/PerpEngine.cjs +886 -0
  27. package/dist/abis/PerpEngine.cjs.map +1 -0
  28. package/dist/abis/PerpEngine.d.cts +661 -0
  29. package/dist/abis/PerpEngine.d.ts +661 -0
  30. package/dist/abis/PerpEngine.js +863 -0
  31. package/dist/abis/PerpEngine.js.map +1 -0
  32. package/dist/abis/Querier.cjs +1522 -0
  33. package/dist/abis/Querier.cjs.map +1 -0
  34. package/dist/abis/Querier.d.cts +1149 -0
  35. package/dist/abis/Querier.d.ts +1149 -0
  36. package/dist/abis/Querier.js +1499 -0
  37. package/dist/abis/Querier.js.map +1 -0
  38. package/dist/abis/SpotEngine.cjs +937 -0
  39. package/dist/abis/SpotEngine.cjs.map +1 -0
  40. package/dist/abis/SpotEngine.d.cts +701 -0
  41. package/dist/abis/SpotEngine.d.ts +701 -0
  42. package/dist/abis/SpotEngine.js +914 -0
  43. package/dist/abis/SpotEngine.js.map +1 -0
  44. package/dist/abis/WithdrawPool.cjs +307 -0
  45. package/dist/abis/WithdrawPool.cjs.map +1 -0
  46. package/dist/abis/WithdrawPool.d.cts +214 -0
  47. package/dist/abis/WithdrawPool.d.ts +214 -0
  48. package/dist/abis/WithdrawPool.js +284 -0
  49. package/dist/abis/WithdrawPool.js.map +1 -0
  50. package/dist/abis/index.cjs +41 -0
  51. package/dist/abis/index.cjs.map +1 -0
  52. package/dist/abis/index.d.cts +9 -0
  53. package/dist/abis/index.d.ts +9 -0
  54. package/dist/abis/index.js +11 -0
  55. package/dist/abis/index.js.map +1 -0
  56. package/dist/abis/nadoAbis.cjs +44 -0
  57. package/dist/abis/nadoAbis.cjs.map +1 -0
  58. package/dist/abis/nadoAbis.d.cts +3821 -0
  59. package/dist/abis/nadoAbis.d.ts +3821 -0
  60. package/dist/abis/nadoAbis.js +21 -0
  61. package/dist/abis/nadoAbis.js.map +1 -0
  62. package/dist/chunk-5WRI5ZAA.js +31 -0
  63. package/dist/chunk-5WRI5ZAA.js.map +1 -0
  64. package/dist/chunk-TUJ4HQKF.js +33 -0
  65. package/dist/chunk-TUJ4HQKF.js.map +1 -0
  66. package/dist/consts/chainEnvToChain.cjs +44 -0
  67. package/dist/consts/chainEnvToChain.cjs.map +1 -0
  68. package/dist/consts/chainEnvToChain.d.cts +388 -0
  69. package/dist/consts/chainEnvToChain.d.ts +388 -0
  70. package/dist/consts/chainEnvToChain.js +20 -0
  71. package/dist/consts/chainEnvToChain.js.map +1 -0
  72. package/dist/consts/index.cjs +27 -0
  73. package/dist/consts/index.cjs.map +1 -0
  74. package/dist/consts/index.d.cts +6 -0
  75. package/dist/consts/index.d.ts +6 -0
  76. package/dist/consts/index.js +4 -0
  77. package/dist/consts/index.js.map +1 -0
  78. package/dist/consts/productIds.cjs +34 -0
  79. package/dist/consts/productIds.cjs.map +1 -0
  80. package/dist/consts/productIds.d.cts +4 -0
  81. package/dist/consts/productIds.d.ts +4 -0
  82. package/dist/consts/productIds.js +10 -0
  83. package/dist/consts/productIds.js.map +1 -0
  84. package/dist/deployments/core/deployment.InkSepolia.json +13 -0
  85. package/dist/deployments/core/deployment.arbitrumOne.json +18 -0
  86. package/dist/deployments/core/deployment.localhost.json +18 -0
  87. package/dist/deployments/index.cjs +65 -0
  88. package/dist/deployments/index.cjs.map +1 -0
  89. package/dist/deployments/index.d.cts +13 -0
  90. package/dist/deployments/index.d.ts +13 -0
  91. package/dist/deployments/index.js +32 -0
  92. package/dist/deployments/index.js.map +1 -0
  93. package/dist/eip712/eip712ValueTypes.cjs +19 -0
  94. package/dist/eip712/eip712ValueTypes.cjs.map +1 -0
  95. package/dist/eip712/eip712ValueTypes.d.cts +48 -0
  96. package/dist/eip712/eip712ValueTypes.d.ts +48 -0
  97. package/dist/eip712/eip712ValueTypes.js +1 -0
  98. package/dist/eip712/eip712ValueTypes.js.map +1 -0
  99. package/dist/eip712/getNadoEIP712Domain.cjs +39 -0
  100. package/dist/eip712/getNadoEIP712Domain.cjs.map +1 -0
  101. package/dist/eip712/getNadoEIP712Domain.d.cts +11 -0
  102. package/dist/eip712/getNadoEIP712Domain.d.ts +11 -0
  103. package/dist/eip712/getNadoEIP712Domain.js +16 -0
  104. package/dist/eip712/getNadoEIP712Domain.js.map +1 -0
  105. package/dist/eip712/getNadoEIP712PrimaryType.cjs +35 -0
  106. package/dist/eip712/getNadoEIP712PrimaryType.cjs.map +1 -0
  107. package/dist/eip712/getNadoEIP712PrimaryType.d.cts +16 -0
  108. package/dist/eip712/getNadoEIP712PrimaryType.d.ts +16 -0
  109. package/dist/eip712/getNadoEIP712PrimaryType.js +12 -0
  110. package/dist/eip712/getNadoEIP712PrimaryType.js.map +1 -0
  111. package/dist/eip712/getNadoEIP712Types.cjs +129 -0
  112. package/dist/eip712/getNadoEIP712Types.cjs.map +1 -0
  113. package/dist/eip712/getNadoEIP712Types.d.cts +20 -0
  114. package/dist/eip712/getNadoEIP712Types.d.ts +20 -0
  115. package/dist/eip712/getNadoEIP712Types.js +106 -0
  116. package/dist/eip712/getNadoEIP712Types.js.map +1 -0
  117. package/dist/eip712/getNadoEIP712Values.cjs +206 -0
  118. package/dist/eip712/getNadoEIP712Values.cjs.map +1 -0
  119. package/dist/eip712/getNadoEIP712Values.d.cts +20 -0
  120. package/dist/eip712/getNadoEIP712Values.d.ts +20 -0
  121. package/dist/eip712/getNadoEIP712Values.js +183 -0
  122. package/dist/eip712/getNadoEIP712Values.js.map +1 -0
  123. package/dist/eip712/getOrderVerifyingAddress.cjs +34 -0
  124. package/dist/eip712/getOrderVerifyingAddress.cjs.map +1 -0
  125. package/dist/eip712/getOrderVerifyingAddress.d.cts +9 -0
  126. package/dist/eip712/getOrderVerifyingAddress.d.ts +9 -0
  127. package/dist/eip712/getOrderVerifyingAddress.js +11 -0
  128. package/dist/eip712/getOrderVerifyingAddress.js.map +1 -0
  129. package/dist/eip712/getSignedTransactionRequest.cjs +42 -0
  130. package/dist/eip712/getSignedTransactionRequest.cjs.map +1 -0
  131. package/dist/eip712/getSignedTransactionRequest.d.cts +19 -0
  132. package/dist/eip712/getSignedTransactionRequest.d.ts +19 -0
  133. package/dist/eip712/getSignedTransactionRequest.js +19 -0
  134. package/dist/eip712/getSignedTransactionRequest.js.map +1 -0
  135. package/dist/eip712/index.cjs +43 -0
  136. package/dist/eip712/index.cjs.map +1 -0
  137. package/dist/eip712/index.d.cts +17 -0
  138. package/dist/eip712/index.d.ts +17 -0
  139. package/dist/eip712/index.js +12 -0
  140. package/dist/eip712/index.js.map +1 -0
  141. package/dist/eip712/orderDigest.cjs +45 -0
  142. package/dist/eip712/orderDigest.cjs.map +1 -0
  143. package/dist/eip712/orderDigest.d.cts +20 -0
  144. package/dist/eip712/orderDigest.d.ts +20 -0
  145. package/dist/eip712/orderDigest.js +22 -0
  146. package/dist/eip712/orderDigest.js.map +1 -0
  147. package/dist/eip712/signableRequestType.cjs +19 -0
  148. package/dist/eip712/signableRequestType.cjs.map +1 -0
  149. package/dist/eip712/signableRequestType.d.cts +26 -0
  150. package/dist/eip712/signableRequestType.d.ts +26 -0
  151. package/dist/eip712/signableRequestType.js +1 -0
  152. package/dist/eip712/signableRequestType.js.map +1 -0
  153. package/dist/eip712/signatureParamTypes.cjs +19 -0
  154. package/dist/eip712/signatureParamTypes.cjs.map +1 -0
  155. package/dist/eip712/signatureParamTypes.d.cts +68 -0
  156. package/dist/eip712/signatureParamTypes.d.ts +68 -0
  157. package/dist/eip712/signatureParamTypes.js +1 -0
  158. package/dist/eip712/signatureParamTypes.js.map +1 -0
  159. package/dist/encoding/encoding.cjs +73 -0
  160. package/dist/encoding/encoding.cjs.map +1 -0
  161. package/dist/encoding/encoding.d.cts +11 -0
  162. package/dist/encoding/encoding.d.ts +11 -0
  163. package/dist/encoding/encoding.js +49 -0
  164. package/dist/encoding/encoding.js.map +1 -0
  165. package/dist/encoding/index.cjs +25 -0
  166. package/dist/encoding/index.cjs.map +1 -0
  167. package/dist/encoding/index.d.cts +7 -0
  168. package/dist/encoding/index.d.ts +7 -0
  169. package/dist/encoding/index.js +3 -0
  170. package/dist/encoding/index.js.map +1 -0
  171. package/dist/execute/approveDepositAllowance.cjs +38 -0
  172. package/dist/execute/approveDepositAllowance.cjs.map +1 -0
  173. package/dist/execute/approveDepositAllowance.d.cts +18 -0
  174. package/dist/execute/approveDepositAllowance.d.ts +18 -0
  175. package/dist/execute/approveDepositAllowance.js +15 -0
  176. package/dist/execute/approveDepositAllowance.js.map +1 -0
  177. package/dist/execute/depositCollateral.cjs +59 -0
  178. package/dist/execute/depositCollateral.cjs.map +1 -0
  179. package/dist/execute/depositCollateral.d.cts +21 -0
  180. package/dist/execute/depositCollateral.d.ts +21 -0
  181. package/dist/execute/depositCollateral.js +36 -0
  182. package/dist/execute/depositCollateral.js.map +1 -0
  183. package/dist/execute/index.cjs +27 -0
  184. package/dist/execute/index.cjs.map +1 -0
  185. package/dist/execute/index.d.cts +9 -0
  186. package/dist/execute/index.d.ts +9 -0
  187. package/dist/execute/index.js +4 -0
  188. package/dist/execute/index.js.map +1 -0
  189. package/dist/index.cjs +39 -0
  190. package/dist/index.cjs.map +1 -0
  191. package/dist/index.d.cts +67 -0
  192. package/dist/index.d.ts +67 -0
  193. package/dist/index.js +10 -0
  194. package/dist/index.js.map +1 -0
  195. package/dist/types/ChainEnv.cjs +44 -0
  196. package/dist/types/ChainEnv.cjs.map +1 -0
  197. package/dist/types/ChainEnv.d.cts +7 -0
  198. package/dist/types/ChainEnv.d.ts +7 -0
  199. package/dist/types/ChainEnv.js +18 -0
  200. package/dist/types/ChainEnv.js.map +1 -0
  201. package/dist/types/OrderExecutionType.cjs +19 -0
  202. package/dist/types/OrderExecutionType.cjs.map +1 -0
  203. package/dist/types/OrderExecutionType.d.cts +10 -0
  204. package/dist/types/OrderExecutionType.d.ts +10 -0
  205. package/dist/types/OrderExecutionType.js +1 -0
  206. package/dist/types/OrderExecutionType.js.map +1 -0
  207. package/dist/types/balanceTypes.cjs +19 -0
  208. package/dist/types/balanceTypes.cjs.map +1 -0
  209. package/dist/types/balanceTypes.d.cts +38 -0
  210. package/dist/types/balanceTypes.d.ts +38 -0
  211. package/dist/types/balanceTypes.js +1 -0
  212. package/dist/types/balanceTypes.js.map +1 -0
  213. package/dist/types/bytes.cjs +19 -0
  214. package/dist/types/bytes.cjs.map +1 -0
  215. package/dist/types/bytes.d.cts +3 -0
  216. package/dist/types/bytes.d.ts +3 -0
  217. package/dist/types/bytes.js +1 -0
  218. package/dist/types/bytes.js.map +1 -0
  219. package/dist/types/healthTypes.cjs +19 -0
  220. package/dist/types/healthTypes.cjs.map +1 -0
  221. package/dist/types/healthTypes.d.cts +15 -0
  222. package/dist/types/healthTypes.d.ts +15 -0
  223. package/dist/types/healthTypes.js +1 -0
  224. package/dist/types/healthTypes.js.map +1 -0
  225. package/dist/types/index.cjs +45 -0
  226. package/dist/types/index.cjs.map +1 -0
  227. package/dist/types/index.d.cts +15 -0
  228. package/dist/types/index.d.ts +15 -0
  229. package/dist/types/index.js +13 -0
  230. package/dist/types/index.js.map +1 -0
  231. package/dist/types/marketTypes.cjs +19 -0
  232. package/dist/types/marketTypes.cjs.map +1 -0
  233. package/dist/types/marketTypes.d.cts +31 -0
  234. package/dist/types/marketTypes.d.ts +31 -0
  235. package/dist/types/marketTypes.js +1 -0
  236. package/dist/types/marketTypes.js.map +1 -0
  237. package/dist/types/nadoContractTypes.cjs +19 -0
  238. package/dist/types/nadoContractTypes.cjs.map +1 -0
  239. package/dist/types/nadoContractTypes.d.cts +14 -0
  240. package/dist/types/nadoContractTypes.d.ts +14 -0
  241. package/dist/types/nadoContractTypes.js +1 -0
  242. package/dist/types/nadoContractTypes.js.map +1 -0
  243. package/dist/types/orderAppendixTypes.cjs +19 -0
  244. package/dist/types/orderAppendixTypes.cjs.map +1 -0
  245. package/dist/types/orderAppendixTypes.d.cts +54 -0
  246. package/dist/types/orderAppendixTypes.d.ts +54 -0
  247. package/dist/types/orderAppendixTypes.js +1 -0
  248. package/dist/types/orderAppendixTypes.js.map +1 -0
  249. package/dist/types/productTypes.cjs +47 -0
  250. package/dist/types/productTypes.cjs.map +1 -0
  251. package/dist/types/productTypes.d.cts +55 -0
  252. package/dist/types/productTypes.d.ts +55 -0
  253. package/dist/types/productTypes.js +23 -0
  254. package/dist/types/productTypes.js.map +1 -0
  255. package/dist/types/subaccountTypes.cjs +19 -0
  256. package/dist/types/subaccountTypes.cjs.map +1 -0
  257. package/dist/types/subaccountTypes.d.cts +13 -0
  258. package/dist/types/subaccountTypes.d.ts +13 -0
  259. package/dist/types/subaccountTypes.js +1 -0
  260. package/dist/types/subaccountTypes.js.map +1 -0
  261. package/dist/types/viemTypes.cjs +19 -0
  262. package/dist/types/viemTypes.cjs.map +1 -0
  263. package/dist/types/viemTypes.d.cts +23 -0
  264. package/dist/types/viemTypes.d.ts +23 -0
  265. package/dist/types/viemTypes.js +1 -0
  266. package/dist/types/viemTypes.js.map +1 -0
  267. package/dist/utils/asyncResult.cjs +36 -0
  268. package/dist/utils/asyncResult.cjs.map +1 -0
  269. package/dist/utils/asyncResult.d.cts +4 -0
  270. package/dist/utils/asyncResult.d.ts +4 -0
  271. package/dist/utils/asyncResult.js +13 -0
  272. package/dist/utils/asyncResult.js.map +1 -0
  273. package/dist/utils/balanceValue.cjs +43 -0
  274. package/dist/utils/balanceValue.cjs.map +1 -0
  275. package/dist/utils/balanceValue.d.cts +25 -0
  276. package/dist/utils/balanceValue.d.ts +25 -0
  277. package/dist/utils/balanceValue.js +18 -0
  278. package/dist/utils/balanceValue.js.map +1 -0
  279. package/dist/utils/bytes32.cjs +92 -0
  280. package/dist/utils/bytes32.cjs.map +1 -0
  281. package/dist/utils/bytes32.d.cts +47 -0
  282. package/dist/utils/bytes32.d.ts +47 -0
  283. package/dist/utils/bytes32.js +64 -0
  284. package/dist/utils/bytes32.js.map +1 -0
  285. package/dist/utils/bytes32.test.cjs +203 -0
  286. package/dist/utils/bytes32.test.cjs.map +1 -0
  287. package/dist/utils/bytes32.test.d.cts +2 -0
  288. package/dist/utils/bytes32.test.d.ts +2 -0
  289. package/dist/utils/bytes32.test.js +165 -0
  290. package/dist/utils/bytes32.test.js.map +1 -0
  291. package/dist/utils/createDeterministicLinkedSignerPrivateKey.cjs +56 -0
  292. package/dist/utils/createDeterministicLinkedSignerPrivateKey.cjs.map +1 -0
  293. package/dist/utils/createDeterministicLinkedSignerPrivateKey.d.cts +20 -0
  294. package/dist/utils/createDeterministicLinkedSignerPrivateKey.d.ts +20 -0
  295. package/dist/utils/createDeterministicLinkedSignerPrivateKey.js +33 -0
  296. package/dist/utils/createDeterministicLinkedSignerPrivateKey.js.map +1 -0
  297. package/dist/utils/errors/WalletNotProvidedError.cjs +36 -0
  298. package/dist/utils/errors/WalletNotProvidedError.cjs.map +1 -0
  299. package/dist/utils/errors/WalletNotProvidedError.d.cts +5 -0
  300. package/dist/utils/errors/WalletNotProvidedError.d.ts +5 -0
  301. package/dist/utils/errors/WalletNotProvidedError.js +13 -0
  302. package/dist/utils/errors/WalletNotProvidedError.js.map +1 -0
  303. package/dist/utils/errors/index.cjs +25 -0
  304. package/dist/utils/errors/index.cjs.map +1 -0
  305. package/dist/utils/errors/index.d.cts +1 -0
  306. package/dist/utils/errors/index.d.ts +1 -0
  307. package/dist/utils/errors/index.js +3 -0
  308. package/dist/utils/errors/index.js.map +1 -0
  309. package/dist/utils/getValidatedAddress.cjs +37 -0
  310. package/dist/utils/getValidatedAddress.cjs.map +1 -0
  311. package/dist/utils/getValidatedAddress.d.cts +9 -0
  312. package/dist/utils/getValidatedAddress.d.ts +9 -0
  313. package/dist/utils/getValidatedAddress.js +14 -0
  314. package/dist/utils/getValidatedAddress.js.map +1 -0
  315. package/dist/utils/getValidatedHex.cjs +37 -0
  316. package/dist/utils/getValidatedHex.cjs.map +1 -0
  317. package/dist/utils/getValidatedHex.d.cts +9 -0
  318. package/dist/utils/getValidatedHex.d.ts +9 -0
  319. package/dist/utils/getValidatedHex.js +14 -0
  320. package/dist/utils/getValidatedHex.js.map +1 -0
  321. package/dist/utils/index.cjs +53 -0
  322. package/dist/utils/index.cjs.map +1 -0
  323. package/dist/utils/index.d.cts +37 -0
  324. package/dist/utils/index.d.ts +37 -0
  325. package/dist/utils/index.js +17 -0
  326. package/dist/utils/index.js.map +1 -0
  327. package/dist/utils/interest.cjs +94 -0
  328. package/dist/utils/interest.cjs.map +1 -0
  329. package/dist/utils/interest.d.cts +50 -0
  330. package/dist/utils/interest.d.ts +50 -0
  331. package/dist/utils/interest.js +70 -0
  332. package/dist/utils/interest.js.map +1 -0
  333. package/dist/utils/isWriteableContract.cjs +33 -0
  334. package/dist/utils/isWriteableContract.cjs.map +1 -0
  335. package/dist/utils/isWriteableContract.d.cts +6 -0
  336. package/dist/utils/isWriteableContract.d.ts +6 -0
  337. package/dist/utils/isWriteableContract.js +10 -0
  338. package/dist/utils/isWriteableContract.js.map +1 -0
  339. package/dist/utils/mapValues.cjs +38 -0
  340. package/dist/utils/mapValues.cjs.map +1 -0
  341. package/dist/utils/mapValues.d.cts +6 -0
  342. package/dist/utils/mapValues.d.ts +6 -0
  343. package/dist/utils/mapValues.js +15 -0
  344. package/dist/utils/mapValues.js.map +1 -0
  345. package/dist/utils/math/BigDecimals.cjs +37 -0
  346. package/dist/utils/math/BigDecimals.cjs.map +1 -0
  347. package/dist/utils/math/BigDecimals.d.cts +8 -0
  348. package/dist/utils/math/BigDecimals.d.ts +8 -0
  349. package/dist/utils/math/BigDecimals.js +14 -0
  350. package/dist/utils/math/BigDecimals.js.map +1 -0
  351. package/dist/utils/math/bigDecimal.cjs +57 -0
  352. package/dist/utils/math/bigDecimal.cjs.map +1 -0
  353. package/dist/utils/math/bigDecimal.d.cts +18 -0
  354. package/dist/utils/math/bigDecimal.d.ts +18 -0
  355. package/dist/utils/math/bigDecimal.js +23 -0
  356. package/dist/utils/math/bigDecimal.js.map +1 -0
  357. package/dist/utils/math/clamp.cjs +38 -0
  358. package/dist/utils/math/clamp.cjs.map +1 -0
  359. package/dist/utils/math/clamp.d.cts +15 -0
  360. package/dist/utils/math/clamp.d.ts +15 -0
  361. package/dist/utils/math/clamp.js +15 -0
  362. package/dist/utils/math/clamp.js.map +1 -0
  363. package/dist/utils/math/decimalAdjustment.cjs +60 -0
  364. package/dist/utils/math/decimalAdjustment.cjs.map +1 -0
  365. package/dist/utils/math/decimalAdjustment.d.cts +31 -0
  366. package/dist/utils/math/decimalAdjustment.d.ts +31 -0
  367. package/dist/utils/math/decimalAdjustment.js +35 -0
  368. package/dist/utils/math/decimalAdjustment.js.map +1 -0
  369. package/dist/utils/math/index.cjs +37 -0
  370. package/dist/utils/math/index.cjs.map +1 -0
  371. package/dist/utils/math/index.d.cts +8 -0
  372. package/dist/utils/math/index.d.ts +8 -0
  373. package/dist/utils/math/index.js +9 -0
  374. package/dist/utils/math/index.js.map +1 -0
  375. package/dist/utils/math/sumBigDecimalBy.cjs +36 -0
  376. package/dist/utils/math/sumBigDecimalBy.cjs.map +1 -0
  377. package/dist/utils/math/sumBigDecimalBy.d.cts +10 -0
  378. package/dist/utils/math/sumBigDecimalBy.d.ts +10 -0
  379. package/dist/utils/math/sumBigDecimalBy.js +13 -0
  380. package/dist/utils/math/sumBigDecimalBy.js.map +1 -0
  381. package/dist/utils/math/toBigInt.cjs +34 -0
  382. package/dist/utils/math/toBigInt.cjs.map +1 -0
  383. package/dist/utils/math/toBigInt.d.cts +11 -0
  384. package/dist/utils/math/toBigInt.d.ts +11 -0
  385. package/dist/utils/math/toBigInt.js +11 -0
  386. package/dist/utils/math/toBigInt.js.map +1 -0
  387. package/dist/utils/math/toIntegerString.cjs +34 -0
  388. package/dist/utils/math/toIntegerString.cjs.map +1 -0
  389. package/dist/utils/math/toIntegerString.d.cts +11 -0
  390. package/dist/utils/math/toIntegerString.d.ts +11 -0
  391. package/dist/utils/math/toIntegerString.js +11 -0
  392. package/dist/utils/math/toIntegerString.js.map +1 -0
  393. package/dist/utils/orders/appendix/appendixTWAPValue.cjs +50 -0
  394. package/dist/utils/orders/appendix/appendixTWAPValue.cjs.map +1 -0
  395. package/dist/utils/orders/appendix/appendixTWAPValue.d.cts +31 -0
  396. package/dist/utils/orders/appendix/appendixTWAPValue.d.ts +31 -0
  397. package/dist/utils/orders/appendix/appendixTWAPValue.js +26 -0
  398. package/dist/utils/orders/appendix/appendixTWAPValue.js.map +1 -0
  399. package/dist/utils/orders/appendix/bitMaskValue.cjs +34 -0
  400. package/dist/utils/orders/appendix/bitMaskValue.cjs.map +1 -0
  401. package/dist/utils/orders/appendix/bitMaskValue.d.cts +10 -0
  402. package/dist/utils/orders/appendix/bitMaskValue.d.ts +10 -0
  403. package/dist/utils/orders/appendix/bitMaskValue.js +11 -0
  404. package/dist/utils/orders/appendix/bitMaskValue.js.map +1 -0
  405. package/dist/utils/orders/appendix/index.cjs +33 -0
  406. package/dist/utils/orders/appendix/index.cjs.map +1 -0
  407. package/dist/utils/orders/appendix/index.d.cts +9 -0
  408. package/dist/utils/orders/appendix/index.d.ts +9 -0
  409. package/dist/utils/orders/appendix/index.js +7 -0
  410. package/dist/utils/orders/appendix/index.js.map +1 -0
  411. package/dist/utils/orders/appendix/orderAppendix.test.cjs +165 -0
  412. package/dist/utils/orders/appendix/orderAppendix.test.cjs.map +1 -0
  413. package/dist/utils/orders/appendix/orderAppendix.test.d.cts +2 -0
  414. package/dist/utils/orders/appendix/orderAppendix.test.d.ts +2 -0
  415. package/dist/utils/orders/appendix/orderAppendix.test.js +120 -0
  416. package/dist/utils/orders/appendix/orderAppendix.test.js.map +1 -0
  417. package/dist/utils/orders/appendix/packOrderAppendix.cjs +88 -0
  418. package/dist/utils/orders/appendix/packOrderAppendix.cjs.map +1 -0
  419. package/dist/utils/orders/appendix/packOrderAppendix.d.cts +12 -0
  420. package/dist/utils/orders/appendix/packOrderAppendix.d.ts +12 -0
  421. package/dist/utils/orders/appendix/packOrderAppendix.js +65 -0
  422. package/dist/utils/orders/appendix/packOrderAppendix.js.map +1 -0
  423. package/dist/utils/orders/appendix/types.cjs +19 -0
  424. package/dist/utils/orders/appendix/types.cjs.map +1 -0
  425. package/dist/utils/orders/appendix/types.d.cts +19 -0
  426. package/dist/utils/orders/appendix/types.d.ts +19 -0
  427. package/dist/utils/orders/appendix/types.js +1 -0
  428. package/dist/utils/orders/appendix/types.js.map +1 -0
  429. package/dist/utils/orders/appendix/unpackOrderAppendix.cjs +106 -0
  430. package/dist/utils/orders/appendix/unpackOrderAppendix.cjs.map +1 -0
  431. package/dist/utils/orders/appendix/unpackOrderAppendix.d.cts +12 -0
  432. package/dist/utils/orders/appendix/unpackOrderAppendix.d.ts +12 -0
  433. package/dist/utils/orders/appendix/unpackOrderAppendix.js +83 -0
  434. package/dist/utils/orders/appendix/unpackOrderAppendix.js.map +1 -0
  435. package/dist/utils/orders/index.cjs +29 -0
  436. package/dist/utils/orders/index.cjs.map +1 -0
  437. package/dist/utils/orders/index.d.cts +11 -0
  438. package/dist/utils/orders/index.d.ts +11 -0
  439. package/dist/utils/orders/index.js +5 -0
  440. package/dist/utils/orders/index.js.map +1 -0
  441. package/dist/utils/orders/orderNonce.cjs +44 -0
  442. package/dist/utils/orders/orderNonce.cjs.map +1 -0
  443. package/dist/utils/orders/orderNonce.d.cts +14 -0
  444. package/dist/utils/orders/orderNonce.d.ts +14 -0
  445. package/dist/utils/orders/orderNonce.js +20 -0
  446. package/dist/utils/orders/orderNonce.js.map +1 -0
  447. package/dist/utils/orders/recvTime.cjs +33 -0
  448. package/dist/utils/orders/recvTime.cjs.map +1 -0
  449. package/dist/utils/orders/recvTime.d.cts +9 -0
  450. package/dist/utils/orders/recvTime.d.ts +9 -0
  451. package/dist/utils/orders/recvTime.js +10 -0
  452. package/dist/utils/orders/recvTime.js.map +1 -0
  453. package/dist/utils/productTypeFilter.cjs +49 -0
  454. package/dist/utils/productTypeFilter.cjs.map +1 -0
  455. package/dist/utils/productTypeFilter.d.cts +11 -0
  456. package/dist/utils/productTypeFilter.d.ts +11 -0
  457. package/dist/utils/productTypeFilter.js +25 -0
  458. package/dist/utils/productTypeFilter.js.map +1 -0
  459. package/dist/utils/time.cjs +47 -0
  460. package/dist/utils/time.cjs.map +1 -0
  461. package/dist/utils/time.d.cts +17 -0
  462. package/dist/utils/time.d.ts +17 -0
  463. package/dist/utils/time.js +22 -0
  464. package/dist/utils/time.js.map +1 -0
  465. package/dist/utils/toPrintableObject.cjs +51 -0
  466. package/dist/utils/toPrintableObject.cjs.map +1 -0
  467. package/dist/utils/toPrintableObject.d.cts +6 -0
  468. package/dist/utils/toPrintableObject.d.ts +6 -0
  469. package/dist/utils/toPrintableObject.js +28 -0
  470. package/dist/utils/toPrintableObject.js.map +1 -0
  471. package/package.json +49 -0
  472. package/src/abis/Clearinghouse.ts +861 -0
  473. package/src/abis/ERC20.ts +185 -0
  474. package/src/abis/Endpoint.ts +559 -0
  475. package/src/abis/MockERC20.ts +311 -0
  476. package/src/abis/PerpEngine.ts +856 -0
  477. package/src/abis/Querier.ts +1492 -0
  478. package/src/abis/SpotEngine.ts +907 -0
  479. package/src/abis/WithdrawPool.ts +277 -0
  480. package/src/abis/index.ts +9 -0
  481. package/src/abis/nadoAbis.ts +19 -0
  482. package/src/consts/chainEnvToChain.ts +16 -0
  483. package/src/consts/index.ts +2 -0
  484. package/src/consts/productIds.ts +3 -0
  485. package/src/deployments/core/deployment.InkSepolia.json +13 -0
  486. package/src/deployments/core/deployment.arbitrumOne.json +18 -0
  487. package/src/deployments/core/deployment.localhost.json +18 -0
  488. package/src/deployments/index.ts +40 -0
  489. package/src/eip712/eip712ValueTypes.ts +83 -0
  490. package/src/eip712/getNadoEIP712Domain.ts +20 -0
  491. package/src/eip712/getNadoEIP712PrimaryType.ts +13 -0
  492. package/src/eip712/getNadoEIP712Types.ts +113 -0
  493. package/src/eip712/getNadoEIP712Values.ts +248 -0
  494. package/src/eip712/getOrderVerifyingAddress.ts +9 -0
  495. package/src/eip712/getSignedTransactionRequest.ts +30 -0
  496. package/src/eip712/index.ts +10 -0
  497. package/src/eip712/orderDigest.ts +28 -0
  498. package/src/eip712/signableRequestType.ts +32 -0
  499. package/src/eip712/signatureParamTypes.ts +84 -0
  500. package/src/encoding/encoding.ts +50 -0
  501. package/src/encoding/index.ts +1 -0
  502. package/src/execute/approveDepositAllowance.ts +20 -0
  503. package/src/execute/depositCollateral.ts +43 -0
  504. package/src/execute/index.ts +2 -0
  505. package/src/index.ts +8 -0
  506. package/src/types/ChainEnv.ts +13 -0
  507. package/src/types/OrderExecutionType.ts +8 -0
  508. package/src/types/balanceTypes.ts +47 -0
  509. package/src/types/bytes.ts +1 -0
  510. package/src/types/healthTypes.ts +17 -0
  511. package/src/types/index.ts +11 -0
  512. package/src/types/marketTypes.ts +40 -0
  513. package/src/types/nadoContractTypes.ts +14 -0
  514. package/src/types/orderAppendixTypes.ts +58 -0
  515. package/src/types/productTypes.ts +76 -0
  516. package/src/types/subaccountTypes.ts +13 -0
  517. package/src/types/viemTypes.ts +42 -0
  518. package/src/utils/asyncResult.ts +12 -0
  519. package/src/utils/balanceValue.ts +42 -0
  520. package/src/utils/bytes32.test.ts +117 -0
  521. package/src/utils/bytes32.ts +110 -0
  522. package/src/utils/createDeterministicLinkedSignerPrivateKey.ts +46 -0
  523. package/src/utils/errors/WalletNotProvidedError.ts +6 -0
  524. package/src/utils/errors/index.ts +1 -0
  525. package/src/utils/getValidatedAddress.ts +13 -0
  526. package/src/utils/getValidatedHex.ts +13 -0
  527. package/src/utils/index.ts +15 -0
  528. package/src/utils/interest.ts +133 -0
  529. package/src/utils/isWriteableContract.ts +11 -0
  530. package/src/utils/mapValues.ts +18 -0
  531. package/src/utils/math/BigDecimals.ts +8 -0
  532. package/src/utils/math/bigDecimal.ts +32 -0
  533. package/src/utils/math/clamp.ts +26 -0
  534. package/src/utils/math/decimalAdjustment.ts +65 -0
  535. package/src/utils/math/index.ts +7 -0
  536. package/src/utils/math/sumBigDecimalBy.ts +18 -0
  537. package/src/utils/math/toBigInt.ts +11 -0
  538. package/src/utils/math/toIntegerString.ts +11 -0
  539. package/src/utils/orders/appendix/appendixTWAPValue.ts +51 -0
  540. package/src/utils/orders/appendix/bitMaskValue.ts +11 -0
  541. package/src/utils/orders/appendix/index.ts +5 -0
  542. package/src/utils/orders/appendix/orderAppendix.test.ts +121 -0
  543. package/src/utils/orders/appendix/packOrderAppendix.ts +71 -0
  544. package/src/utils/orders/appendix/types.ts +17 -0
  545. package/src/utils/orders/appendix/unpackOrderAppendix.ts +90 -0
  546. package/src/utils/orders/index.ts +3 -0
  547. package/src/utils/orders/orderNonce.ts +32 -0
  548. package/src/utils/orders/recvTime.ts +9 -0
  549. package/src/utils/productTypeFilter.ts +23 -0
  550. package/src/utils/time.ts +21 -0
  551. package/src/utils/toPrintableObject.ts +25 -0
@@ -0,0 +1,40 @@
1
+ import { BigDecimal } from '../utils/math';
2
+ import {
3
+ PerpProduct,
4
+ Product,
5
+ ProductEngineType,
6
+ SpotProduct,
7
+ } from './productTypes';
8
+
9
+ /**
10
+ * Shared properties of a market
11
+ */
12
+ export interface Market {
13
+ productId: number;
14
+ type: ProductEngineType;
15
+ product: Product;
16
+ // Minimum order size to be placed on the book (i.e. not an IOC order)
17
+ minSize: BigDecimal;
18
+ // Price increment for the orderbook, order prices must be placed at multiples of this increment
19
+ priceIncrement: BigDecimal;
20
+ // Size increment for the orderbook, order sizes must be placed at multiples of this increment
21
+ sizeIncrement: BigDecimal;
22
+ }
23
+
24
+ /**
25
+ * Perp market with perp product info
26
+ */
27
+ export interface PerpMarket extends Market {
28
+ type: ProductEngineType.PERP;
29
+ product: PerpProduct;
30
+ }
31
+
32
+ /**
33
+ * Spot market with spot product info
34
+ */
35
+ export interface SpotMarket extends Market {
36
+ type: ProductEngineType.SPOT;
37
+ product: SpotProduct;
38
+ }
39
+
40
+ export type MarketWithProduct = PerpMarket | SpotMarket;
@@ -0,0 +1,14 @@
1
+ import { NadoAbis, NadoContractName } from '../abis/nadoAbis';
2
+ import { WriteableContractInstance } from './viemTypes';
3
+
4
+ /**
5
+ * Encapsulates the set of Nado contracts required for querying and executing, assumes that a wallet client is connected
6
+ */
7
+ export type NadoContracts = {
8
+ [name in NadoContractName]: WriteableContractInstance<NadoAbis[name]>;
9
+ };
10
+
11
+ // Utility types to bundle parameters with contracts
12
+ export type WithContracts<T> = T & NadoContracts;
13
+ export type WithContract<TContractName extends keyof NadoContracts, T> = T &
14
+ Pick<NadoContracts, TContractName>;
@@ -0,0 +1,58 @@
1
+ import { BigDecimalish } from '../utils/math';
2
+ import { OrderExecutionType } from './OrderExecutionType';
3
+
4
+ /**
5
+ * Encodes whether the order will be sent to the trigger service
6
+ */
7
+ export type OrderAppendixTriggerType =
8
+ | 'price'
9
+ | 'twap'
10
+ // TWAP with specified order amounts, which will be specified in the Trigger Order itself
11
+ | 'twap_custom_amounts';
12
+
13
+ /**
14
+ * Fields associated with a TWAP trigger order.
15
+ */
16
+ export interface OrderAppendixTWAPFields {
17
+ /**
18
+ * Number of TWAP orders to be placed.
19
+ */
20
+ numOrders: number;
21
+ /**
22
+ * Maximum slippage on each TWAP order, based on the oracle price at time of order execution.
23
+ * Ex: 0.01 means 1% slippage.
24
+ */
25
+ slippageFrac: number;
26
+ }
27
+
28
+ /**
29
+ * Fields associated with an isolated order
30
+ */
31
+ export interface OrderAppendixIsolatedFields {
32
+ /**
33
+ * Amount of margin to transfer into the isolated position.
34
+ */
35
+ margin: BigDecimalish;
36
+ }
37
+
38
+ /**
39
+ * All the fields encoded by the order appendix
40
+ */
41
+ export interface OrderAppendix {
42
+ reduceOnly?: boolean;
43
+ orderExecutionType: OrderExecutionType;
44
+ /**
45
+ * Specify the type of trigger that will be used for the order if the order will be sent to the trigger service.
46
+ */
47
+ triggerType?: OrderAppendixTriggerType;
48
+ /**
49
+ * Specify if the order is for an isolated position
50
+ * An order CANNOT be both a TWAP order and an isolated order.
51
+ */
52
+ isolated?: OrderAppendixIsolatedFields;
53
+ /**
54
+ * Specify if the order is a TWAP order
55
+ * An order CANNOT be both a TWAP order and an isolated order.
56
+ */
57
+ twap?: OrderAppendixTWAPFields;
58
+ }
@@ -0,0 +1,76 @@
1
+ import { BigDecimal } from '../utils/math';
2
+
3
+ /**
4
+ * Representation of the ProductEngineType enum used within the contract
5
+ * Enums do not get reflected in the ABI, so this must be manually defined
6
+ */
7
+ export enum ProductEngineType {
8
+ SPOT,
9
+ PERP,
10
+ }
11
+
12
+ /**
13
+ * Maps a raw ProductEngineType enum value to the proper type
14
+ * @param val
15
+ */
16
+ export function toProductEngineType(val: number): ProductEngineType {
17
+ switch (val) {
18
+ case 0:
19
+ return ProductEngineType.SPOT;
20
+ case 1:
21
+ return ProductEngineType.PERP;
22
+ default:
23
+ throw new Error(`Unknown product engine type: ${val}`);
24
+ }
25
+ }
26
+
27
+ /**
28
+ * Shared properties across products
29
+ */
30
+ interface BaseProduct {
31
+ type: ProductEngineType;
32
+ productId: number;
33
+ // Latest price given by oracle
34
+ oraclePrice: BigDecimal;
35
+ // Weight used to calculate initial health for a long position
36
+ longWeightInitial: BigDecimal;
37
+ // Weight used to calculate initial health for a short position
38
+ shortWeightInitial: BigDecimal;
39
+ // Weight used to calculate maint. health for a long position
40
+ longWeightMaintenance: BigDecimal;
41
+ // Weight used to calculate maint. health for a short position
42
+ shortWeightMaintenance: BigDecimal;
43
+ }
44
+
45
+ /**
46
+ * Represents a product stored in PerpEngine
47
+ */
48
+ export interface PerpProduct extends BaseProduct {
49
+ type: ProductEngineType.PERP;
50
+ // Current open interest
51
+ openInterest: BigDecimal;
52
+ cumulativeFundingLong: BigDecimal;
53
+ cumulativeFundingShort: BigDecimal;
54
+ }
55
+
56
+ /**
57
+ * Represents a product stored in SpotEngine.
58
+ *
59
+ * @see {@link calcBorrowRatePerSecond} for more details on the calculation and interest parameters
60
+ */
61
+ export interface SpotProduct extends BaseProduct {
62
+ type: ProductEngineType.SPOT;
63
+ tokenAddr: string;
64
+ interestFloor: BigDecimal;
65
+ interestInflectionUtil: BigDecimal;
66
+ interestSmallCap: BigDecimal;
67
+ interestLargeCap: BigDecimal;
68
+ minDepositRate: BigDecimal;
69
+
70
+ // Total deposited for this product
71
+ totalDeposited: BigDecimal;
72
+ // Total borrowed for this product
73
+ totalBorrowed: BigDecimal;
74
+ }
75
+
76
+ export type Product = PerpProduct | SpotProduct;
@@ -0,0 +1,13 @@
1
+ import { Bytes } from './bytes';
2
+
3
+ export type SubaccountBytes32 = Bytes;
4
+
5
+ export type SubaccountNameBytes12 = Bytes;
6
+
7
+ export interface Subaccount {
8
+ subaccountOwner: string;
9
+ /**
10
+ * If the subaccount is not a valid UTF-8 string, it will be the hex representation of the bytes
11
+ */
12
+ subaccountName: string;
13
+ }
@@ -0,0 +1,42 @@
1
+ import {
2
+ Abi,
3
+ Account,
4
+ Chain,
5
+ GetContractReturnType,
6
+ PublicClient,
7
+ RpcSchema,
8
+ Transport,
9
+ WalletClient,
10
+ } from 'viem';
11
+
12
+ /**
13
+ * An account with its corresponding private key. Viem does not allow private keys to be accessible from an account
14
+ */
15
+ export interface AccountWithPrivateKey {
16
+ account: Account;
17
+ privateKey: string;
18
+ }
19
+
20
+ /**
21
+ * A viem WalletClient that is fully initialized with a Transport, Chain, Account, and RpcSchema
22
+ */
23
+ export type WalletClientWithAccount = WalletClient<
24
+ Transport,
25
+ Chain,
26
+ Account,
27
+ RpcSchema
28
+ >;
29
+
30
+ /**
31
+ * A viem contract instance that has a connected WalletClient, thus allowing write operations
32
+ */
33
+ export type WriteableContractInstance<TAbi extends Abi = Abi> =
34
+ GetContractReturnType<TAbi, WalletClientWithAccount>;
35
+
36
+ /**
37
+ * A viem contract instance that has a connected WalletClient or PublicClient
38
+ */
39
+ export type ContractInstance<TAbi extends Abi = Abi> = GetContractReturnType<
40
+ TAbi,
41
+ WalletClient | PublicClient
42
+ >;
@@ -0,0 +1,12 @@
1
+ export type AsyncResult<TData, TError> =
2
+ | [data: undefined, error: TError]
3
+ | [data: TData, error: undefined];
4
+
5
+ export function asyncResult<TData, TError = unknown>(
6
+ promise: Promise<TData>,
7
+ ): Promise<AsyncResult<TData, TError>> {
8
+ return Promise.resolve(promise).then(
9
+ (data) => [data, undefined] as [TData, undefined],
10
+ (error) => [undefined, error] as [undefined, TError],
11
+ );
12
+ }
@@ -0,0 +1,42 @@
1
+ import {
2
+ PerpBalanceWithProduct,
3
+ SpotBalanceWithProduct,
4
+ } from '../types/balanceTypes';
5
+ import { BigDecimal } from './math';
6
+
7
+ /**
8
+ * Calculates the quote value of a spot balance, in terms of quote units
9
+ *
10
+ * @param balanceWithProduct
11
+ */
12
+ export function calcSpotBalanceValue(
13
+ balanceWithProduct: SpotBalanceWithProduct,
14
+ ): BigDecimal {
15
+ return balanceWithProduct.amount.multipliedBy(balanceWithProduct.oraclePrice);
16
+ }
17
+
18
+ /**
19
+ * Calculates the notional value of a perp balance, in terms of quote units
20
+ *
21
+ * @param balanceWithProduct
22
+ */
23
+ export function calcPerpBalanceNotionalValue(
24
+ balanceWithProduct: PerpBalanceWithProduct,
25
+ ): BigDecimal {
26
+ return balanceWithProduct.amount
27
+ .multipliedBy(balanceWithProduct.oraclePrice)
28
+ .abs();
29
+ }
30
+
31
+ /**
32
+ * Calculates the true quote value of a perp balance, which is the same as its unrealized pnl / unsettled quote, in terms of quote units
33
+ *
34
+ * @param balanceWithProduct
35
+ */
36
+ export function calcPerpBalanceValue(
37
+ balanceWithProduct: PerpBalanceWithProduct,
38
+ ): BigDecimal {
39
+ return balanceWithProduct.amount
40
+ .multipliedBy(balanceWithProduct.oraclePrice)
41
+ .plus(balanceWithProduct.vQuoteBalance);
42
+ }
@@ -0,0 +1,117 @@
1
+ import { describe, expect, it } from '@jest/globals';
2
+ import { Subaccount } from '../types/subaccountTypes';
3
+ import {
4
+ subaccountFromBytes32,
5
+ subaccountFromHex,
6
+ subaccountNameBytesToStr,
7
+ subaccountNameToBytes12,
8
+ subaccountToBytes32,
9
+ subaccountToHex,
10
+ } from './bytes32';
11
+
12
+ const TEST_ADDRESS = '0xb92EFcF519EDC2f1FE60b4491Ef51d97Ed4d7685';
13
+
14
+ describe('bytes32', () => {
15
+ it('converts a subaccount to bytes', () => {
16
+ const expectedBytes = new Uint8Array([
17
+ 185, 46, 252, 245, 25, 237, 194, 241, 254, 96, 180, 73, 30, 245, 29, 151,
18
+ 237, 77, 118, 133, 116, 101, 115, 116, 0, 0, 0, 0, 0, 0, 0, 0,
19
+ ]);
20
+ expect(
21
+ subaccountToBytes32({
22
+ subaccountName: 'test',
23
+ subaccountOwner: TEST_ADDRESS,
24
+ }),
25
+ ).toStrictEqual(expectedBytes);
26
+ });
27
+
28
+ it('converts bytes to a subaccount', () => {
29
+ const subaccountBytes = new Uint8Array([
30
+ 185, 46, 252, 245, 25, 237, 194, 241, 254, 96, 180, 73, 30, 245, 29, 151,
31
+ 237, 77, 118, 133, 116, 101, 115, 116, 0, 0, 0, 0, 0, 0, 0, 0,
32
+ ]);
33
+ const expectedSubaccount: Subaccount = {
34
+ subaccountOwner: TEST_ADDRESS,
35
+ subaccountName: 'test',
36
+ };
37
+ const convertedSubaccount = subaccountFromBytes32(subaccountBytes);
38
+
39
+ expect(convertedSubaccount.subaccountOwner.toLowerCase()).toBe(
40
+ expectedSubaccount.subaccountOwner.toLowerCase(),
41
+ );
42
+ expect(convertedSubaccount.subaccountName).toBe(
43
+ expectedSubaccount.subaccountName,
44
+ );
45
+ });
46
+
47
+ it('converts a string subaccount name to bytes', () => {
48
+ const nameBytes = subaccountNameToBytes12('test');
49
+
50
+ expect(nameBytes).toStrictEqual(
51
+ new Uint8Array([116, 101, 115, 116, 0, 0, 0, 0, 0, 0, 0, 0]),
52
+ );
53
+ });
54
+
55
+ it('converts a hex string subaccount name to bytes', () => {
56
+ // `test` in hex form
57
+ const nameBytes = subaccountNameToBytes12('0x74657374');
58
+
59
+ expect(nameBytes).toStrictEqual(
60
+ new Uint8Array([116, 101, 115, 116, 0, 0, 0, 0, 0, 0, 0, 0]),
61
+ );
62
+ });
63
+
64
+ it('converts a subaccount with a string subaccount name to a hex string', () => {
65
+ const subaccount: Subaccount = {
66
+ subaccountOwner: TEST_ADDRESS,
67
+ subaccountName: 'test',
68
+ };
69
+
70
+ expect(subaccountToHex(subaccount)).toBe(
71
+ '0xb92efcf519edc2f1fe60b4491ef51d97ed4d7685746573740000000000000000',
72
+ );
73
+ });
74
+
75
+ it('converts a subaccount with a hex subaccount name to a hex string', () => {
76
+ const subaccount: Subaccount = {
77
+ subaccountOwner: TEST_ADDRESS,
78
+ // `test` in hex form
79
+ subaccountName: '0x74657374',
80
+ };
81
+
82
+ expect(subaccountToHex(subaccount)).toBe(
83
+ '0xb92efcf519edc2f1fe60b4491ef51d97ed4d7685746573740000000000000000',
84
+ );
85
+ });
86
+
87
+ it('converts a hex string to a subaccount', () => {
88
+ const convertedSubaccount = subaccountFromHex(
89
+ '0xb92efcf519edc2f1fe60b4491ef51d97ed4d7685746573740000000000000000',
90
+ );
91
+
92
+ expect(convertedSubaccount.subaccountOwner.toLowerCase()).toBe(
93
+ TEST_ADDRESS.toLowerCase(),
94
+ );
95
+ expect(convertedSubaccount.subaccountName).toBe('test');
96
+ });
97
+
98
+ it('handles leading zero bytes in subaccount name properly', () => {
99
+ const subaccount: Subaccount = {
100
+ subaccountOwner: TEST_ADDRESS,
101
+ subaccountName: '\u0000\u0000\u0002\u0000iso\u0000',
102
+ };
103
+ const subaccountHex =
104
+ '0xb92efcf519edc2f1fe60b4491ef51d97ed4d76850000020069736f0000000000';
105
+
106
+ expect(subaccountToHex(subaccount)).toBe(subaccountHex);
107
+ // Trailing 0 bytes are trimmed
108
+ expect(subaccountFromHex(subaccountHex).subaccountName).toBe(
109
+ '\u0000\u0000\u0002\u0000iso',
110
+ );
111
+ });
112
+
113
+ it('handles converting non-utf8 byte sequences by converting bytes to a hex string', () => {
114
+ const invalidUtf8Array = new Uint8Array([0x80, 0x81, 0x82]);
115
+ expect(subaccountNameBytesToStr(invalidUtf8Array)).toBe('0x808182');
116
+ });
117
+ });
@@ -0,0 +1,110 @@
1
+ import { bytesToString, Hex, toBytes, toHex } from 'viem';
2
+ import { Bytes } from '../types/bytes';
3
+ import {
4
+ Subaccount,
5
+ SubaccountBytes32,
6
+ SubaccountNameBytes12,
7
+ } from '../types/subaccountTypes';
8
+
9
+ /**
10
+ * Converts a subaccount object (owner + name) to its bytes32 representation.
11
+ * @param subaccount subaccount object (owner + name)
12
+ * @returns bytes32 representation of a subaccount
13
+ */
14
+ export function subaccountToBytes32(subaccount: Subaccount): SubaccountBytes32 {
15
+ const address = toBytes(subaccount.subaccountOwner);
16
+
17
+ if (address.length != 20) {
18
+ throw new Error(`owner must be 20 bytes, but found ${address.length}`);
19
+ }
20
+
21
+ const nameBytes = subaccountNameToBytes12(subaccount.subaccountName);
22
+
23
+ const bytes32 = new Uint8Array(32);
24
+ for (let i = 0; i < address.length; i++) {
25
+ bytes32[i] = address[i];
26
+ }
27
+ for (let i = 0; i < nameBytes.length; i++) {
28
+ bytes32[i + 20] = nameBytes[i];
29
+ }
30
+
31
+ return bytes32;
32
+ }
33
+
34
+ /**
35
+ * Given a bytes32 representation of a subaccount, returns a subaccount object (owner + name)
36
+ * @param bytes bytes32 representaion of a subaccount where bytes[0:20]=owner & bytes[20:32]=subaccountName
37
+ * @returns subaccount object (owner + name)
38
+ */
39
+ export function subaccountFromBytes32(bytes: SubaccountBytes32): Subaccount {
40
+ if (bytes.length != 32) {
41
+ throw new Error('input must be 32 bytes');
42
+ }
43
+
44
+ const address = new Uint8Array(20);
45
+ const name = new Uint8Array(12);
46
+
47
+ for (let i = 0; i < bytes.length; i++) {
48
+ if (i < 20) {
49
+ address[i] = bytes[i];
50
+ } else {
51
+ name[i - 20] = bytes[i];
52
+ }
53
+ }
54
+
55
+ return {
56
+ subaccountOwner: toHex(address),
57
+ subaccountName: subaccountNameBytesToStr(name),
58
+ };
59
+ }
60
+
61
+ /**
62
+ * When interacting with the contracts (e.g: deposit collateral);
63
+ * subaccount name is represented as bytes12.
64
+ * This util converts a subaccount name to it's bytes12 representation.
65
+ * @param name subaccount name
66
+ * @returns bytes12 representation of a subaccount name.
67
+ */
68
+ export function subaccountNameToBytes12(name: string): SubaccountNameBytes12 {
69
+ return toBytes(name, {
70
+ size: 12,
71
+ });
72
+ }
73
+
74
+ /**
75
+ * When interacting with the engine, we need to send a hex string representation
76
+ * of the bytes32 of a subaccount for serialization reasons. This util
77
+ * converts a subaccount object (owner + name) to such hex representation.
78
+ * @param subaccount subaccount object (owner + name)
79
+ * @returns hex string representation of a subaccount
80
+ */
81
+ export function subaccountToHex(subaccount: Subaccount): Hex {
82
+ return toHex(subaccountToBytes32(subaccount));
83
+ }
84
+
85
+ /**
86
+ * Converts a hex string representation of a bytes32 subaccount to a subaccount object (owner + name)
87
+ * @param subaccount hex string representation of a bytes32 subaccount.
88
+ * @returns subaccount object (owner + name)
89
+ */
90
+ export function subaccountFromHex(subaccount: string): Subaccount {
91
+ return subaccountFromBytes32(toBytes(subaccount));
92
+ }
93
+
94
+ /**
95
+ * Converts Bytes to a string. If the bytes represent a valid UTF-8 string, then a string is returned, if not,
96
+ * then the hex representation is returned.
97
+ *
98
+ * @param input
99
+ */
100
+ export function subaccountNameBytesToStr(input: Bytes): string {
101
+ // bytesToString will replace zero bytes with \0
102
+ // strip out any trailing bytes for a readable name
103
+ // however, we need to leave any leading bytes otherwise reverse conversion to bytes will not work
104
+ const toStringResult = bytesToString(input).replace(/\0*$/, '');
105
+ // bytesToString will replace invalid byte sequences with �, so default to converting to hex string if � is present
106
+ if (toStringResult.includes('�')) {
107
+ return toHex(input);
108
+ }
109
+ return toStringResult;
110
+ }
@@ -0,0 +1,46 @@
1
+ import { keccak256 } from 'viem';
2
+ import { Subaccount } from '../types/subaccountTypes';
3
+ import { WalletClientWithAccount } from '../types/viemTypes';
4
+ import { getNadoEIP712Domain } from '../eip712/getNadoEIP712Domain';
5
+ import { subaccountToHex } from './bytes32';
6
+
7
+ interface Params extends Subaccount {
8
+ walletClient: WalletClientWithAccount;
9
+ chainId: number;
10
+ endpointAddress: string;
11
+ }
12
+
13
+ /**
14
+ * Deterministically creates a new private key from a predetermined EIP712 message. This is used to
15
+ * reliably create an authorized signer delegate for the subaccount across different clients. Used on the FE in order
16
+ * to have a consistent private key for the subaccount linked signer across different clients.
17
+ *
18
+ * @param params
19
+ */
20
+ export async function createDeterministicLinkedSignerPrivateKey(
21
+ params: Params,
22
+ ) {
23
+ const {
24
+ chainId,
25
+ endpointAddress,
26
+ walletClient,
27
+ subaccountName,
28
+ subaccountOwner,
29
+ } = params;
30
+
31
+ const signedMessage = await walletClient.signTypedData({
32
+ domain: getNadoEIP712Domain(endpointAddress, chainId),
33
+ types: {
34
+ CreateLinkedSignerWallet: [{ name: 'subaccount', type: 'bytes32' }],
35
+ },
36
+ primaryType: 'CreateLinkedSignerWallet',
37
+ message: {
38
+ subaccount: subaccountToHex({
39
+ subaccountOwner,
40
+ subaccountName,
41
+ }),
42
+ },
43
+ });
44
+
45
+ return keccak256(signedMessage);
46
+ }
@@ -0,0 +1,6 @@
1
+ export class WalletNotProvidedError extends Error {
2
+ constructor() {
3
+ super('Wallet client not provided');
4
+ this.name = 'WalletNotProvidedError';
5
+ }
6
+ }
@@ -0,0 +1 @@
1
+ export * from './WalletNotProvidedError';
@@ -0,0 +1,13 @@
1
+ import { Address, isAddress } from 'viem';
2
+
3
+ /**
4
+ * Check if the given string is a valid address. Throws an error if not.
5
+ * @param maybeAddress
6
+ */
7
+ export function getValidatedAddress(maybeAddress: string): Address {
8
+ if (!isAddress(maybeAddress)) {
9
+ throw new Error(`Invalid address: ${maybeAddress}`);
10
+ }
11
+
12
+ return maybeAddress;
13
+ }
@@ -0,0 +1,13 @@
1
+ import { Hex, isHex } from 'viem';
2
+
3
+ /**
4
+ * Check if the given string is a valid hex string. Throws an error if not.
5
+ * @param maybeHex
6
+ */
7
+ export function getValidatedHex(maybeHex: string): Hex {
8
+ if (!isHex(maybeHex)) {
9
+ throw new Error(`Invalid hex string: ${maybeHex}`);
10
+ }
11
+
12
+ return maybeHex;
13
+ }
@@ -0,0 +1,15 @@
1
+ export * from './orders';
2
+ export * from './interest';
3
+ export * from './productTypeFilter';
4
+ export * from './balanceValue';
5
+ export * from './bytes32';
6
+ export * from './createDeterministicLinkedSignerPrivateKey';
7
+ export * from './isWriteableContract';
8
+ export * from './errors';
9
+ export * from './math';
10
+ export * from './asyncResult';
11
+ export * from './getValidatedAddress';
12
+ export * from './getValidatedHex';
13
+ export * from './mapValues';
14
+ export * from './time';
15
+ export * from './toPrintableObject';