@aeternity/aepp-sdk 11.0.1 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (376) hide show
  1. package/LICENSE +1 -1
  2. package/dist/aepp-sdk.browser-script.js +1 -1
  3. package/dist/aepp-sdk.browser-script.js.LICENSE.txt +12 -19
  4. package/dist/aepp-sdk.browser-script.js.map +1 -1
  5. package/dist/aepp-sdk.browser.js +1 -1
  6. package/dist/aepp-sdk.browser.js.map +1 -1
  7. package/dist/aepp-sdk.js +1 -1
  8. package/dist/aepp-sdk.js.map +1 -1
  9. package/es/AeSdk.d.ts +37 -0
  10. package/es/AeSdk.mjs +81 -0
  11. package/es/AeSdk.mjs.map +1 -0
  12. package/es/AeSdkAepp.d.ts +69 -0
  13. package/es/AeSdkAepp.mjs +175 -0
  14. package/es/AeSdkAepp.mjs.map +1 -0
  15. package/es/AeSdkBase.d.ts +212 -0
  16. package/es/AeSdkBase.mjs +310 -0
  17. package/es/AeSdkBase.mjs.map +1 -0
  18. package/es/AeSdkWallet.d.ts +103 -0
  19. package/es/AeSdkWallet.mjs +322 -0
  20. package/es/AeSdkWallet.mjs.map +1 -0
  21. package/es/Node.d.ts +44 -0
  22. package/es/Node.mjs +141 -0
  23. package/es/Node.mjs.map +1 -0
  24. package/es/account/Base.d.ts +65 -0
  25. package/es/account/Base.mjs +123 -0
  26. package/es/account/Base.mjs.map +1 -0
  27. package/es/account/Memory.d.ts +25 -0
  28. package/es/account/Memory.mjs +81 -0
  29. package/es/account/Memory.mjs.map +1 -0
  30. package/es/account/Rpc.d.ts +27 -0
  31. package/es/account/Rpc.mjs +79 -0
  32. package/es/account/Rpc.mjs.map +1 -0
  33. package/es/aens.d.ts +209 -0
  34. package/es/aens.mjs +332 -0
  35. package/es/aens.mjs.map +1 -0
  36. package/es/aepp-wallet-communication/connection/Browser.d.ts +32 -0
  37. package/es/aepp-wallet-communication/connection/Browser.mjs +70 -0
  38. package/es/aepp-wallet-communication/connection/Browser.mjs.map +1 -0
  39. package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +17 -0
  40. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +57 -0
  41. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -0
  42. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.d.ts +35 -0
  43. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs +142 -0
  44. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs.map +1 -0
  45. package/es/aepp-wallet-communication/connection-proxy.d.ts +10 -0
  46. package/{src/utils/crypto-ts.ts → es/aepp-wallet-communication/connection-proxy.mjs} +15 -11
  47. package/es/aepp-wallet-communication/connection-proxy.mjs.map +1 -0
  48. package/es/aepp-wallet-communication/rpc/RpcClient.d.ts +33 -0
  49. package/es/aepp-wallet-communication/rpc/RpcClient.mjs +169 -0
  50. package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -0
  51. package/es/aepp-wallet-communication/rpc/types.d.ts +77 -0
  52. package/es/aepp-wallet-communication/rpc/types.mjs +3 -0
  53. package/es/aepp-wallet-communication/rpc/types.mjs.map +1 -0
  54. package/es/aepp-wallet-communication/schema.d.ts +90 -46
  55. package/es/aepp-wallet-communication/schema.mjs +214 -0
  56. package/es/aepp-wallet-communication/schema.mjs.map +1 -0
  57. package/es/aepp-wallet-communication/wallet-detector.d.ts +24 -0
  58. package/es/aepp-wallet-communication/wallet-detector.mjs +63 -0
  59. package/es/aepp-wallet-communication/wallet-detector.mjs.map +1 -0
  60. package/es/apis/compiler/compiler.d.ts +92 -0
  61. package/es/apis/compiler/compiler.mjs +576 -0
  62. package/es/apis/compiler/compiler.mjs.map +1 -0
  63. package/es/apis/compiler/index.d.ts +2 -0
  64. package/es/apis/compiler/index.mjs +3 -0
  65. package/es/apis/compiler/index.mjs.map +1 -0
  66. package/es/apis/compiler/models/index.d.ts +248 -0
  67. package/es/apis/compiler/models/index.mjs +48 -0
  68. package/es/apis/compiler/models/index.mjs.map +1 -0
  69. package/es/apis/compiler/models/mappers.d.ts +23 -0
  70. package/es/apis/compiler/models/mappers.mjs +585 -0
  71. package/es/apis/compiler/models/mappers.mjs.map +1 -0
  72. package/es/apis/compiler/models/parameters.d.ts +13 -0
  73. package/es/apis/compiler/models/parameters.mjs +71 -0
  74. package/es/apis/compiler/models/parameters.mjs.map +1 -0
  75. package/es/apis/node/index.d.ts +2 -0
  76. package/es/apis/node/index.mjs +3 -0
  77. package/es/apis/node/index.mjs.map +1 -0
  78. package/es/apis/node/models/index.d.ts +1061 -0
  79. package/es/apis/node/models/index.mjs +2 -0
  80. package/es/apis/node/models/index.mjs.map +1 -0
  81. package/es/apis/node/models/mappers.d.ts +95 -0
  82. package/es/apis/node/models/mappers.mjs +4164 -0
  83. package/es/apis/node/models/mappers.mjs.map +1 -0
  84. package/es/apis/node/models/parameters.d.ts +17 -0
  85. package/es/apis/node/models/parameters.mjs +165 -0
  86. package/es/apis/node/models/parameters.mjs.map +1 -0
  87. package/es/apis/node/node.d.ts +215 -0
  88. package/es/apis/node/node.mjs +1165 -0
  89. package/es/apis/node/node.mjs.map +1 -0
  90. package/es/chain.d.ts +220 -0
  91. package/es/chain.mjs +524 -0
  92. package/es/chain.mjs.map +1 -0
  93. package/es/channel/handlers.d.ts +34 -0
  94. package/es/channel/handlers.mjs +147 -112
  95. package/es/channel/handlers.mjs.map +1 -1
  96. package/es/channel/index.d.ts +634 -0
  97. package/es/channel/index.mjs +898 -900
  98. package/es/channel/index.mjs.map +1 -1
  99. package/es/channel/internal.d.ts +100 -0
  100. package/es/channel/internal.mjs +97 -51
  101. package/es/channel/internal.mjs.map +1 -1
  102. package/es/contract/Compiler.d.ts +17 -0
  103. package/es/contract/Compiler.mjs +67 -0
  104. package/es/contract/Compiler.mjs.map +1 -0
  105. package/es/contract/aci.d.ts +125 -0
  106. package/es/contract/aci.mjs +199 -180
  107. package/es/contract/aci.mjs.map +1 -1
  108. package/es/contract/ga.d.ts +68 -0
  109. package/es/contract/ga.mjs +190 -0
  110. package/es/contract/ga.mjs.map +1 -0
  111. package/es/contract/methods.d.ts +68 -0
  112. package/es/contract/methods.mjs +101 -0
  113. package/es/contract/methods.mjs.map +1 -0
  114. package/es/index.d.ts +32 -0
  115. package/es/index.mjs +32 -40
  116. package/es/index.mjs.map +1 -1
  117. package/es/oracle.d.ts +154 -0
  118. package/es/oracle.mjs +288 -0
  119. package/es/oracle.mjs.map +1 -0
  120. package/es/spend.d.ts +61 -0
  121. package/es/spend.mjs +122 -0
  122. package/es/spend.mjs.map +1 -0
  123. package/es/tx/builder/constants.d.ts +41 -0
  124. package/es/tx/builder/constants.mjs +11 -19
  125. package/es/tx/builder/constants.mjs.map +1 -1
  126. package/es/tx/builder/field-types.d.ts +62 -0
  127. package/es/tx/builder/field-types.mjs +62 -10
  128. package/es/tx/builder/field-types.mjs.map +1 -1
  129. package/es/tx/builder/helpers.d.ts +131 -0
  130. package/es/tx/builder/helpers.mjs +71 -169
  131. package/es/tx/builder/helpers.mjs.map +1 -1
  132. package/es/tx/builder/index.d.ts +75 -0
  133. package/es/tx/builder/index.mjs +141 -323
  134. package/es/tx/builder/index.mjs.map +1 -1
  135. package/es/tx/builder/schema.d.ts +350 -0
  136. package/es/tx/builder/schema.mjs +173 -510
  137. package/es/tx/builder/schema.mjs.map +1 -1
  138. package/es/tx/index.d.ts +63 -0
  139. package/es/tx/index.mjs +171 -265
  140. package/es/tx/index.mjs.map +1 -1
  141. package/es/tx/min-fee.d.ts +20 -0
  142. package/es/tx/min-fee.mjs +148 -0
  143. package/es/tx/min-fee.mjs.map +1 -0
  144. package/es/tx/validator.d.ts +19 -0
  145. package/es/tx/validator.mjs +64 -71
  146. package/es/tx/validator.mjs.map +1 -1
  147. package/es/typings/@aeternity__argon2-browser/index.d.mjs +2 -0
  148. package/es/typings/@aeternity__argon2-browser/index.d.mjs.map +1 -0
  149. package/es/typings/@aeternity__uuid/index.d.mjs +2 -0
  150. package/es/typings/@aeternity__uuid/index.d.mjs.map +1 -0
  151. package/es/typings/bip32-path/index.d.mjs +2 -0
  152. package/es/typings/bip32-path/index.d.mjs.map +1 -0
  153. package/es/typings/blakejs/index.d.mjs.map +1 -1
  154. package/es/typings/tweetnacl-auth/index.d.mjs +2 -0
  155. package/es/typings/tweetnacl-auth/index.d.mjs.map +1 -0
  156. package/es/utils/amount-formatter.d.ts +42 -0
  157. package/es/utils/amount-formatter.mjs +28 -41
  158. package/es/utils/amount-formatter.mjs.map +1 -1
  159. package/es/utils/autorest.d.ts +6 -0
  160. package/es/utils/autorest.mjs +97 -0
  161. package/es/utils/autorest.mjs.map +1 -0
  162. package/es/utils/bignumber.d.ts +13 -0
  163. package/es/utils/bignumber.mjs +10 -8
  164. package/es/utils/bignumber.mjs.map +1 -1
  165. package/es/{bytes.d.ts → utils/bytes.d.ts} +10 -13
  166. package/es/utils/bytes.mjs +10 -14
  167. package/es/utils/bytes.mjs.map +1 -1
  168. package/es/utils/crypto.d.ts +103 -0
  169. package/es/utils/crypto.mjs +60 -68
  170. package/es/utils/crypto.mjs.map +1 -1
  171. package/es/utils/encoder.d.ts +26 -0
  172. package/es/utils/encoder.mjs +47 -51
  173. package/es/utils/encoder.mjs.map +1 -1
  174. package/es/{errors.d.ts → utils/errors.d.ts} +254 -57
  175. package/es/utils/errors.mjs +318 -125
  176. package/es/utils/errors.mjs.map +1 -1
  177. package/es/utils/hd-wallet.d.ts +34 -0
  178. package/es/utils/hd-wallet.mjs +27 -16
  179. package/es/utils/hd-wallet.mjs.map +1 -1
  180. package/es/utils/json-big.d.ts +5 -0
  181. package/es/utils/json-big.mjs +10 -14
  182. package/es/utils/json-big.mjs.map +1 -1
  183. package/es/utils/keystore.d.ts +51 -0
  184. package/es/utils/keystore.mjs +98 -193
  185. package/es/utils/keystore.mjs.map +1 -1
  186. package/es/{mptree.d.ts → utils/mptree.d.ts} +5 -8
  187. package/es/utils/mptree.mjs +13 -14
  188. package/es/utils/mptree.mjs.map +1 -1
  189. package/es/utils/other.d.ts +14 -0
  190. package/es/utils/other.mjs +21 -36
  191. package/es/utils/other.mjs.map +1 -1
  192. package/es/{semver-satisfies.d.ts → utils/semver-satisfies.d.ts} +0 -0
  193. package/es/utils/semver-satisfies.mjs.map +1 -1
  194. package/es/utils/string.d.ts +24 -0
  195. package/es/utils/string.mjs +8 -10
  196. package/es/utils/string.mjs.map +1 -1
  197. package/package.json +49 -39
  198. package/src/AeSdk.ts +65 -0
  199. package/src/AeSdkAepp.ts +167 -0
  200. package/src/AeSdkBase.ts +320 -0
  201. package/src/AeSdkWallet.ts +332 -0
  202. package/src/Node.ts +167 -0
  203. package/src/account/Base.ts +114 -0
  204. package/src/account/Memory.ts +83 -0
  205. package/src/account/Rpc.ts +67 -0
  206. package/src/aens.ts +391 -0
  207. package/src/aepp-wallet-communication/connection/Browser.ts +68 -0
  208. package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +58 -0
  209. package/src/aepp-wallet-communication/connection/BrowserWindowMessage.ts +111 -0
  210. package/{es/utils/crypto-ts.mjs → src/aepp-wallet-communication/connection-proxy.ts} +16 -17
  211. package/src/aepp-wallet-communication/rpc/RpcClient.ts +137 -0
  212. package/src/aepp-wallet-communication/rpc/types.ts +66 -0
  213. package/src/aepp-wallet-communication/schema.ts +181 -0
  214. package/src/aepp-wallet-communication/wallet-detector.ts +71 -0
  215. package/src/apis/compiler/code-model-v4.yaml +2649 -0
  216. package/src/apis/compiler/compiler.ts +585 -0
  217. package/src/apis/compiler/index.ts +2 -0
  218. package/src/apis/compiler/models/index.ts +301 -0
  219. package/src/apis/compiler/models/mappers.ts +583 -0
  220. package/src/apis/compiler/models/parameters.ts +93 -0
  221. package/src/apis/node/code-model-v4.yaml +10046 -0
  222. package/src/apis/node/index.ts +2 -0
  223. package/src/apis/node/models/index.ts +1253 -0
  224. package/src/apis/node/models/mappers.ts +4278 -0
  225. package/src/apis/node/models/parameters.ts +188 -0
  226. package/src/apis/node/node.ts +1299 -0
  227. package/src/chain.ts +444 -0
  228. package/src/channel/{handlers.js → handlers.ts} +220 -128
  229. package/src/channel/index.ts +991 -0
  230. package/src/channel/internal.ts +345 -0
  231. package/src/contract/Compiler.ts +66 -0
  232. package/src/contract/aci.ts +529 -0
  233. package/src/contract/ga.ts +178 -0
  234. package/src/contract/methods.ts +118 -0
  235. package/src/index.ts +51 -0
  236. package/src/oracle.ts +342 -0
  237. package/src/spend.ts +152 -0
  238. package/src/tx/builder/{constants.js → constants.ts} +12 -16
  239. package/src/tx/builder/field-types.ts +111 -0
  240. package/src/tx/builder/helpers.ts +253 -0
  241. package/src/tx/builder/index.ts +394 -0
  242. package/src/tx/builder/schema.ts +771 -0
  243. package/src/tx/index.ts +199 -0
  244. package/src/tx/min-fee.ts +136 -0
  245. package/src/tx/validator.ts +226 -0
  246. package/src/typings/@aeternity__argon2-browser/index.d.ts +3 -0
  247. package/src/typings/@aeternity__uuid/index.d.ts +3 -0
  248. package/src/typings/bip32-path/index.d.ts +33 -0
  249. package/src/typings/tweetnacl-auth/index.d.ts +14 -0
  250. package/src/utils/amount-formatter.ts +29 -42
  251. package/src/utils/autorest.ts +90 -0
  252. package/src/utils/bignumber.ts +9 -11
  253. package/src/utils/bytes.ts +12 -14
  254. package/src/utils/crypto.ts +217 -0
  255. package/src/utils/encoder.ts +52 -55
  256. package/src/utils/errors.ts +268 -134
  257. package/src/utils/hd-wallet.ts +134 -0
  258. package/src/utils/json-big.ts +26 -0
  259. package/src/utils/keystore.ts +179 -0
  260. package/src/utils/mptree.ts +14 -14
  261. package/src/utils/other.ts +28 -43
  262. package/src/utils/string.ts +8 -10
  263. package/es/account/base.mjs +0 -179
  264. package/es/account/base.mjs.map +0 -1
  265. package/es/account/memory.mjs +0 -99
  266. package/es/account/memory.mjs.map +0 -1
  267. package/es/account/multiple.mjs +0 -179
  268. package/es/account/multiple.mjs.map +0 -1
  269. package/es/ae/aens.mjs +0 -404
  270. package/es/ae/aens.mjs.map +0 -1
  271. package/es/ae/aepp.mjs +0 -45
  272. package/es/ae/aepp.mjs.map +0 -1
  273. package/es/ae/contract.mjs +0 -159
  274. package/es/ae/contract.mjs.map +0 -1
  275. package/es/ae/index.mjs +0 -207
  276. package/es/ae/index.mjs.map +0 -1
  277. package/es/ae/oracle.mjs +0 -339
  278. package/es/ae/oracle.mjs.map +0 -1
  279. package/es/ae/universal.mjs +0 -45
  280. package/es/ae/universal.mjs.map +0 -1
  281. package/es/ae/wallet.mjs +0 -50
  282. package/es/ae/wallet.mjs.map +0 -1
  283. package/es/amount-formatter.d.ts +0 -58
  284. package/es/bignumber.d.ts +0 -18
  285. package/es/chain/index.mjs +0 -272
  286. package/es/chain/index.mjs.map +0 -1
  287. package/es/chain/node.mjs +0 -442
  288. package/es/chain/node.mjs.map +0 -1
  289. package/es/contract/compiler.mjs +0 -115
  290. package/es/contract/compiler.mjs.map +0 -1
  291. package/es/contract/ga/helpers.mjs +0 -30
  292. package/es/contract/ga/helpers.mjs.map +0 -1
  293. package/es/contract/ga/index.mjs +0 -178
  294. package/es/contract/ga/index.mjs.map +0 -1
  295. package/es/crypto-ts.d.ts +0 -9
  296. package/es/encoder.d.ts +0 -26
  297. package/es/node-pool/index.mjs +0 -188
  298. package/es/node-pool/index.mjs.map +0 -1
  299. package/es/node.mjs +0 -133
  300. package/es/node.mjs.map +0 -1
  301. package/es/other.d.ts +0 -31
  302. package/es/string.d.ts +0 -26
  303. package/es/tx/tx-object.mjs +0 -283
  304. package/es/tx/tx-object.mjs.map +0 -1
  305. package/es/tx/tx.mjs +0 -938
  306. package/es/tx/tx.mjs.map +0 -1
  307. package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs +0 -132
  308. package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs.map +0 -1
  309. package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs +0 -183
  310. package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs.map +0 -1
  311. package/es/utils/aepp-wallet-communication/connection/index.mjs +0 -87
  312. package/es/utils/aepp-wallet-communication/connection/index.mjs.map +0 -1
  313. package/es/utils/aepp-wallet-communication/content-script-bridge.mjs +0 -98
  314. package/es/utils/aepp-wallet-communication/content-script-bridge.mjs.map +0 -1
  315. package/es/utils/aepp-wallet-communication/helpers.mjs +0 -92
  316. package/es/utils/aepp-wallet-communication/helpers.mjs.map +0 -1
  317. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs +0 -375
  318. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs.map +0 -1
  319. package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs +0 -275
  320. package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs.map +0 -1
  321. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs +0 -541
  322. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs.map +0 -1
  323. package/es/utils/aepp-wallet-communication/schema.mjs +0 -102
  324. package/es/utils/aepp-wallet-communication/schema.mjs.map +0 -1
  325. package/es/utils/aepp-wallet-communication/wallet-detector.mjs +0 -110
  326. package/es/utils/aepp-wallet-communication/wallet-detector.mjs.map +0 -1
  327. package/es/utils/async-init.mjs +0 -64
  328. package/es/utils/async-init.mjs.map +0 -1
  329. package/es/utils/crypto-ts.mjs.map +0 -1
  330. package/es/utils/swagger.mjs +0 -164
  331. package/es/utils/swagger.mjs.map +0 -1
  332. package/src/account/base.js +0 -153
  333. package/src/account/memory.js +0 -83
  334. package/src/account/multiple.js +0 -162
  335. package/src/ae/aens.js +0 -361
  336. package/src/ae/aepp.js +0 -45
  337. package/src/ae/contract.js +0 -148
  338. package/src/ae/index.js +0 -168
  339. package/src/ae/oracle.js +0 -311
  340. package/src/ae/universal.js +0 -47
  341. package/src/ae/wallet.js +0 -50
  342. package/src/chain/index.js +0 -269
  343. package/src/chain/node.js +0 -320
  344. package/src/channel/index.js +0 -903
  345. package/src/channel/internal.js +0 -236
  346. package/src/contract/aci.js +0 -376
  347. package/src/contract/compiler.js +0 -100
  348. package/src/contract/ga/helpers.js +0 -19
  349. package/src/contract/ga/index.js +0 -150
  350. package/src/index.js +0 -89
  351. package/src/node-pool/index.js +0 -172
  352. package/src/node.js +0 -116
  353. package/src/tx/builder/field-types.js +0 -61
  354. package/src/tx/builder/helpers.js +0 -334
  355. package/src/tx/builder/index.js +0 -465
  356. package/src/tx/builder/schema.js +0 -1100
  357. package/src/tx/index.js +0 -301
  358. package/src/tx/tx-object.js +0 -187
  359. package/src/tx/tx.js +0 -631
  360. package/src/tx/validator.js +0 -181
  361. package/src/utils/aepp-wallet-communication/connection/browser-runtime.js +0 -119
  362. package/src/utils/aepp-wallet-communication/connection/browser-window-message.js +0 -165
  363. package/src/utils/aepp-wallet-communication/connection/index.js +0 -85
  364. package/src/utils/aepp-wallet-communication/content-script-bridge.js +0 -86
  365. package/src/utils/aepp-wallet-communication/helpers.js +0 -60
  366. package/src/utils/aepp-wallet-communication/rpc/aepp-rpc.js +0 -294
  367. package/src/utils/aepp-wallet-communication/rpc/rpc-client.js +0 -232
  368. package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +0 -401
  369. package/src/utils/aepp-wallet-communication/schema.ts +0 -80
  370. package/src/utils/aepp-wallet-communication/wallet-detector.js +0 -92
  371. package/src/utils/async-init.js +0 -45
  372. package/src/utils/crypto.js +0 -219
  373. package/src/utils/hd-wallet.js +0 -100
  374. package/src/utils/json-big.js +0 -26
  375. package/src/utils/keystore.js +0 -219
  376. package/src/utils/swagger.js +0 -156
@@ -0,0 +1,394 @@
1
+ import { EncodedData, EncodingType } from './../../utils/encoder'
2
+ import BigNumber from 'bignumber.js'
3
+ import { decode as rlpDecode, encode as rlpEncode, NestedUint8Array } from 'rlp'
4
+ import { AE_AMOUNT_FORMATS, formatAmount } from '../../utils/amount-formatter'
5
+ import { hash } from '../../utils/crypto'
6
+ import { Field } from './field-types'
7
+
8
+ import {
9
+ FIELD_TYPES,
10
+ RawTxObject,
11
+ TxField,
12
+ TxTypeSchemas,
13
+ TxParamsCommon,
14
+ TX_SCHEMA,
15
+ TX_TYPE,
16
+ TxSchema
17
+ } from './schema'
18
+ import {
19
+ readInt,
20
+ readId,
21
+ readPointers,
22
+ writeId,
23
+ writeInt,
24
+ buildPointers,
25
+ encode,
26
+ decode,
27
+ Pointer,
28
+ buildContractId
29
+ } from './helpers'
30
+ import { toBytes } from '../../utils/bytes'
31
+ import MPTree, { MPTreeBinary } from '../../utils/mptree'
32
+ import { ArgumentError, InvalidTxParamsError, SchemaNotFoundError, DecodeError } from '../../utils/errors'
33
+ import { isKeyOfObject } from '../../utils/other'
34
+
35
+ /**
36
+ * JavaScript-based Transaction builder
37
+ */
38
+
39
+ // SERIALIZE AND DESERIALIZE PART
40
+ function deserializeField (
41
+ value: any,
42
+ type: FIELD_TYPES | typeof Field,
43
+ prefix?: EncodingType | EncodingType[]
44
+ ): any {
45
+ if (value == null) return ''
46
+ switch (type) {
47
+ case FIELD_TYPES.ctVersion: {
48
+ const [vm, , abi] = value
49
+ return {
50
+ vmVersion: readInt(Buffer.from([vm])),
51
+ abiVersion: readInt(Buffer.from([abi]))
52
+ }
53
+ }
54
+ case FIELD_TYPES.amount:
55
+ case FIELD_TYPES.int:
56
+ case FIELD_TYPES.abiVersion:
57
+ case FIELD_TYPES.ttlType:
58
+ return readInt(value)
59
+ case FIELD_TYPES.shortInt:
60
+ return +readInt(value)
61
+ case FIELD_TYPES.id:
62
+ return readId(value)
63
+ case FIELD_TYPES.ids:
64
+ return value.map(readId)
65
+ case FIELD_TYPES.bool:
66
+ return value[0] === 1
67
+ case FIELD_TYPES.binary:
68
+ return encode(value, prefix as EncodingType)
69
+ case FIELD_TYPES.stateTree:
70
+ return encode(value, 'ss')
71
+ case FIELD_TYPES.string:
72
+ return value.toString()
73
+ case FIELD_TYPES.payload:
74
+ return encode(value, 'ba')
75
+ case FIELD_TYPES.pointers:
76
+ return readPointers(value)
77
+ case FIELD_TYPES.rlpBinary:
78
+ return unpackTx(encode(value, 'tx'))
79
+ case FIELD_TYPES.rlpBinaries:
80
+ return value.map((v: Buffer) => unpackTx(encode(v, 'tx')))
81
+ case FIELD_TYPES.rawBinary:
82
+ return value
83
+ case FIELD_TYPES.hex:
84
+ return value.toString('hex')
85
+ case FIELD_TYPES.offChainUpdates:
86
+ return value.map((v: Buffer) => unpackTx(encode(v, 'tx')))
87
+ case FIELD_TYPES.callStack:
88
+ // TODO: fix this
89
+ return [readInt(value)]
90
+ case FIELD_TYPES.mptrees:
91
+ return value.map((t: MPTreeBinary) => new MPTree(t))
92
+ case FIELD_TYPES.callReturnType:
93
+ switch (readInt(value)) {
94
+ case '0':
95
+ return 'ok'
96
+ case '1':
97
+ return 'error'
98
+ case '2':
99
+ return 'revert'
100
+ default:
101
+ return value
102
+ }
103
+ case FIELD_TYPES.sophiaCodeTypeInfo:
104
+ return value.reduce(
105
+ (acc: object, [funHash, fnName, argType, outType]: [
106
+ funHash: Buffer,
107
+ fnName: string,
108
+ argType: string,
109
+ outType: string
110
+ ]) => ({
111
+ ...acc,
112
+ [fnName.toString()]: { funHash, argType, outType }
113
+ }),
114
+ {}
115
+ )
116
+ default:
117
+ if (type instanceof Object && 'deserialize' in type) return type.deserialize(value)
118
+ return value
119
+ }
120
+ }
121
+
122
+ function serializeField (
123
+ value: any, type: FIELD_TYPES | typeof Field, params: any
124
+ ): any {
125
+ switch (type) {
126
+ case FIELD_TYPES.amount:
127
+ case FIELD_TYPES.int:
128
+ case FIELD_TYPES.shortInt:
129
+ case FIELD_TYPES.abiVersion:
130
+ case FIELD_TYPES.ttlType:
131
+ return writeInt(value)
132
+ case FIELD_TYPES.id:
133
+ return writeId(value)
134
+ case FIELD_TYPES.ids:
135
+ return value.map(writeId)
136
+ case FIELD_TYPES.bool:
137
+ return Buffer.from([(value === true) ? 1 : 0])
138
+ case FIELD_TYPES.binary:
139
+ return decode(value)
140
+ case FIELD_TYPES.stateTree:
141
+ return decode(value)
142
+ case FIELD_TYPES.hex:
143
+ return Buffer.from(value, 'hex')
144
+ case FIELD_TYPES.signatures:
145
+ return value.map(Buffer.from)
146
+ case FIELD_TYPES.payload:
147
+ return typeof value === 'string' && value.split('_')[0] === 'ba'
148
+ ? decode(value as EncodedData<'ba'>)
149
+ : toBytes(value)
150
+ case FIELD_TYPES.string:
151
+ return toBytes(value)
152
+ case FIELD_TYPES.pointers:
153
+ return buildPointers(value)
154
+ case FIELD_TYPES.rlpBinary:
155
+ return value.rlpEncoded ?? value
156
+ case FIELD_TYPES.mptrees:
157
+ return value.map((t: typeof Field) => t.serialize(''))
158
+ case FIELD_TYPES.ctVersion:
159
+ return Buffer.from([...toBytes(value.vmVersion), 0, ...toBytes(value.abiVersion)])
160
+ case FIELD_TYPES.callReturnType:
161
+ switch (value) {
162
+ case 'ok': return writeInt(0)
163
+ case 'error': return writeInt(1)
164
+ case 'revert': return writeInt(2)
165
+ default: return value
166
+ }
167
+ default:
168
+ if (type instanceof Object && 'serialize' in type) return type.serialize(value, params)
169
+ return value
170
+ }
171
+ }
172
+
173
+ function validateField (
174
+ value: any,
175
+ type: FIELD_TYPES | typeof Field,
176
+ prefix?: EncodingType | EncodingType[]
177
+ ): string | undefined {
178
+ // All fields are required
179
+ if (value == null) return 'Field is required'
180
+
181
+ // Validate type of value
182
+ switch (type) {
183
+ case FIELD_TYPES.amount:
184
+ case FIELD_TYPES.int:
185
+ case FIELD_TYPES.shortInt: {
186
+ if (isNaN(value) && !BigNumber.isBigNumber(value)) {
187
+ return `${String(value)} is not of type Number or BigNumber`
188
+ }
189
+ if (new BigNumber(value).lt(0)) return `${String(value)} must be >= 0`
190
+ return
191
+ }
192
+ case FIELD_TYPES.id: {
193
+ const prefixes = Array.isArray(prefix) ? prefix : [prefix]
194
+ if (!prefixes.includes(value.split('_')[0])) {
195
+ if (prefix == null) { return `'${String(value)}' prefix doesn't exist'` }
196
+ return `'${String(value)}' prefix doesn't match expected prefix '${prefix.toString()}'`
197
+ }
198
+ return
199
+ }
200
+ case FIELD_TYPES.ctVersion:
201
+ if (!(Boolean(value.abiVersion) && Boolean(value.vmVersion))) {
202
+ return 'Value must be an object with "vmVersion" and "abiVersion" fields'
203
+ }
204
+ return
205
+ case FIELD_TYPES.pointers:
206
+ if (!Array.isArray(value)) return 'Value must be of type Array'
207
+ if (value.some((p: Pointer) => !(Boolean(p.key) && Boolean(p.id)))) {
208
+ return 'Value must contains only object\'s like \'{key: "account_pubkey", id: "ak_lkamsflkalsdalksdlasdlasdlamd"}\''
209
+ }
210
+ if (value.length > 32) {
211
+ return `Expected 32 pointers or less, got ${value.length} instead`
212
+ }
213
+ }
214
+ }
215
+
216
+ function transformParams (
217
+ params: TxParamsCommon,
218
+ schema: TxField[],
219
+ { denomination }: {denomination?: AE_AMOUNT_FORMATS} = {}
220
+ ): any {
221
+ params = schema
222
+ .filter(([, t]) => t === FIELD_TYPES.amount)
223
+ .reduce(
224
+ (params: TxParamsCommon, [key]) => ({
225
+ ...params,
226
+ [key]: formatAmount(params[key as keyof TxParamsCommon], { denomination })
227
+ }),
228
+ params
229
+ )
230
+ return params
231
+ }
232
+
233
+ /**
234
+ * Validate transaction params
235
+ * @param params - Object with tx params
236
+ * @param schema - Transaction schema
237
+ * @param excludeKeys - Array of keys to exclude for validation
238
+ * @returns Object with validation errors
239
+ */
240
+ export function validateParams (
241
+ params: any, schema: TxField[], { excludeKeys = [] }: { excludeKeys: string[] }
242
+ ): object {
243
+ return Object.fromEntries(
244
+ schema
245
+ // TODO: allow optional keys in schema
246
+ .filter(([key]) => !excludeKeys.includes(key) &&
247
+ !['payload', 'nameFee', 'deposit', 'gasPrice'].includes(key))
248
+ .map(([key, type, prefix]) => [key, validateField(params[key], type, prefix)])
249
+ .filter(([, message]) => message)
250
+ )
251
+ }
252
+
253
+ /**
254
+ * Unpack binary transaction
255
+ * @param binary - Array with binary transaction field's
256
+ * @param schema - Transaction schema
257
+ * @returns Object with transaction field's
258
+ */
259
+ export function unpackRawTx<Tx extends TxSchema> (
260
+ binary: Uint8Array | NestedUint8Array,
261
+ schema: TxField[]
262
+ ): RawTxObject<Tx> {
263
+ return schema
264
+ .reduce<any>(
265
+ (
266
+ acc,
267
+ [key, fieldType, prefix],
268
+ index
269
+ ) => Object.assign(acc, { [key]: deserializeField(binary[index], fieldType, prefix) }),
270
+ {}
271
+ )
272
+ }
273
+
274
+ export interface BuiltTx<Tx extends TxSchema, Prefix extends EncodingType> {
275
+ tx: EncodedData<Prefix>
276
+ rlpEncoded: Uint8Array
277
+ binary: Uint8Array
278
+ txObject: RawTxObject<Tx>
279
+ }
280
+
281
+ /**
282
+ * Build transaction hash
283
+ * @param _params - Object with tx params
284
+ * @param type - Transaction type
285
+ * @param options - options
286
+ * @param options.excludeKeys - Array of keys to exclude for validation and build
287
+ * @param options.denomination - Denomination of amounts
288
+ * @param options.prefix - Prefix of transaction
289
+ * @throws {@link InvalidTxParamsError}
290
+ * @returns object
291
+ * @returns object.tx Base64Check transaction hash with 'tx_' prefix
292
+ * @returns object.rlpEncoded rlp encoded transaction
293
+ * @returns object.binary binary transaction
294
+ */
295
+ export function buildTx<TxType extends TX_TYPE, Prefix> (
296
+ _params: Omit<TxTypeSchemas[TxType], 'tag' | 'VSN'> & { VSN?: number },
297
+ type: TxType,
298
+ { excludeKeys = [], prefix = 'tx', vsn, denomination = AE_AMOUNT_FORMATS.AETTOS }: {
299
+ excludeKeys?: string[]
300
+ prefix?: EncodingType
301
+ vsn?: number
302
+ denomination?: AE_AMOUNT_FORMATS
303
+ } = {}
304
+ ): BuiltTx<TxSchema, Prefix extends EncodingType ? Prefix : 'tx'> {
305
+ const schemas = TX_SCHEMA[type]
306
+
307
+ vsn ??= Math.max(...Object.keys(schemas).map(a => +a))
308
+ if (!isKeyOfObject(vsn, schemas)) throw new SchemaNotFoundError('serialization', TX_TYPE[type], vsn)
309
+
310
+ const schema = schemas[vsn] as unknown as TxField[]
311
+
312
+ let params = _params as TxParamsCommon & { onNode: Node }
313
+ params.VSN = vsn
314
+ params.tag = type
315
+ const filteredSchema = schema.filter(([key]) => !excludeKeys.includes(key))
316
+
317
+ // Transform `amount` type fields to `aettos`
318
+ params = transformParams(params, filteredSchema, { denomination })
319
+ // Validation
320
+ const valid = validateParams(params, schema, { excludeKeys })
321
+ if (Object.keys(valid).length > 0) {
322
+ throw new InvalidTxParamsError('Transaction build error. ' + JSON.stringify(valid))
323
+ }
324
+
325
+ const binary = filteredSchema
326
+ .map(([key, fieldType]: [keyof TxSchema, FIELD_TYPES, EncodingType]) => serializeField(
327
+ params[key], fieldType, params))
328
+ .filter(e => e !== undefined)
329
+
330
+ const rlpEncoded = rlpEncode(binary)
331
+ const tx = encode(rlpEncoded, prefix)
332
+ return {
333
+ tx,
334
+ rlpEncoded,
335
+ binary,
336
+ txObject: unpackRawTx<TxTypeSchemas[TX_TYPE]>(binary, schema)
337
+ } as any
338
+ }
339
+
340
+ export interface TxUnpacked<Tx extends TxSchema> {
341
+ txType: TX_TYPE
342
+ tx: RawTxObject<Tx>
343
+ rlpEncoded: Uint8Array
344
+ }
345
+ /**
346
+ * Unpack transaction hash
347
+ * @param encodedTx - Transaction to unpack
348
+ * @param txType - Expected transaction type
349
+ * @returns object
350
+ * @returns object.tx Object with transaction param's
351
+ * @returns object.txType Transaction type
352
+ */
353
+ export function unpackTx<TxType extends TX_TYPE> (
354
+ encodedTx: EncodedData<'tx' | 'pi'>, txType?: TxType
355
+ ): TxUnpacked<TxTypeSchemas[TxType]> {
356
+ const rlpEncoded = decode(encodedTx)
357
+ const binary = rlpDecode(rlpEncoded)
358
+ const objId = +readInt(binary[0] as Buffer)
359
+ if (!isKeyOfObject(objId, TX_SCHEMA)) throw new DecodeError(`Unknown transaction tag: ${objId}`)
360
+ if (txType != null && txType !== objId) throw new DecodeError(`Expected transaction to have ${TX_TYPE[txType]} tag, got ${TX_TYPE[objId]} instead`)
361
+ const vsn = +readInt(binary[1] as Buffer)
362
+ if (!isKeyOfObject(vsn, TX_SCHEMA[objId])) throw new SchemaNotFoundError('deserialization', `tag ${objId}`, vsn)
363
+ const schema = TX_SCHEMA[objId][vsn]
364
+ return {
365
+ txType: objId,
366
+ tx: unpackRawTx<TxTypeSchemas[TxType]>(binary, schema),
367
+ rlpEncoded
368
+ }
369
+ }
370
+
371
+ /**
372
+ * Build a transaction hash
373
+ * @param rawTx - base64 or rlp encoded transaction
374
+ * @returns Transaction hash
375
+ */
376
+ export function buildTxHash (rawTx: EncodedData<'tx'> | Uint8Array): EncodedData<'th'> {
377
+ const data = typeof rawTx === 'string' && rawTx.startsWith('tx_')
378
+ ? decode(rawTx)
379
+ : rawTx
380
+ return encode(hash(data), 'th')
381
+ }
382
+
383
+ /**
384
+ * Build a contract public key by contractCreateTx or gaAttach
385
+ * @param contractTx - Transaction
386
+ * @returns Contract public key
387
+ */
388
+ export function buildContractIdByContractTx (contractTx: EncodedData<'tx'>): EncodedData<'ct'> {
389
+ const { txType, tx } = unpackTx<TX_TYPE.contractCreate | TX_TYPE.gaAttach>(contractTx)
390
+ if (![TX_TYPE.contractCreate, TX_TYPE.gaAttach].includes(txType)) {
391
+ throw new ArgumentError('contractCreateTx', 'a contractCreateTx or gaAttach', txType)
392
+ }
393
+ return buildContractId(tx.ownerId, +tx.nonce)
394
+ }