@aeternity/aepp-sdk 13.0.0-alpha.0 → 13.0.0-alpha.1

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 (322) hide show
  1. package/bin/aesophia_cli +0 -0
  2. package/dist/aepp-sdk.browser-script.js +1 -1
  3. package/dist/aepp-sdk.browser-script.js.map +1 -1
  4. package/dist/aepp-sdk.browser.js +1 -1
  5. package/dist/aepp-sdk.browser.js.map +1 -1
  6. package/dist/aepp-sdk.js +4206 -1127
  7. package/dist/aepp-sdk.js.map +1 -1
  8. package/es/AeSdkBase.d.ts +3 -3
  9. package/es/AeSdkBase.mjs +4 -0
  10. package/es/AeSdkBase.mjs.map +1 -1
  11. package/es/AeSdkMethods.d.ts +3 -4
  12. package/es/AeSdkMethods.mjs.map +1 -1
  13. package/es/Node.d.ts +4 -3
  14. package/es/Node.mjs +1 -1
  15. package/es/Node.mjs.map +1 -1
  16. package/es/account/Base.d.ts +2 -2
  17. package/es/account/Base.mjs.map +1 -1
  18. package/es/account/Generalized.mjs +5 -3
  19. package/es/account/Generalized.mjs.map +1 -1
  20. package/es/account/Ledger.mjs +2 -1
  21. package/es/account/Ledger.mjs.map +1 -1
  22. package/es/account/Memory.mjs +2 -1
  23. package/es/account/Memory.mjs.map +1 -1
  24. package/es/aens.d.ts +1 -1
  25. package/es/aens.mjs +5 -1
  26. package/es/aens.mjs.map +1 -1
  27. package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +1 -0
  28. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +19 -4
  29. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -1
  30. package/es/aepp-wallet-communication/rpc/RpcClient.mjs +1 -1
  31. package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -1
  32. package/es/chain.d.ts +9 -1
  33. package/es/chain.mjs +4 -1
  34. package/es/chain.mjs.map +1 -1
  35. package/es/channel/Base.d.ts +6 -1
  36. package/es/channel/Base.mjs +9 -6
  37. package/es/channel/Base.mjs.map +1 -1
  38. package/es/channel/Contract.d.ts +8 -7
  39. package/es/channel/Contract.mjs +1 -1
  40. package/es/channel/Contract.mjs.map +1 -1
  41. package/es/channel/Spend.d.ts +3 -1
  42. package/es/channel/Spend.mjs +4 -2
  43. package/es/channel/Spend.mjs.map +1 -1
  44. package/es/channel/handlers.mjs +11 -9
  45. package/es/channel/handlers.mjs.map +1 -1
  46. package/es/channel/internal.mjs +3 -1
  47. package/es/channel/internal.mjs.map +1 -1
  48. package/es/contract/Contract.d.ts +21 -46
  49. package/es/contract/Contract.mjs +69 -52
  50. package/es/contract/Contract.mjs.map +1 -1
  51. package/es/contract/compiler/Base.d.ts +81 -0
  52. package/es/contract/compiler/Base.mjs +5 -0
  53. package/es/contract/compiler/Base.mjs.map +1 -0
  54. package/es/contract/compiler/Cli.d.ts +23 -0
  55. package/es/contract/compiler/Cli.mjs +155 -0
  56. package/es/contract/compiler/Cli.mjs.map +1 -0
  57. package/es/contract/compiler/Http.d.ts +32 -0
  58. package/es/contract/{CompilerHttp.mjs → compiler/Http.mjs} +64 -9
  59. package/es/contract/compiler/Http.mjs.map +1 -0
  60. package/es/contract/compiler/HttpNode.d.ts +17 -0
  61. package/es/contract/compiler/HttpNode.mjs +26 -0
  62. package/es/contract/compiler/HttpNode.mjs.map +1 -0
  63. package/es/contract/compiler/getFileSystem.d.ts +6 -0
  64. package/es/contract/compiler/getFileSystem.mjs +40 -0
  65. package/es/contract/compiler/getFileSystem.mjs.map +1 -0
  66. package/es/contract/ga.d.ts +5 -4
  67. package/es/contract/ga.mjs +11 -2
  68. package/es/contract/ga.mjs.map +1 -1
  69. package/es/index-browser.d.ts +39 -0
  70. package/es/index-browser.mjs +55 -0
  71. package/es/index-browser.mjs.map +1 -0
  72. package/es/index.d.ts +4 -38
  73. package/es/index.mjs +4 -53
  74. package/es/index.mjs.map +1 -1
  75. package/es/oracle.mjs +1 -1
  76. package/es/oracle.mjs.map +1 -1
  77. package/es/spend.mjs +1 -3
  78. package/es/spend.mjs.map +1 -1
  79. package/es/tx/builder/constants.d.ts +28 -1
  80. package/es/tx/builder/constants.mjs +32 -3
  81. package/es/tx/builder/constants.mjs.map +1 -1
  82. package/es/tx/builder/field-types/abi-version.d.ts +10 -0
  83. package/es/tx/builder/field-types/abi-version.mjs +20 -0
  84. package/es/tx/builder/field-types/abi-version.mjs.map +1 -0
  85. package/es/tx/builder/field-types/address.d.ts +5 -6
  86. package/es/tx/builder/field-types/address.mjs +17 -8
  87. package/es/tx/builder/field-types/address.mjs.map +1 -1
  88. package/es/tx/builder/field-types/array.d.ts +7 -0
  89. package/es/tx/builder/field-types/array.mjs +11 -0
  90. package/es/tx/builder/field-types/array.mjs.map +1 -0
  91. package/es/tx/builder/field-types/boolean.d.ts +6 -0
  92. package/es/tx/builder/field-types/boolean.mjs +13 -0
  93. package/es/tx/builder/field-types/boolean.mjs.map +1 -0
  94. package/es/tx/builder/field-types/coin-amount.d.ts +1 -1
  95. package/es/tx/builder/field-types/coin-amount.mjs.map +1 -1
  96. package/es/tx/builder/field-types/ct-version.d.ts +30 -0
  97. package/es/tx/builder/field-types/ct-version.mjs +48 -0
  98. package/es/tx/builder/field-types/ct-version.mjs.map +1 -0
  99. package/es/tx/builder/field-types/deposit.d.ts +1 -1
  100. package/es/tx/builder/field-types/deposit.mjs.map +1 -1
  101. package/es/tx/builder/field-types/encoded.d.ts +6 -0
  102. package/es/tx/builder/field-types/encoded.mjs +21 -0
  103. package/es/tx/builder/field-types/encoded.mjs.map +1 -0
  104. package/es/tx/builder/field-types/entry.d.ts +11 -0
  105. package/es/tx/builder/field-types/entry.mjs +31 -0
  106. package/es/tx/builder/field-types/entry.mjs.map +1 -0
  107. package/es/tx/builder/field-types/enumeration.d.ts +5 -3
  108. package/es/tx/builder/field-types/enumeration.mjs +11 -2
  109. package/es/tx/builder/field-types/enumeration.mjs.map +1 -1
  110. package/es/tx/builder/field-types/fee.d.ts +10 -7
  111. package/es/tx/builder/field-types/fee.mjs +24 -20
  112. package/es/tx/builder/field-types/fee.mjs.map +1 -1
  113. package/es/tx/builder/field-types/gas-limit.d.ts +5 -2
  114. package/es/tx/builder/field-types/gas-limit.mjs +9 -6
  115. package/es/tx/builder/field-types/gas-limit.mjs.map +1 -1
  116. package/es/tx/builder/field-types/gas-price.d.ts +1 -1
  117. package/es/tx/builder/field-types/index.d.ts +66 -28
  118. package/es/tx/builder/field-types/index.mjs +30 -12
  119. package/es/tx/builder/field-types/index.mjs.map +1 -1
  120. package/es/tx/builder/field-types/mptree.d.ts +37 -0
  121. package/es/tx/builder/field-types/mptree.mjs +268 -0
  122. package/es/tx/builder/field-types/mptree.mjs.map +1 -0
  123. package/es/tx/builder/field-types/name-fee.d.ts +1 -2
  124. package/es/tx/builder/field-types/name-fee.mjs.map +1 -1
  125. package/es/tx/builder/field-types/name-id.mjs +2 -1
  126. package/es/tx/builder/field-types/name-id.mjs.map +1 -1
  127. package/es/tx/builder/field-types/pointers.mjs +2 -2
  128. package/es/tx/builder/field-types/pointers.mjs.map +1 -1
  129. package/es/tx/builder/field-types/raw.d.ts +6 -0
  130. package/es/tx/builder/field-types/raw.mjs +13 -0
  131. package/es/tx/builder/field-types/raw.mjs.map +1 -0
  132. package/es/tx/builder/field-types/short-u-int-const.d.ts +5 -0
  133. package/es/tx/builder/field-types/short-u-int-const.mjs +16 -0
  134. package/es/tx/builder/field-types/short-u-int-const.mjs.map +1 -0
  135. package/es/tx/builder/field-types/string.d.ts +6 -0
  136. package/es/tx/builder/field-types/string.mjs +10 -0
  137. package/es/tx/builder/field-types/string.mjs.map +1 -0
  138. package/es/tx/builder/field-types/u-int.d.ts +1 -2
  139. package/es/tx/builder/field-types/u-int.mjs.map +1 -1
  140. package/es/tx/builder/index.d.ts +11 -29
  141. package/es/tx/builder/index.mjs +50 -211
  142. package/es/tx/builder/index.mjs.map +1 -1
  143. package/es/tx/builder/schema.d.ts +2111 -571
  144. package/es/tx/builder/schema.mjs +57 -125
  145. package/es/tx/builder/schema.mjs.map +1 -1
  146. package/es/tx/index.d.ts +5 -20
  147. package/es/tx/index.mjs +31 -88
  148. package/es/tx/index.mjs.map +1 -1
  149. package/es/tx/validator.d.ts +3 -5
  150. package/es/tx/validator.mjs +82 -95
  151. package/es/tx/validator.mjs.map +1 -1
  152. package/es/utils/bytes.mjs +1 -1
  153. package/es/utils/bytes.mjs.map +1 -1
  154. package/es/utils/errors.d.ts +3 -8
  155. package/es/utils/errors.mjs +1 -11
  156. package/es/utils/errors.mjs.map +1 -1
  157. package/es/utils/other.d.ts +1 -1
  158. package/package.json +35 -27
  159. package/src/AeSdkBase.ts +6 -3
  160. package/src/AeSdkMethods.ts +3 -4
  161. package/src/Node.ts +6 -3
  162. package/src/account/Base.ts +2 -2
  163. package/src/account/Generalized.ts +2 -2
  164. package/src/account/Ledger.ts +1 -1
  165. package/src/account/Memory.ts +1 -1
  166. package/src/aens.ts +3 -2
  167. package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +18 -7
  168. package/src/aepp-wallet-communication/rpc/RpcClient.ts +2 -2
  169. package/src/chain.ts +5 -3
  170. package/src/channel/Base.ts +13 -5
  171. package/src/channel/Contract.ts +11 -10
  172. package/src/channel/Spend.ts +7 -2
  173. package/src/channel/handlers.ts +10 -9
  174. package/src/channel/internal.ts +1 -1
  175. package/src/contract/Contract.ts +69 -79
  176. package/src/contract/compiler/Base.ts +94 -0
  177. package/src/contract/compiler/Cli.ts +134 -0
  178. package/src/contract/compiler/Http.ts +124 -0
  179. package/src/contract/compiler/HttpNode.ts +26 -0
  180. package/src/contract/compiler/getFileSystem.ts +42 -0
  181. package/src/contract/ga.ts +9 -6
  182. package/src/index-browser.ts +58 -0
  183. package/src/index.ts +4 -56
  184. package/src/oracle.ts +1 -1
  185. package/src/spend.ts +1 -1
  186. package/src/tx/builder/constants.ts +32 -3
  187. package/src/tx/builder/field-types/abi-version.ts +21 -0
  188. package/src/tx/builder/field-types/address.ts +23 -13
  189. package/src/tx/builder/field-types/array.ts +19 -0
  190. package/src/tx/builder/field-types/boolean.ts +9 -0
  191. package/src/tx/builder/field-types/coin-amount.ts +2 -1
  192. package/src/tx/builder/field-types/ct-version.ts +50 -0
  193. package/src/tx/builder/field-types/deposit.ts +1 -1
  194. package/src/tx/builder/field-types/encoded.ts +27 -0
  195. package/src/tx/builder/field-types/entry.ts +31 -0
  196. package/src/tx/builder/field-types/enumeration.ts +15 -4
  197. package/src/tx/builder/field-types/fee.ts +38 -18
  198. package/src/tx/builder/field-types/gas-limit.ts +12 -7
  199. package/src/tx/builder/field-types/index.ts +46 -17
  200. package/src/tx/builder/field-types/mptree.ts +242 -0
  201. package/src/tx/builder/field-types/name-fee.ts +1 -2
  202. package/src/tx/builder/field-types/name-id.ts +1 -1
  203. package/src/tx/builder/field-types/pointers.ts +2 -2
  204. package/src/tx/builder/field-types/raw.ts +9 -0
  205. package/src/tx/builder/field-types/short-u-int-const.ts +20 -0
  206. package/src/tx/builder/field-types/string.ts +11 -0
  207. package/src/tx/builder/field-types/u-int.ts +1 -3
  208. package/src/tx/builder/index.ts +63 -247
  209. package/src/tx/builder/schema.ts +273 -323
  210. package/src/tx/index.ts +37 -104
  211. package/src/tx/validator.ts +72 -95
  212. package/src/utils/bytes.ts +1 -1
  213. package/src/utils/errors.ts +4 -13
  214. package/types-legacy/ts4.2/AeSdkBase.d.ts +3 -3
  215. package/types-legacy/ts4.2/AeSdkMethods.d.ts +3 -4
  216. package/types-legacy/ts4.2/Node.d.ts +3 -3
  217. package/types-legacy/ts4.2/account/Base.d.ts +2 -2
  218. package/types-legacy/ts4.2/aens.d.ts +1 -1
  219. package/types-legacy/ts4.2/aepp-wallet-communication/connection/BrowserRuntime.d.ts +1 -0
  220. package/types-legacy/ts4.2/chain.d.ts +9 -1
  221. package/types-legacy/ts4.2/channel/Base.d.ts +6 -1
  222. package/types-legacy/ts4.2/channel/Contract.d.ts +8 -7
  223. package/types-legacy/ts4.2/channel/Spend.d.ts +3 -1
  224. package/types-legacy/ts4.2/contract/Contract.d.ts +21 -46
  225. package/types-legacy/ts4.2/contract/compiler/Base.d.ts +81 -0
  226. package/types-legacy/ts4.2/contract/compiler/Cli.d.ts +23 -0
  227. package/types-legacy/ts4.2/contract/compiler/Http.d.ts +32 -0
  228. package/types-legacy/ts4.2/contract/compiler/HttpNode.d.ts +17 -0
  229. package/types-legacy/ts4.2/contract/compiler/getFileSystem.d.ts +6 -0
  230. package/types-legacy/ts4.2/contract/ga.d.ts +5 -4
  231. package/types-legacy/ts4.2/index-browser.d.ts +39 -0
  232. package/types-legacy/ts4.2/index.d.ts +4 -38
  233. package/types-legacy/ts4.2/tx/builder/constants.d.ts +28 -1
  234. package/types-legacy/ts4.2/tx/builder/field-types/abi-version.d.ts +10 -0
  235. package/types-legacy/ts4.2/tx/builder/field-types/address.d.ts +11 -12
  236. package/types-legacy/ts4.2/tx/builder/field-types/array.d.ts +7 -0
  237. package/types-legacy/ts4.2/tx/builder/field-types/boolean.d.ts +6 -0
  238. package/types-legacy/ts4.2/tx/builder/field-types/coin-amount.d.ts +1 -1
  239. package/types-legacy/ts4.2/tx/builder/field-types/ct-version.d.ts +42 -0
  240. package/types-legacy/ts4.2/tx/builder/field-types/deposit.d.ts +1 -1
  241. package/types-legacy/ts4.2/tx/builder/field-types/encoded.d.ts +6 -0
  242. package/types-legacy/ts4.2/tx/builder/field-types/entry.d.ts +11 -0
  243. package/types-legacy/ts4.2/tx/builder/field-types/enumeration.d.ts +5 -3
  244. package/types-legacy/ts4.2/tx/builder/field-types/fee.d.ts +10 -7
  245. package/types-legacy/ts4.2/tx/builder/field-types/gas-limit.d.ts +5 -2
  246. package/types-legacy/ts4.2/tx/builder/field-types/gas-price.d.ts +1 -1
  247. package/types-legacy/ts4.2/tx/builder/field-types/index.d.ts +72 -28
  248. package/types-legacy/ts4.2/tx/builder/field-types/mptree.d.ts +43 -0
  249. package/types-legacy/ts4.2/tx/builder/field-types/name-fee.d.ts +1 -2
  250. package/types-legacy/ts4.2/tx/builder/field-types/raw.d.ts +6 -0
  251. package/types-legacy/ts4.2/tx/builder/field-types/short-u-int-const.d.ts +5 -0
  252. package/types-legacy/ts4.2/tx/builder/field-types/string.d.ts +6 -0
  253. package/types-legacy/ts4.2/tx/builder/field-types/u-int.d.ts +1 -2
  254. package/types-legacy/ts4.2/tx/builder/index.d.ts +11 -29
  255. package/types-legacy/ts4.2/tx/builder/schema.d.ts +2380 -668
  256. package/types-legacy/ts4.2/tx/index.d.ts +5 -20
  257. package/types-legacy/ts4.2/tx/validator.d.ts +3 -5
  258. package/types-legacy/ts4.2/utils/errors.d.ts +3 -8
  259. package/types-legacy/ts4.2/utils/other.d.ts +1 -1
  260. package/types-legacy/ts4.5/AeSdkBase.d.ts +3 -3
  261. package/types-legacy/ts4.5/AeSdkMethods.d.ts +3 -4
  262. package/types-legacy/ts4.5/Node.d.ts +3 -3
  263. package/types-legacy/ts4.5/account/Base.d.ts +2 -2
  264. package/types-legacy/ts4.5/aens.d.ts +1 -1
  265. package/types-legacy/ts4.5/aepp-wallet-communication/connection/BrowserRuntime.d.ts +1 -0
  266. package/types-legacy/ts4.5/chain.d.ts +9 -1
  267. package/types-legacy/ts4.5/channel/Base.d.ts +6 -1
  268. package/types-legacy/ts4.5/channel/Contract.d.ts +8 -7
  269. package/types-legacy/ts4.5/channel/Spend.d.ts +3 -1
  270. package/types-legacy/ts4.5/contract/Contract.d.ts +21 -46
  271. package/types-legacy/ts4.5/contract/compiler/Base.d.ts +81 -0
  272. package/types-legacy/ts4.5/contract/compiler/Cli.d.ts +23 -0
  273. package/types-legacy/ts4.5/contract/compiler/Http.d.ts +32 -0
  274. package/types-legacy/ts4.5/contract/compiler/HttpNode.d.ts +17 -0
  275. package/types-legacy/ts4.5/contract/compiler/getFileSystem.d.ts +6 -0
  276. package/types-legacy/ts4.5/contract/ga.d.ts +5 -4
  277. package/types-legacy/ts4.5/index-browser.d.ts +39 -0
  278. package/types-legacy/ts4.5/index.d.ts +4 -38
  279. package/types-legacy/ts4.5/tx/builder/constants.d.ts +28 -1
  280. package/types-legacy/ts4.5/tx/builder/field-types/abi-version.d.ts +10 -0
  281. package/types-legacy/ts4.5/tx/builder/field-types/address.d.ts +11 -12
  282. package/types-legacy/ts4.5/tx/builder/field-types/array.d.ts +7 -0
  283. package/types-legacy/ts4.5/tx/builder/field-types/boolean.d.ts +6 -0
  284. package/types-legacy/ts4.5/tx/builder/field-types/coin-amount.d.ts +1 -1
  285. package/types-legacy/ts4.5/tx/builder/field-types/ct-version.d.ts +42 -0
  286. package/types-legacy/ts4.5/tx/builder/field-types/deposit.d.ts +1 -1
  287. package/types-legacy/ts4.5/tx/builder/field-types/encoded.d.ts +6 -0
  288. package/types-legacy/ts4.5/tx/builder/field-types/entry.d.ts +11 -0
  289. package/types-legacy/ts4.5/tx/builder/field-types/enumeration.d.ts +5 -3
  290. package/types-legacy/ts4.5/tx/builder/field-types/fee.d.ts +10 -7
  291. package/types-legacy/ts4.5/tx/builder/field-types/gas-limit.d.ts +5 -2
  292. package/types-legacy/ts4.5/tx/builder/field-types/gas-price.d.ts +1 -1
  293. package/types-legacy/ts4.5/tx/builder/field-types/index.d.ts +72 -28
  294. package/types-legacy/ts4.5/tx/builder/field-types/mptree.d.ts +43 -0
  295. package/types-legacy/ts4.5/tx/builder/field-types/name-fee.d.ts +1 -2
  296. package/types-legacy/ts4.5/tx/builder/field-types/raw.d.ts +6 -0
  297. package/types-legacy/ts4.5/tx/builder/field-types/short-u-int-const.d.ts +5 -0
  298. package/types-legacy/ts4.5/tx/builder/field-types/string.d.ts +6 -0
  299. package/types-legacy/ts4.5/tx/builder/field-types/u-int.d.ts +1 -2
  300. package/types-legacy/ts4.5/tx/builder/index.d.ts +11 -29
  301. package/types-legacy/ts4.5/tx/builder/schema.d.ts +2380 -668
  302. package/types-legacy/ts4.5/tx/index.d.ts +5 -20
  303. package/types-legacy/ts4.5/tx/validator.d.ts +3 -5
  304. package/types-legacy/ts4.5/utils/errors.d.ts +3 -8
  305. package/types-legacy/ts4.5/utils/other.d.ts +1 -1
  306. package/es/contract/CompilerHttp.d.ts +0 -18
  307. package/es/contract/CompilerHttp.mjs.map +0 -1
  308. package/es/tx/builder/field-types/addresses.d.ts +0 -6
  309. package/es/tx/builder/field-types/addresses.mjs +0 -13
  310. package/es/tx/builder/field-types/addresses.mjs.map +0 -1
  311. package/es/utils/mptree.d.ts +0 -26
  312. package/es/utils/mptree.mjs +0 -143
  313. package/es/utils/mptree.mjs.map +0 -1
  314. package/src/contract/CompilerHttp.ts +0 -67
  315. package/src/tx/builder/field-types/addresses.ts +0 -18
  316. package/src/utils/mptree.ts +0 -145
  317. package/types-legacy/ts4.2/contract/CompilerHttp.d.ts +0 -18
  318. package/types-legacy/ts4.2/tx/builder/field-types/addresses.d.ts +0 -6
  319. package/types-legacy/ts4.2/utils/mptree.d.ts +0 -32
  320. package/types-legacy/ts4.5/contract/CompilerHttp.d.ts +0 -18
  321. package/types-legacy/ts4.5/tx/builder/field-types/addresses.d.ts +0 -6
  322. package/types-legacy/ts4.5/utils/mptree.d.ts +0 -32
@@ -0,0 +1,242 @@
1
+ import { encode as rlpEncode, Input } from 'rlp';
2
+ import { Tag } from '../constants';
3
+ import { hash } from '../../../utils/crypto';
4
+ import {
5
+ MerkleTreeHashMismatchError,
6
+ MissingNodeInTreeError,
7
+ UnknownPathNibbleError,
8
+ UnexpectedTsError,
9
+ UnknownNodeLengthError,
10
+ InternalError,
11
+ } from '../../../utils/errors';
12
+ import {
13
+ decode, encode, Encoded, Encoding,
14
+ } from '../../../utils/encoder';
15
+ import type { unpackTx } from '..';
16
+
17
+ enum NodeType {
18
+ Branch,
19
+ Extension,
20
+ Leaf,
21
+ }
22
+
23
+ type MPTreeBinary = [Buffer, Array<[Buffer, Buffer[]]>];
24
+
25
+ class MPTree<E extends Encoding, T extends Tag> {
26
+ readonly #rootHash: string;
27
+
28
+ #isComplete = true;
29
+
30
+ get isComplete(): boolean {
31
+ return this.#isComplete;
32
+ }
33
+
34
+ readonly #nodes: { [key: string]: Buffer[] };
35
+
36
+ readonly #encoding: E;
37
+
38
+ readonly #tag: T;
39
+
40
+ readonly #unpackTx: typeof unpackTx;
41
+
42
+ static #nodeHash(node: Input): string {
43
+ return Buffer.from(hash(rlpEncode(node))).toString('hex');
44
+ }
45
+
46
+ /**
47
+ * Deserialize Merkle Patricia Tree
48
+ * @param binary - Binary
49
+ * @param tag - Tag to use to decode value
50
+ * @param unpTx - Implementation of unpackTx use to decode values
51
+ * @returns Merkle Patricia Tree
52
+ */
53
+ constructor(binary: MPTreeBinary, encoding: E, tag: T, unpTx: typeof unpackTx) {
54
+ this.#encoding = encoding;
55
+ this.#tag = tag;
56
+ this.#unpackTx = unpTx;
57
+ this.#rootHash = binary[0].toString('hex');
58
+ this.#nodes = Object.fromEntries(
59
+ binary[1].map((node) => [node[0].toString('hex'), node[1]]),
60
+ );
61
+
62
+ if (this.#nodes[this.#rootHash] == null) {
63
+ if (Object.keys(this.#nodes).length !== 0) {
64
+ throw new MissingNodeInTreeError('Can\'t find a node by root hash');
65
+ }
66
+ this.#isComplete = false;
67
+ return;
68
+ }
69
+ Object.entries(this.#nodes).forEach(([key, node]) => {
70
+ if (MPTree.#nodeHash(node) !== key) throw new MerkleTreeHashMismatchError();
71
+ const { type } = MPTree.#parseNode(node);
72
+ switch (type) {
73
+ case NodeType.Branch:
74
+ node
75
+ .slice(0, 16)
76
+ .filter((n) => n.length)
77
+ .forEach((n) => {
78
+ // TODO: enable after resolving https://github.com/aeternity/aeternity/issues/4066
79
+ // if (n.length !== 32) {
80
+ // throw new ArgumentError('MPTree branch item length', 32, n.length);
81
+ // }
82
+ if (this.#nodes[n.toString('hex')] == null) this.#isComplete = false;
83
+ });
84
+ break;
85
+ case NodeType.Extension:
86
+ if (this.#nodes[node[1].toString('hex')] == null) {
87
+ throw new MissingNodeInTreeError('Can\'t find a node by hash in extension node');
88
+ }
89
+ break;
90
+ case NodeType.Leaf:
91
+ break;
92
+ default:
93
+ throw new InternalError(`Unknown MPTree node type: ${type}`);
94
+ }
95
+ });
96
+ }
97
+
98
+ isEqual(tree: MPTree<E, T>): boolean {
99
+ return this.#rootHash === tree.#rootHash;
100
+ }
101
+
102
+ static #parseNode(node: Buffer[]): { type: NodeType; value?: Buffer; path?: string } {
103
+ switch (node.length) {
104
+ case 17:
105
+ return {
106
+ type: NodeType.Branch,
107
+ ...node[16].length !== 0 && { value: node[16] },
108
+ };
109
+ case 2: {
110
+ const nibble = node[0][0] >> 4; // eslint-disable-line no-bitwise
111
+ if (nibble > 3) throw new UnknownPathNibbleError(nibble);
112
+ const type = nibble <= 1 ? NodeType.Extension : NodeType.Leaf;
113
+ const slice = [0, 2].includes(nibble) ? 2 : 1;
114
+ return {
115
+ type,
116
+ ...type === NodeType.Leaf && { value: node[1] },
117
+ path: node[0].toString('hex').slice(slice),
118
+ };
119
+ }
120
+ default:
121
+ throw new UnknownNodeLengthError(node.length);
122
+ }
123
+ }
124
+
125
+ /**
126
+ * Serialize Merkle Patricia Tree
127
+ * @returns Binary
128
+ */
129
+ serialize(): MPTreeBinary {
130
+ return [
131
+ Buffer.from(this.#rootHash, 'hex'),
132
+ Object.entries(this.#nodes).map(([mptHash, value]) => ([
133
+ Buffer.from(mptHash, 'hex'),
134
+ value,
135
+ ])),
136
+ ];
137
+ }
138
+
139
+ /**
140
+ * Retrieve value from Merkle Patricia Tree
141
+ * @param _key - The key of the element to retrieve
142
+ * @returns Value associated to the specified key
143
+ */
144
+ #getRaw(_key: string): Buffer | undefined {
145
+ let searchFrom = this.#rootHash;
146
+ let key = _key;
147
+ while (true) { // eslint-disable-line no-constant-condition
148
+ const node = this.#nodes[searchFrom];
149
+ if (node == null) {
150
+ if (!this.isComplete) return undefined;
151
+ throw new InternalError('Can\'t find node in complete tree');
152
+ }
153
+ const { type, value, path } = MPTree.#parseNode(node);
154
+ switch (type) {
155
+ case NodeType.Branch:
156
+ if (key.length === 0) return value;
157
+ searchFrom = node[+`0x${key[0]}`].toString('hex');
158
+ key = key.substring(1);
159
+ break;
160
+ case NodeType.Extension:
161
+ if (key.substring(0, path?.length) !== path) return undefined;
162
+ searchFrom = node[1].toString('hex');
163
+ key = key.substring(path.length);
164
+ break;
165
+ case NodeType.Leaf:
166
+ if (path !== key) return undefined;
167
+ return value;
168
+ default:
169
+ throw new InternalError(`Unknown MPTree node type: ${type}`);
170
+ }
171
+ }
172
+ }
173
+
174
+ /**
175
+ * Retrieve value from Merkle Patricia Tree
176
+ * @param key - The key of the element to retrieve
177
+ * @returns Value associated to the specified key
178
+ */
179
+ get(key: Encoded.Generic<E>): ReturnType<typeof unpackTx<T>> | undefined {
180
+ const d = this.#getRaw(decode(key).toString('hex'));
181
+ if (d == null) return d;
182
+ return this.#unpackTx(encode(d, Encoding.Transaction), this.#tag);
183
+ }
184
+
185
+ #entriesRaw(): Array<[string, Buffer]> {
186
+ const entries: Array<[string, Buffer]> = [];
187
+ const rec = (searchFrom: string, key: string): void => {
188
+ const node = this.#nodes[searchFrom];
189
+ if (node == null) {
190
+ if (!this.isComplete) return;
191
+ throw new InternalError('Can\'t find node in complete tree');
192
+ }
193
+ const { type, value, path } = MPTree.#parseNode(node);
194
+ switch (type) {
195
+ case NodeType.Branch:
196
+ node
197
+ .slice(0, 16)
198
+ .map((t, idx): [typeof t, number] => [t, idx])
199
+ .filter(([t]) => t.length)
200
+ .forEach(([t, idx]) => rec(t.toString('hex'), key + idx.toString(16)));
201
+ if (value != null) entries.push([key, value]);
202
+ break;
203
+ case NodeType.Extension:
204
+ rec(node[1].toString('hex'), key + path);
205
+ break;
206
+ case NodeType.Leaf:
207
+ if (value == null) throw new UnexpectedTsError();
208
+ entries.push([key + path, value]);
209
+ break;
210
+ default:
211
+ throw new InternalError(`Unknown MPTree node type: ${type}`);
212
+ }
213
+ };
214
+ rec(this.#rootHash, '');
215
+ return entries;
216
+ }
217
+
218
+ toObject(): Record<Encoded.Any, ReturnType<typeof unpackTx<T>>> {
219
+ return Object.fromEntries(this.#entriesRaw()
220
+ // TODO: remove after resolving https://github.com/aeternity/aeternity/issues/4066
221
+ .filter(([k]) => this.#encoding !== Encoding.ContractAddress || k.length !== 66)
222
+ .map(([k, v]) => [
223
+ encode(Buffer.from(k, 'hex'), this.#encoding),
224
+ this.#unpackTx(encode(v, Encoding.Transaction), this.#tag),
225
+ ]));
226
+ }
227
+ }
228
+
229
+ export default function genMPTreeField<E extends Encoding, T extends Tag>(encoding: E, tag: T): {
230
+ serialize: (value: MPTree<E, T>) => MPTreeBinary;
231
+ deserialize: (value: MPTreeBinary, o: { unpackTx: typeof unpackTx }) => MPTree<E, T>;
232
+ } {
233
+ return {
234
+ serialize(value) {
235
+ return value.serialize();
236
+ },
237
+
238
+ deserialize(value, { unpackTx }) {
239
+ return new MPTree(value, encoding, tag, unpackTx);
240
+ },
241
+ };
242
+ }
@@ -1,9 +1,8 @@
1
1
  import BigNumber from 'bignumber.js';
2
2
  import { getMinimumNameFee } from '../helpers';
3
3
  import { InsufficientNameFeeError } from '../../../utils/errors';
4
- import { Int } from './u-int';
5
4
  import coinAmount from './coin-amount';
6
- import { AensName } from '../constants';
5
+ import { AensName, Int } from '../constants';
7
6
 
8
7
  export default {
9
8
  ...coinAmount,
@@ -3,7 +3,7 @@ import { produceNameId, isNameValid } from '../helpers';
3
3
  import address from './address';
4
4
  import { Encoded, Encoding } from '../../../utils/encoder';
5
5
 
6
- const addressName = address<Encoding.Name>();
6
+ const addressName = address(Encoding.Name);
7
7
 
8
8
  export default {
9
9
  ...addressName,
@@ -2,9 +2,9 @@ import { NamePointer as NamePointerString } from '../../../apis/node';
2
2
  import { toBytes } from '../../../utils/bytes';
3
3
  import { Encoded } from '../../../utils/encoder';
4
4
  import { IllegalArgumentError } from '../../../utils/errors';
5
- import address, { AddressEncodings } from './address';
5
+ import address, { AddressEncodings, idTagToEncoding } from './address';
6
6
 
7
- const addressAny = address<AddressEncodings>();
7
+ const addressAny = address(...idTagToEncoding);
8
8
 
9
9
  // TODO: remove after fixing node types
10
10
  type NamePointer = NamePointerString & {
@@ -0,0 +1,9 @@
1
+ export default {
2
+ serialize(buffer: Uint8Array): Buffer {
3
+ return Buffer.from(buffer);
4
+ },
5
+
6
+ deserialize(buffer: Buffer): Buffer {
7
+ return buffer;
8
+ },
9
+ };
@@ -0,0 +1,20 @@
1
+ import { ArgumentError } from '../../../utils/errors';
2
+ import shortUInt from './short-u-int';
3
+
4
+ export default function genShortUIntConstField<Value extends number>(value: Value): {
5
+ serialize: (value?: Value) => Buffer;
6
+ deserialize: (value: Buffer) => Value;
7
+ } {
8
+ return {
9
+ serialize(val) {
10
+ if (val != null && val !== value) throw new ArgumentError('ShortUIntConst', value, val);
11
+ return shortUInt.serialize(value);
12
+ },
13
+
14
+ deserialize(buf) {
15
+ const val = shortUInt.deserialize(buf);
16
+ if (val !== value) throw new ArgumentError('ShortUIntConst', value, val);
17
+ return value;
18
+ },
19
+ };
20
+ }
@@ -0,0 +1,11 @@
1
+ import { toBytes } from '../../../utils/bytes';
2
+
3
+ export default {
4
+ serialize(string: string): Buffer {
5
+ return toBytes(string);
6
+ },
7
+
8
+ deserialize(buffer: Buffer): string {
9
+ return buffer.toString();
10
+ },
11
+ };
@@ -1,10 +1,8 @@
1
- import BigNumber from 'bignumber.js';
2
1
  import { readInt } from '../helpers';
2
+ import { Int } from '../constants';
3
3
  import { ArgumentError } from '../../../utils/errors';
4
4
  import { toBytes } from '../../../utils/bytes';
5
5
 
6
- export type Int = number | string | BigNumber;
7
-
8
6
  export default {
9
7
  serialize(value: Int): Buffer {
10
8
  if (value < 0) throw new ArgumentError('value', 'greater or equal to 0', value);