@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
@@ -1,23 +1,12 @@
1
1
  import { Encoded, Encoding } from '../../utils/encoder';
2
2
  import { AE_AMOUNT_FORMATS } from '../../utils/amount-formatter';
3
- import { RawTxObject, TxSchema, TxTypeSchemas } from './schema';
3
+ import { RawTxObject, TxTypeSchemas } from './schema';
4
4
  import { Tag } from './constants';
5
- /**
6
- * @category transaction builder
7
- */
8
- export interface BuiltTx<Tx extends TxSchema, Prefix extends Encoding> {
9
- tx: Encoded.Generic<Prefix>;
10
- rlpEncoded: Uint8Array;
11
- binary: Uint8Array;
12
- txObject: RawTxObject<Tx>;
13
- }
14
5
  /**
15
6
  * Build transaction hash
16
7
  * @category transaction builder
17
- * @param _params - Object with tx params
18
- * @param type - Transaction type
8
+ * @param params - Object with tx params
19
9
  * @param options - options
20
- * @param options.excludeKeys - Array of keys to exclude for validation and build
21
10
  * @param options.denomination - Denomination of amounts
22
11
  * @param options.prefix - Prefix of transaction
23
12
  * @throws {@link InvalidTxParamsError}
@@ -26,22 +15,15 @@ export interface BuiltTx<Tx extends TxSchema, Prefix extends Encoding> {
26
15
  * @returns object.rlpEncoded rlp encoded transaction
27
16
  * @returns object.binary binary transaction
28
17
  */
29
- export declare function buildTx<TxType extends Tag, Prefix>(_params: Omit<TxTypeSchemas[TxType], 'tag' | 'VSN'> & {
30
- VSN?: number;
31
- }, type: TxType, { excludeKeys, prefix, vsn, denomination, }?: {
32
- excludeKeys?: string[];
33
- prefix?: Encoding;
34
- vsn?: number;
18
+ export declare function buildTx<TxType extends Tag, E extends Encoding = Encoding.Transaction>(params: {
19
+ tag: TxType;
20
+ version?: number;
21
+ } & Omit<TxTypeSchemas[TxType], 'tag' | 'version'> & (TxType extends Tag.ContractCreateTx | Tag.ContractCallTx | Tag.ChannelOffChainUpdateCallContract | Tag.GaAttachTx | Tag.GaMetaTx ? {
22
+ gasMax?: number;
23
+ } : {}), { prefix, denomination, }?: {
24
+ prefix?: E;
35
25
  denomination?: AE_AMOUNT_FORMATS;
36
- }): BuiltTx<TxSchema, Prefix extends Encoding ? Prefix : Encoding.Transaction>;
37
- /**
38
- * @category transaction builder
39
- */
40
- export interface TxUnpacked<Tx extends TxSchema> {
41
- txType: Tag;
42
- tx: RawTxObject<Tx>;
43
- rlpEncoded: Uint8Array;
44
- }
26
+ }): Encoded.Generic<E>;
45
27
  /**
46
28
  * Unpack transaction hash
47
29
  * @category transaction builder
@@ -51,7 +33,7 @@ export interface TxUnpacked<Tx extends TxSchema> {
51
33
  * @returns object.tx Object with transaction param's
52
34
  * @returns object.txType Transaction type
53
35
  */
54
- export declare function unpackTx<TxType extends Tag>(encodedTx: Encoded.Transaction | Encoded.Poi, txType?: TxType): TxUnpacked<TxTypeSchemas[TxType]>;
36
+ export declare function unpackTx<TxType extends Tag>(encodedTx: Encoded.Transaction | Encoded.Poi, txType?: TxType): RawTxObject<TxTypeSchemas[TxType]>;
55
37
  /**
56
38
  * Build a transaction hash
57
39
  * @category transaction builder
@@ -1,7 +1,3 @@
1
- import _buffer from "buffer";
2
- const {
3
- Buffer: _Buffer
4
- } = _buffer;
5
1
  import _rlp from 'rlp';
6
2
  const {
7
3
  decode: rlpDecode,
@@ -10,144 +6,14 @@ const {
10
6
  import { decode, encode, Encoding } from "../../utils/encoder.mjs";
11
7
  import { AE_AMOUNT_FORMATS } from "../../utils/amount-formatter.mjs";
12
8
  import { hash } from "../../utils/crypto.mjs";
13
- import { FIELD_TYPES, TX_SCHEMA } from "./schema.mjs";
9
+ import { TX_SCHEMA } from "./schema.mjs";
14
10
  import { Tag } from "./constants.mjs";
15
11
  import { buildContractId, readInt } from "./helpers.mjs";
16
- import { toBytes } from "../../utils/bytes.mjs";
17
- import MPTree from "../../utils/mptree.mjs";
18
- import { ArgumentError, DecodeError, InvalidTxParamsError, SchemaNotFoundError } from "../../utils/errors.mjs";
12
+ import { ArgumentError, DecodeError, SchemaNotFoundError } from "../../utils/errors.mjs";
19
13
  import { isKeyOfObject } from "../../utils/other.mjs";
20
14
  /**
21
15
  * JavaScript-based Transaction builder
22
16
  */
23
- // SERIALIZE AND DESERIALIZE PART
24
- function deserializeField(value, type, prefix) {
25
- if (value == null) return '';
26
- switch (type) {
27
- case FIELD_TYPES.ctVersion:
28
- {
29
- const [vm,, abi] = value;
30
- return {
31
- vmVersion: readInt(_Buffer.from([vm])),
32
- abiVersion: readInt(_Buffer.from([abi]))
33
- };
34
- }
35
- case FIELD_TYPES.bool:
36
- return value[0] === 1;
37
- case FIELD_TYPES.binary:
38
- return encode(value, prefix);
39
- case FIELD_TYPES.stateTree:
40
- return encode(value, Encoding.StateTrees);
41
- case FIELD_TYPES.string:
42
- return value.toString();
43
- case FIELD_TYPES.payload:
44
- return encode(value, Encoding.Bytearray);
45
- case FIELD_TYPES.rlpBinary:
46
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
47
- return unpackTx(encode(value, Encoding.Transaction));
48
- case FIELD_TYPES.rlpBinaries:
49
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
50
- return value.map(v => unpackTx(encode(v, Encoding.Transaction)));
51
- case FIELD_TYPES.rawBinary:
52
- return value;
53
- case FIELD_TYPES.hex:
54
- return value.toString('hex');
55
- case FIELD_TYPES.offChainUpdates:
56
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
57
- return value.map(v => unpackTx(encode(v, Encoding.Transaction)));
58
- case FIELD_TYPES.callStack:
59
- // TODO: fix this
60
- return [readInt(value)];
61
- case FIELD_TYPES.mptrees:
62
- return value.map(t => new MPTree(t));
63
- case FIELD_TYPES.sophiaCodeTypeInfo:
64
- return value.reduce((acc, _ref) => {
65
- let [funHash, fnName, argType, outType] = _ref;
66
- return {
67
- ...acc,
68
- [fnName.toString()]: {
69
- funHash,
70
- argType,
71
- outType
72
- }
73
- };
74
- }, {});
75
- default:
76
- if (typeof type === 'number') return value;
77
- return type.deserialize(value);
78
- }
79
- }
80
- function serializeField(value, type, params) {
81
- var _value$rlpEncoded;
82
- switch (type) {
83
- case FIELD_TYPES.bool:
84
- return _Buffer.from([value === true ? 1 : 0]);
85
- case FIELD_TYPES.binary:
86
- return decode(value);
87
- case FIELD_TYPES.stateTree:
88
- return decode(value);
89
- case FIELD_TYPES.hex:
90
- return _Buffer.from(value, 'hex');
91
- case FIELD_TYPES.signatures:
92
- return value.map(_Buffer.from);
93
- case FIELD_TYPES.payload:
94
- return typeof value === 'string' && value.split('_')[0] === 'ba' ? decode(value) : toBytes(value);
95
- case FIELD_TYPES.string:
96
- return toBytes(value);
97
- case FIELD_TYPES.rlpBinary:
98
- return (_value$rlpEncoded = value.rlpEncoded) !== null && _value$rlpEncoded !== void 0 ? _value$rlpEncoded : value;
99
- case FIELD_TYPES.mptrees:
100
- return value.map(t => t.serialize());
101
- case FIELD_TYPES.ctVersion:
102
- return _Buffer.from([...toBytes(value.vmVersion), 0, ...toBytes(value.abiVersion)]);
103
- default:
104
- if (typeof type === 'number') return value;
105
- return type.serialize(value, params);
106
- }
107
- }
108
- function validateField(value, type) {
109
- // All fields are required
110
- if (value == null) return 'Field is required';
111
-
112
- // Validate type of value
113
- switch (type) {
114
- case FIELD_TYPES.ctVersion:
115
- if (!(Boolean(value.abiVersion) && Boolean(value.vmVersion))) {
116
- return 'Value must be an object with "vmVersion" and "abiVersion" fields';
117
- }
118
- return undefined;
119
- default:
120
- return undefined;
121
- }
122
- }
123
-
124
- /**
125
- * Validate transaction params
126
- * @category transaction builder
127
- * @param params - Object with tx params
128
- * @param schema - Transaction schema
129
- * @param excludeKeys - Array of keys to exclude for validation
130
- * @returns Object with validation errors
131
- */
132
- function validateParams(params, schema, _ref2) {
133
- let {
134
- excludeKeys = []
135
- } = _ref2;
136
- const optionalFields = ['payload', 'nameFee', 'deposit', 'gasPrice', 'fee', 'gasLimit', 'amount'];
137
- return Object.fromEntries(schema
138
- // TODO: allow optional keys in schema
139
- .filter(_ref3 => {
140
- let [key] = _ref3;
141
- return !excludeKeys.includes(key) && !optionalFields.includes(key);
142
- }).map(_ref4 => {
143
- let [key, type] = _ref4;
144
- return [key, validateField(params[key], type)];
145
- }).filter(_ref5 => {
146
- let [, message] = _ref5;
147
- return message;
148
- }));
149
- }
150
-
151
17
  /**
152
18
  * Unpack binary transaction
153
19
  * @category transaction builder
@@ -156,25 +22,27 @@ function validateParams(params, schema, _ref2) {
156
22
  * @returns Object with transaction field's
157
23
  */
158
24
  function unpackRawTx(binary, schema) {
159
- return schema.reduce((acc, _ref6, index) => {
160
- let [key, fieldType, prefix] = _ref6;
161
- return Object.assign(acc, {
162
- [key]: deserializeField(binary[index], fieldType, prefix)
25
+ if (binary.length !== schema.length) {
26
+ throw new ArgumentError('Transaction RLP length', schema.length, binary.length);
27
+ }
28
+ return schema.reduce((acc, _ref, index) => {
29
+ let [name, field] = _ref;
30
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
31
+ const deserialized = field.deserialize(binary[index], {
32
+ unpackTx
163
33
  });
34
+ return {
35
+ ...acc,
36
+ [name]: deserialized
37
+ };
164
38
  }, {});
165
39
  }
166
40
 
167
- /**
168
- * @category transaction builder
169
- */
170
-
171
41
  /**
172
42
  * Build transaction hash
173
43
  * @category transaction builder
174
- * @param _params - Object with tx params
175
- * @param type - Transaction type
44
+ * @param params - Object with tx params
176
45
  * @param options - options
177
- * @param options.excludeKeys - Array of keys to exclude for validation and build
178
46
  * @param options.denomination - Denomination of amounts
179
47
  * @param options.prefix - Prefix of transaction
180
48
  * @throws {@link InvalidTxParamsError}
@@ -183,63 +51,38 @@ function unpackRawTx(binary, schema) {
183
51
  * @returns object.rlpEncoded rlp encoded transaction
184
52
  * @returns object.binary binary transaction
185
53
  */
186
- export function buildTx(_params, type) {
187
- var _vsn;
54
+ export function buildTx(params) {
55
+ var _params$version;
188
56
  let {
189
- excludeKeys = [],
190
- prefix = Encoding.Transaction,
191
- vsn,
57
+ prefix,
192
58
  denomination = AE_AMOUNT_FORMATS.AETTOS
193
- } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
194
- const schemas = TX_SCHEMA[type];
195
- (_vsn = vsn) !== null && _vsn !== void 0 ? _vsn : vsn = Math.max(...Object.keys(schemas).map(a => +a));
196
- if (!isKeyOfObject(vsn, schemas)) throw new SchemaNotFoundError('serialization', Tag[type], vsn);
197
- const schema = schemas[vsn];
198
- const params = _params;
199
- params.VSN = vsn;
200
- params.tag = type;
201
- params.denomination = denomination;
202
- const filteredSchema = schema.filter(_ref7 => {
203
- let [key] = _ref7;
204
- return !excludeKeys.includes(key);
205
- });
206
-
207
- // Validation
208
- const valid = validateParams(params, schema, {
209
- excludeKeys
210
- });
211
- if (Object.keys(valid).length > 0) {
212
- throw new InvalidTxParamsError(`Transaction build error. ${JSON.stringify(valid)}`);
59
+ } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
60
+ const schemas = TX_SCHEMA[params.tag];
61
+ (_params$version = params.version) !== null && _params$version !== void 0 ? _params$version : params.version = Math.max(...Object.keys(schemas).map(a => +a));
62
+ if (!isKeyOfObject(params.version, schemas)) {
63
+ throw new SchemaNotFoundError('serialization', Tag[params.tag], params.version);
213
64
  }
214
- const binary = filteredSchema.map(_ref8 => {
215
- let [key, fieldType] = _ref8;
216
- return serializeField(params[key], fieldType, {
65
+ const schema = schemas[params.version];
66
+ const binary = schema.map(_ref2 => {
67
+ let [key, field] = _ref2;
68
+ return field.serialize(params[key], {
217
69
  ...params,
218
- txType: type,
70
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
71
+ unpackTx,
72
+ buildTx,
73
+ denomination,
219
74
  rebuildTx: overrideParams => buildTx({
220
75
  ...params,
221
76
  ...overrideParams
222
- }, type, {
223
- excludeKeys,
224
- prefix: Encoding.Transaction,
225
- vsn,
77
+ }, {
226
78
  denomination
227
79
  })
228
80
  });
229
- }).filter(e => e !== undefined);
230
- const rlpEncoded = rlpEncode(binary);
231
- const tx = encode(rlpEncoded, prefix);
232
- return {
233
- tx,
234
- rlpEncoded,
235
- binary,
236
- txObject: unpackRawTx(binary, schema)
237
- };
238
- }
81
+ });
239
82
 
240
- /**
241
- * @category transaction builder
242
- */
83
+ // @ts-expect-error looks like a TypeScript edge case
84
+ return encode(rlpEncode(binary), prefix !== null && prefix !== void 0 ? prefix : Encoding.Transaction);
85
+ }
243
86
 
244
87
  /**
245
88
  * Unpack transaction hash
@@ -251,19 +94,14 @@ export function buildTx(_params, type) {
251
94
  * @returns object.txType Transaction type
252
95
  */
253
96
  export function unpackTx(encodedTx, txType) {
254
- const rlpEncoded = decode(encodedTx);
255
- const binary = rlpDecode(rlpEncoded);
256
- const objId = +readInt(binary[0]);
257
- if (!isKeyOfObject(objId, TX_SCHEMA)) throw new DecodeError(`Unknown transaction tag: ${objId}`);
258
- if (txType != null && txType !== objId) throw new DecodeError(`Expected transaction to have ${Tag[txType]} tag, got ${Tag[objId]} instead`);
259
- const vsn = +readInt(binary[1]);
260
- if (!isKeyOfObject(vsn, TX_SCHEMA[objId])) throw new SchemaNotFoundError('deserialization', `tag ${objId}`, vsn);
261
- const schema = TX_SCHEMA[objId][vsn];
262
- return {
263
- txType: objId,
264
- tx: unpackRawTx(binary, schema),
265
- rlpEncoded
266
- };
97
+ const binary = rlpDecode(decode(encodedTx));
98
+ const tag = +readInt(binary[0]);
99
+ if (!isKeyOfObject(tag, TX_SCHEMA)) throw new DecodeError(`Unknown transaction tag: ${tag}`);
100
+ if (txType != null && txType !== tag) throw new DecodeError(`Expected transaction to have ${Tag[txType]} tag, got ${Tag[tag]} instead`);
101
+ const version = +readInt(binary[1]);
102
+ if (!isKeyOfObject(version, TX_SCHEMA[tag])) throw new SchemaNotFoundError('deserialization', `tag ${tag}`, version);
103
+ const schema = TX_SCHEMA[tag][version];
104
+ return unpackRawTx(binary, schema);
267
105
  }
268
106
 
269
107
  /**
@@ -285,12 +123,13 @@ export function buildTxHash(rawTx) {
285
123
  */
286
124
  export function buildContractIdByContractTx(contractTx) {
287
125
  const {
288
- txType,
289
- tx
126
+ tag,
127
+ ownerId,
128
+ nonce
290
129
  } = unpackTx(contractTx);
291
- if (![Tag.ContractCreateTx, Tag.GaAttachTx].includes(txType)) {
292
- throw new ArgumentError('contractCreateTx', 'a contractCreateTx or gaAttach', txType);
130
+ if (![Tag.ContractCreateTx, Tag.GaAttachTx].includes(tag)) {
131
+ throw new ArgumentError('contractCreateTx', 'a contractCreateTx or gaAttach', tag);
293
132
  }
294
- return buildContractId(tx.ownerId, +tx.nonce);
133
+ return buildContractId(ownerId, +nonce);
295
134
  }
296
135
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["decode","encode","Encoding","AE_AMOUNT_FORMATS","hash","FIELD_TYPES","TX_SCHEMA","Tag","buildContractId","readInt","toBytes","MPTree","ArgumentError","DecodeError","InvalidTxParamsError","SchemaNotFoundError","isKeyOfObject","deserializeField","value","type","prefix","ctVersion","vm","abi","vmVersion","from","abiVersion","bool","binary","stateTree","StateTrees","string","toString","payload","Bytearray","rlpBinary","unpackTx","Transaction","rlpBinaries","map","v","rawBinary","hex","offChainUpdates","callStack","mptrees","t","sophiaCodeTypeInfo","reduce","acc","funHash","fnName","argType","outType","deserialize","serializeField","params","signatures","split","rlpEncoded","serialize","validateField","Boolean","undefined","validateParams","schema","excludeKeys","optionalFields","Object","fromEntries","filter","key","includes","message","unpackRawTx","index","fieldType","assign","buildTx","_params","vsn","denomination","AETTOS","schemas","Math","max","keys","a","VSN","tag","filteredSchema","valid","length","JSON","stringify","txType","rebuildTx","overrideParams","e","rlpEncode","tx","txObject","encodedTx","rlpDecode","objId","buildTxHash","rawTx","data","startsWith","TxHash","buildContractIdByContractTx","contractTx","ContractCreateTx","GaAttachTx","ownerId","nonce"],"sources":["../../../src/tx/builder/index.ts"],"sourcesContent":["import { decode as rlpDecode, encode as rlpEncode, NestedUint8Array } from 'rlp';\nimport {\n decode, encode, Encoded, Encoding,\n} from '../../utils/encoder';\nimport { AE_AMOUNT_FORMATS } from '../../utils/amount-formatter';\nimport { hash } from '../../utils/crypto';\nimport { Field } from './field-types';\nimport {\n FIELD_TYPES,\n RawTxObject,\n TX_SCHEMA,\n TxField,\n TxParamsCommon,\n TxSchema,\n TxTypeSchemas,\n} from './schema';\nimport { Tag } from './constants';\nimport { buildContractId, readInt } from './helpers';\nimport { toBytes } from '../../utils/bytes';\nimport MPTree, { MPTreeBinary } from '../../utils/mptree';\nimport {\n ArgumentError,\n DecodeError,\n InvalidTxParamsError,\n SchemaNotFoundError,\n} from '../../utils/errors';\nimport { isKeyOfObject } from '../../utils/other';\n\n/**\n * JavaScript-based Transaction builder\n */\n\n// SERIALIZE AND DESERIALIZE PART\nfunction deserializeField(\n value: any,\n type: FIELD_TYPES | Field,\n prefix?: Encoding | Encoding[],\n): any {\n if (value == null) return '';\n switch (type) {\n case FIELD_TYPES.ctVersion: {\n const [vm, , abi] = value;\n return {\n vmVersion: readInt(Buffer.from([vm])),\n abiVersion: readInt(Buffer.from([abi])),\n };\n }\n case FIELD_TYPES.bool:\n return value[0] === 1;\n case FIELD_TYPES.binary:\n return encode(value, prefix as Encoding);\n case FIELD_TYPES.stateTree:\n return encode(value, Encoding.StateTrees);\n case FIELD_TYPES.string:\n return value.toString();\n case FIELD_TYPES.payload:\n return encode(value, Encoding.Bytearray);\n case FIELD_TYPES.rlpBinary:\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return unpackTx(encode(value, Encoding.Transaction));\n case FIELD_TYPES.rlpBinaries:\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return value.map((v: Buffer) => unpackTx(encode(v, Encoding.Transaction)));\n case FIELD_TYPES.rawBinary:\n return value;\n case FIELD_TYPES.hex:\n return value.toString('hex');\n case FIELD_TYPES.offChainUpdates:\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return value.map((v: Buffer) => unpackTx(encode(v, Encoding.Transaction)));\n case FIELD_TYPES.callStack:\n // TODO: fix this\n return [readInt(value)];\n case FIELD_TYPES.mptrees:\n return value.map((t: MPTreeBinary) => new MPTree(t));\n case FIELD_TYPES.sophiaCodeTypeInfo:\n return value.reduce(\n (acc: object, [funHash, fnName, argType, outType]: [\n funHash: Buffer,\n fnName: string,\n argType: string,\n outType: string,\n ]) => ({\n ...acc,\n [fnName.toString()]: { funHash, argType, outType },\n }),\n {},\n );\n default:\n if (typeof type === 'number') return value;\n return type.deserialize(value);\n }\n}\n\nfunction serializeField(value: any, type: FIELD_TYPES | Field, params: any): any {\n switch (type) {\n case FIELD_TYPES.bool:\n return Buffer.from([(value === true) ? 1 : 0]);\n case FIELD_TYPES.binary:\n return decode(value);\n case FIELD_TYPES.stateTree:\n return decode(value);\n case FIELD_TYPES.hex:\n return Buffer.from(value, 'hex');\n case FIELD_TYPES.signatures:\n return value.map(Buffer.from);\n case FIELD_TYPES.payload:\n return typeof value === 'string' && value.split('_')[0] === 'ba'\n ? decode(value as Encoded.Bytearray)\n : toBytes(value);\n case FIELD_TYPES.string:\n return toBytes(value);\n case FIELD_TYPES.rlpBinary:\n return value.rlpEncoded ?? value;\n case FIELD_TYPES.mptrees:\n return value.map((t: MPTree) => t.serialize());\n case FIELD_TYPES.ctVersion:\n return Buffer.from([...toBytes(value.vmVersion), 0, ...toBytes(value.abiVersion)]);\n default:\n if (typeof type === 'number') return value;\n return type.serialize(value, params);\n }\n}\n\nfunction validateField(\n value: any,\n type: FIELD_TYPES | Field,\n): string | undefined {\n // All fields are required\n if (value == null) return 'Field is required';\n\n // Validate type of value\n switch (type) {\n case FIELD_TYPES.ctVersion:\n if (!(Boolean(value.abiVersion) && Boolean(value.vmVersion))) {\n return 'Value must be an object with \"vmVersion\" and \"abiVersion\" fields';\n }\n return undefined;\n default:\n return undefined;\n }\n}\n\n/**\n * Validate transaction params\n * @category transaction builder\n * @param params - Object with tx params\n * @param schema - Transaction schema\n * @param excludeKeys - Array of keys to exclude for validation\n * @returns Object with validation errors\n */\nfunction validateParams(\n params: any,\n schema: TxField[],\n { excludeKeys = [] }: { excludeKeys: string[] },\n): object {\n const optionalFields = ['payload', 'nameFee', 'deposit', 'gasPrice', 'fee', 'gasLimit', 'amount'];\n return Object.fromEntries(\n schema\n // TODO: allow optional keys in schema\n .filter(([key]) => !excludeKeys.includes(key) && !optionalFields.includes(key))\n .map(([key, type]) => [key, validateField(params[key], type)])\n .filter(([, message]) => message),\n );\n}\n\n/**\n * Unpack binary transaction\n * @category transaction builder\n * @param binary - Array with binary transaction field's\n * @param schema - Transaction schema\n * @returns Object with transaction field's\n */\nfunction unpackRawTx<Tx extends TxSchema>(\n binary: Uint8Array | NestedUint8Array,\n schema: TxField[],\n): RawTxObject<Tx> {\n return schema\n .reduce<any>(\n (\n acc,\n [key, fieldType, prefix],\n index,\n ) => Object.assign(acc, { [key]: deserializeField(binary[index], fieldType, prefix) }),\n {},\n );\n}\n\n/**\n * @category transaction builder\n */\nexport interface BuiltTx<Tx extends TxSchema, Prefix extends Encoding> {\n tx: Encoded.Generic<Prefix>;\n rlpEncoded: Uint8Array;\n binary: Uint8Array;\n txObject: RawTxObject<Tx>;\n}\n\n/**\n * Build transaction hash\n * @category transaction builder\n * @param _params - Object with tx params\n * @param type - Transaction type\n * @param options - options\n * @param options.excludeKeys - Array of keys to exclude for validation and build\n * @param options.denomination - Denomination of amounts\n * @param options.prefix - Prefix of transaction\n * @throws {@link InvalidTxParamsError}\n * @returns object\n * @returns object.tx Base64Check transaction hash with 'tx_' prefix\n * @returns object.rlpEncoded rlp encoded transaction\n * @returns object.binary binary transaction\n */\nexport function buildTx<TxType extends Tag, Prefix>(\n _params: Omit<TxTypeSchemas[TxType], 'tag' | 'VSN'> & { VSN?: number },\n type: TxType,\n {\n excludeKeys = [],\n prefix = Encoding.Transaction,\n vsn,\n denomination = AE_AMOUNT_FORMATS.AETTOS,\n }: {\n excludeKeys?: string[];\n prefix?: Encoding;\n vsn?: number;\n denomination?: AE_AMOUNT_FORMATS;\n } = {},\n): BuiltTx<TxSchema, Prefix extends Encoding ? Prefix : Encoding.Transaction> {\n const schemas = TX_SCHEMA[type];\n\n vsn ??= Math.max(...Object.keys(schemas).map((a) => +a));\n if (!isKeyOfObject(vsn, schemas)) throw new SchemaNotFoundError('serialization', Tag[type], vsn);\n\n const schema = schemas[vsn] as unknown as TxField[];\n\n const params = _params as TxParamsCommon & { onNode: Node; denomination?: AE_AMOUNT_FORMATS };\n params.VSN = vsn;\n params.tag = type;\n params.denomination = denomination;\n const filteredSchema = schema.filter(([key]) => !excludeKeys.includes(key));\n\n // Validation\n const valid = validateParams(params, schema, { excludeKeys });\n if (Object.keys(valid).length > 0) {\n throw new InvalidTxParamsError(`Transaction build error. ${JSON.stringify(valid)}`);\n }\n\n const binary = filteredSchema\n .map(([key, fieldType]: [keyof TxSchema, FIELD_TYPES, Encoding]) => (\n serializeField(\n params[key],\n fieldType,\n {\n ...params,\n txType: type,\n rebuildTx: (overrideParams: any) => buildTx(\n { ...params, ...overrideParams },\n type,\n {\n excludeKeys, prefix: Encoding.Transaction, vsn, denomination,\n },\n ),\n },\n )\n ))\n .filter((e) => e !== undefined);\n\n const rlpEncoded = rlpEncode(binary);\n const tx = encode(rlpEncoded, prefix);\n return {\n tx,\n rlpEncoded,\n binary,\n txObject: unpackRawTx<TxTypeSchemas[Tag]>(binary, schema),\n } as any;\n}\n\n/**\n * @category transaction builder\n */\nexport interface TxUnpacked<Tx extends TxSchema> {\n txType: Tag;\n tx: RawTxObject<Tx>;\n rlpEncoded: Uint8Array;\n}\n/**\n * Unpack transaction hash\n * @category transaction builder\n * @param encodedTx - Transaction to unpack\n * @param txType - Expected transaction type\n * @returns object\n * @returns object.tx Object with transaction param's\n * @returns object.txType Transaction type\n */\nexport function unpackTx<TxType extends Tag>(\n encodedTx: Encoded.Transaction | Encoded.Poi,\n txType?: TxType,\n): TxUnpacked<TxTypeSchemas[TxType]> {\n const rlpEncoded = decode(encodedTx);\n const binary = rlpDecode(rlpEncoded);\n const objId = +readInt(binary[0] as Buffer);\n if (!isKeyOfObject(objId, TX_SCHEMA)) throw new DecodeError(`Unknown transaction tag: ${objId}`);\n if (txType != null && txType !== objId) throw new DecodeError(`Expected transaction to have ${Tag[txType]} tag, got ${Tag[objId]} instead`);\n const vsn = +readInt(binary[1] as Buffer);\n if (!isKeyOfObject(vsn, TX_SCHEMA[objId])) throw new SchemaNotFoundError('deserialization', `tag ${objId}`, vsn);\n const schema = TX_SCHEMA[objId][vsn];\n return {\n txType: objId,\n tx: unpackRawTx<TxTypeSchemas[TxType]>(binary, schema),\n rlpEncoded,\n };\n}\n\n/**\n * Build a transaction hash\n * @category transaction builder\n * @param rawTx - base64 or rlp encoded transaction\n * @returns Transaction hash\n */\nexport function buildTxHash(rawTx: Encoded.Transaction | Uint8Array): Encoded.TxHash {\n const data = typeof rawTx === 'string' && rawTx.startsWith('tx_')\n ? decode(rawTx)\n : rawTx;\n return encode(hash(data), Encoding.TxHash);\n}\n\n/**\n * Build a contract public key by contractCreateTx or gaAttach\n * @category contract\n * @param contractTx - Transaction\n * @returns Contract public key\n */\nexport function buildContractIdByContractTx(\n contractTx: Encoded.Transaction,\n): Encoded.ContractAddress {\n const { txType, tx } = unpackTx<Tag.ContractCreateTx | Tag.GaAttachTx>(contractTx);\n if (![Tag.ContractCreateTx, Tag.GaAttachTx].includes(txType)) {\n throw new ArgumentError('contractCreateTx', 'a contractCreateTx or gaAttach', txType);\n }\n return buildContractId(tx.ownerId, +tx.nonce);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["decode","encode","Encoding","AE_AMOUNT_FORMATS","hash","TX_SCHEMA","Tag","buildContractId","readInt","ArgumentError","DecodeError","SchemaNotFoundError","isKeyOfObject","unpackRawTx","binary","schema","length","reduce","acc","index","name","field","deserialized","deserialize","unpackTx","buildTx","params","prefix","denomination","AETTOS","schemas","tag","version","Math","max","Object","keys","map","a","key","serialize","rebuildTx","overrideParams","rlpEncode","Transaction","encodedTx","txType","rlpDecode","buildTxHash","rawTx","data","startsWith","TxHash","buildContractIdByContractTx","contractTx","ownerId","nonce","ContractCreateTx","GaAttachTx","includes"],"sources":["../../../src/tx/builder/index.ts"],"sourcesContent":["import { decode as rlpDecode, encode as rlpEncode, NestedUint8Array } from 'rlp';\nimport {\n decode, encode, Encoded, Encoding,\n} from '../../utils/encoder';\nimport { AE_AMOUNT_FORMATS } from '../../utils/amount-formatter';\nimport { hash } from '../../utils/crypto';\nimport { BinaryData, Field } from './field-types';\nimport {\n RawTxObject, TX_SCHEMA, TxField, TxSchema, TxTypeSchemas,\n} from './schema';\nimport { Tag } from './constants';\nimport { buildContractId, readInt } from './helpers';\nimport { ArgumentError, DecodeError, SchemaNotFoundError } from '../../utils/errors';\nimport { isKeyOfObject } from '../../utils/other';\n\n/**\n * JavaScript-based Transaction builder\n */\n\n/**\n * Unpack binary transaction\n * @category transaction builder\n * @param binary - Array with binary transaction field's\n * @param schema - Transaction schema\n * @returns Object with transaction field's\n */\nfunction unpackRawTx<Tx extends TxSchema>(\n binary: Uint8Array | NestedUint8Array,\n schema: TxField[],\n): RawTxObject<Tx> {\n if (binary.length !== schema.length) {\n throw new ArgumentError('Transaction RLP length', schema.length, binary.length);\n }\n return schema\n .reduce<any>(\n (\n acc,\n [name, field],\n index,\n ) => {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n const deserialized = field.deserialize(binary[index] as BinaryData, { unpackTx });\n return { ...acc, [name]: deserialized };\n },\n {},\n );\n}\n\n/**\n * Build transaction hash\n * @category transaction builder\n * @param params - Object with tx params\n * @param options - options\n * @param options.denomination - Denomination of amounts\n * @param options.prefix - Prefix of transaction\n * @throws {@link InvalidTxParamsError}\n * @returns object\n * @returns object.tx Base64Check transaction hash with 'tx_' prefix\n * @returns object.rlpEncoded rlp encoded transaction\n * @returns object.binary binary transaction\n */\nexport function buildTx<\n TxType extends Tag,\n E extends Encoding = Encoding.Transaction,\n>(\n params: { tag: TxType; version?: number } & Omit<TxTypeSchemas[TxType], 'tag' | 'version'>\n // TODO: get it from gas-limit.ts somehow\n & (TxType extends Tag.ContractCreateTx | Tag.ContractCallTx\n | Tag.ChannelOffChainUpdateCallContract | Tag.GaAttachTx | Tag.GaMetaTx\n ? { gasMax?: number } : {}),\n {\n prefix,\n denomination = AE_AMOUNT_FORMATS.AETTOS,\n }: {\n prefix?: E;\n denomination?: AE_AMOUNT_FORMATS;\n } = {},\n): Encoded.Generic<E> {\n const schemas = TX_SCHEMA[params.tag];\n params.version ??= Math.max(...Object.keys(schemas).map((a) => +a));\n if (!isKeyOfObject(params.version, schemas)) {\n throw new SchemaNotFoundError('serialization', Tag[params.tag], params.version);\n }\n const schema = schemas[params.version] as unknown as TxField[];\n\n const binary = schema.map(([key, field]: [keyof TxSchema, Field]) => (\n field.serialize(\n params[key],\n {\n ...params,\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n unpackTx,\n buildTx,\n denomination,\n rebuildTx: (overrideParams: any) => buildTx(\n { ...params, ...overrideParams },\n { denomination },\n ),\n },\n )\n ));\n\n // @ts-expect-error looks like a TypeScript edge case\n return encode(rlpEncode(binary), prefix ?? Encoding.Transaction);\n}\n\n/**\n * Unpack transaction hash\n * @category transaction builder\n * @param encodedTx - Transaction to unpack\n * @param txType - Expected transaction type\n * @returns object\n * @returns object.tx Object with transaction param's\n * @returns object.txType Transaction type\n */\nexport function unpackTx<TxType extends Tag>(\n encodedTx: Encoded.Transaction | Encoded.Poi,\n txType?: TxType,\n): RawTxObject<TxTypeSchemas[TxType]> {\n const binary = rlpDecode(decode(encodedTx));\n const tag = +readInt(binary[0] as Buffer);\n if (!isKeyOfObject(tag, TX_SCHEMA)) throw new DecodeError(`Unknown transaction tag: ${tag}`);\n if (txType != null && txType !== tag) throw new DecodeError(`Expected transaction to have ${Tag[txType]} tag, got ${Tag[tag]} instead`);\n const version = +readInt(binary[1] as Buffer);\n if (!isKeyOfObject(version, TX_SCHEMA[tag])) throw new SchemaNotFoundError('deserialization', `tag ${tag}`, version);\n const schema = TX_SCHEMA[tag][version];\n return unpackRawTx<TxTypeSchemas[TxType]>(binary, schema);\n}\n\n/**\n * Build a transaction hash\n * @category transaction builder\n * @param rawTx - base64 or rlp encoded transaction\n * @returns Transaction hash\n */\nexport function buildTxHash(rawTx: Encoded.Transaction | Uint8Array): Encoded.TxHash {\n const data = typeof rawTx === 'string' && rawTx.startsWith('tx_')\n ? decode(rawTx)\n : rawTx;\n return encode(hash(data), Encoding.TxHash);\n}\n\n/**\n * Build a contract public key by contractCreateTx or gaAttach\n * @category contract\n * @param contractTx - Transaction\n * @returns Contract public key\n */\nexport function buildContractIdByContractTx(\n contractTx: Encoded.Transaction,\n): Encoded.ContractAddress {\n const { tag, ownerId, nonce } = unpackTx<Tag.ContractCreateTx | Tag.GaAttachTx>(contractTx);\n if (![Tag.ContractCreateTx, Tag.GaAttachTx].includes(tag)) {\n throw new ArgumentError('contractCreateTx', 'a contractCreateTx or gaAttach', tag);\n }\n return buildContractId(ownerId, +nonce);\n}\n"],"mappings":"AAAA,iBAA2E,KAAK;AAAC;EAAA;EAAA;AAAA;AAAA,SAE/EA,MAAM,EAAEC,MAAM,EAAWC,QAAQ;AAAA,SAE1BC,iBAAiB;AAAA,SACjBC,IAAI;AAAA,SAGEC,SAAS;AAAA,SAEfC,GAAG;AAAA,SACHC,eAAe,EAAEC,OAAO;AAAA,SACxBC,aAAa,EAAEC,WAAW,EAAEC,mBAAmB;AAAA,SAC/CC,aAAa;AAEtB;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,WAAW,CAClBC,MAAqC,EACrCC,MAAiB,EACA;EACjB,IAAID,MAAM,CAACE,MAAM,KAAKD,MAAM,CAACC,MAAM,EAAE;IACnC,MAAM,IAAIP,aAAa,CAAC,wBAAwB,EAAEM,MAAM,CAACC,MAAM,EAAEF,MAAM,CAACE,MAAM,CAAC;EACjF;EACA,OAAOD,MAAM,CACVE,MAAM,CACP,CACEC,GAAG,QAEHC,KAAK,KACF;IAAA,IAFH,CAACC,IAAI,EAAEC,KAAK,CAAC;IAGb;IACA,MAAMC,YAAY,GAAGD,KAAK,CAACE,WAAW,CAACT,MAAM,CAACK,KAAK,CAAC,EAAgB;MAAEK;IAAS,CAAC,CAAC;IACjF,OAAO;MAAE,GAAGN,GAAG;MAAE,CAACE,IAAI,GAAGE;IAAa,CAAC;EACzC,CAAC,EACD,CAAC,CAAC,CACH;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,OAAO,CAIrBC,MAI6B,EAQT;EAAA;EAAA,IAPpB;IACEC,MAAM;IACNC,YAAY,GAAGzB,iBAAiB,CAAC0B;EAInC,CAAC,uEAAG,CAAC,CAAC;EAEN,MAAMC,OAAO,GAAGzB,SAAS,CAACqB,MAAM,CAACK,GAAG,CAAC;EACrC,mBAAAL,MAAM,CAACM,OAAO,6DAAdN,MAAM,CAACM,OAAO,GAAKC,IAAI,CAACC,GAAG,CAAC,GAAGC,MAAM,CAACC,IAAI,CAACN,OAAO,CAAC,CAACO,GAAG,CAAEC,CAAC,IAAK,CAACA,CAAC,CAAC,CAAC;EACnE,IAAI,CAAC1B,aAAa,CAACc,MAAM,CAACM,OAAO,EAAEF,OAAO,CAAC,EAAE;IAC3C,MAAM,IAAInB,mBAAmB,CAAC,eAAe,EAAEL,GAAG,CAACoB,MAAM,CAACK,GAAG,CAAC,EAAEL,MAAM,CAACM,OAAO,CAAC;EACjF;EACA,MAAMjB,MAAM,GAAGe,OAAO,CAACJ,MAAM,CAACM,OAAO,CAAyB;EAE9D,MAAMlB,MAAM,GAAGC,MAAM,CAACsB,GAAG,CAAC;IAAA,IAAC,CAACE,GAAG,EAAElB,KAAK,CAA0B;IAAA,OAC9DA,KAAK,CAACmB,SAAS,CACbd,MAAM,CAACa,GAAG,CAAC,EACX;MACE,GAAGb,MAAM;MACT;MACAF,QAAQ;MACRC,OAAO;MACPG,YAAY;MACZa,SAAS,EAAGC,cAAmB,IAAKjB,OAAO,CACzC;QAAE,GAAGC,MAAM;QAAE,GAAGgB;MAAe,CAAC,EAChC;QAAEd;MAAa,CAAC;IAEpB,CAAC,CACF;EAAA,CACF,CAAC;;EAEF;EACA,OAAO3B,MAAM,CAAC0C,SAAS,CAAC7B,MAAM,CAAC,EAAEa,MAAM,aAANA,MAAM,cAANA,MAAM,GAAIzB,QAAQ,CAAC0C,WAAW,CAAC;AAClE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASpB,QAAQ,CACtBqB,SAA4C,EAC5CC,MAAe,EACqB;EACpC,MAAMhC,MAAM,GAAGiC,SAAS,CAAC/C,MAAM,CAAC6C,SAAS,CAAC,CAAC;EAC3C,MAAMd,GAAG,GAAG,CAACvB,OAAO,CAACM,MAAM,CAAC,CAAC,CAAC,CAAW;EACzC,IAAI,CAACF,aAAa,CAACmB,GAAG,EAAE1B,SAAS,CAAC,EAAE,MAAM,IAAIK,WAAW,CAAE,4BAA2BqB,GAAI,EAAC,CAAC;EAC5F,IAAIe,MAAM,IAAI,IAAI,IAAIA,MAAM,KAAKf,GAAG,EAAE,MAAM,IAAIrB,WAAW,CAAE,gCAA+BJ,GAAG,CAACwC,MAAM,CAAE,aAAYxC,GAAG,CAACyB,GAAG,CAAE,UAAS,CAAC;EACvI,MAAMC,OAAO,GAAG,CAACxB,OAAO,CAACM,MAAM,CAAC,CAAC,CAAC,CAAW;EAC7C,IAAI,CAACF,aAAa,CAACoB,OAAO,EAAE3B,SAAS,CAAC0B,GAAG,CAAC,CAAC,EAAE,MAAM,IAAIpB,mBAAmB,CAAC,iBAAiB,EAAG,OAAMoB,GAAI,EAAC,EAAEC,OAAO,CAAC;EACpH,MAAMjB,MAAM,GAAGV,SAAS,CAAC0B,GAAG,CAAC,CAACC,OAAO,CAAC;EACtC,OAAOnB,WAAW,CAAwBC,MAAM,EAAEC,MAAM,CAAC;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASiC,WAAW,CAACC,KAAuC,EAAkB;EACnF,MAAMC,IAAI,GAAG,OAAOD,KAAK,KAAK,QAAQ,IAAIA,KAAK,CAACE,UAAU,CAAC,KAAK,CAAC,GAC7DnD,MAAM,CAACiD,KAAK,CAAC,GACbA,KAAK;EACT,OAAOhD,MAAM,CAACG,IAAI,CAAC8C,IAAI,CAAC,EAAEhD,QAAQ,CAACkD,MAAM,CAAC;AAC5C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,2BAA2B,CACzCC,UAA+B,EACN;EACzB,MAAM;IAAEvB,GAAG;IAAEwB,OAAO;IAAEC;EAAM,CAAC,GAAGhC,QAAQ,CAAwC8B,UAAU,CAAC;EAC3F,IAAI,CAAC,CAAChD,GAAG,CAACmD,gBAAgB,EAAEnD,GAAG,CAACoD,UAAU,CAAC,CAACC,QAAQ,CAAC5B,GAAG,CAAC,EAAE;IACzD,MAAM,IAAItB,aAAa,CAAC,kBAAkB,EAAE,gCAAgC,EAAEsB,GAAG,CAAC;EACpF;EACA,OAAOxB,eAAe,CAACgD,OAAO,EAAE,CAACC,KAAK,CAAC;AACzC"}