@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
package/es/tx/index.mjs CHANGED
@@ -21,82 +21,24 @@
21
21
  * the creation of transactions to {@link Node}.
22
22
  * These methods provide ability to create native transactions.
23
23
  */
24
- import { ABI_VERSIONS, PROTOCOL_VM_ABI, TX_TTL } from "./builder/schema.mjs";
25
- import { Tag } from "./builder/constants.mjs";
26
- import { ArgumentError, UnsupportedProtocolError, UnknownTxError, InvalidTxParamsError } from "../utils/errors.mjs";
24
+ import { TX_TTL } from "./builder/schema.mjs";
25
+ import { ConsensusProtocolVersion, Tag } from "./builder/constants.mjs";
26
+ import { ArgumentError, InvalidTxParamsError } from "../utils/errors.mjs";
27
27
  import { buildTx as syncBuildTx, unpackTx } from "./builder/index.mjs";
28
- import { isAccountNotFoundError, isKeyOfObject } from "../utils/other.mjs";
29
- async function getVmVersion(txType, _ref) {
30
- var _abiVersion, _vmVersion;
31
- let {
32
- vmVersion,
33
- abiVersion,
34
- onNode
35
- } = _ref;
36
- const {
37
- consensusProtocolVersion
38
- } = await onNode.getNodeInfo();
39
- if (!isKeyOfObject(consensusProtocolVersion, PROTOCOL_VM_ABI)) {
40
- throw new UnsupportedProtocolError('Not supported consensus protocol version');
41
- }
42
- const supportedProtocol = PROTOCOL_VM_ABI[consensusProtocolVersion];
43
- if (!isKeyOfObject(txType, supportedProtocol)) {
44
- throw new UnknownTxError('Not supported tx type');
45
- }
46
- const protocolForTX = supportedProtocol[txType];
47
- (_abiVersion = abiVersion) !== null && _abiVersion !== void 0 ? _abiVersion : abiVersion = protocolForTX.abiVersion[0];
48
- (_vmVersion = vmVersion) !== null && _vmVersion !== void 0 ? _vmVersion : vmVersion = protocolForTX.vmVersion[0];
49
- return {
50
- vmVersion,
51
- abiVersion
52
- };
53
- }
54
-
55
- /**
56
- * Calculate fee, get absolute ttl (ttl + height), get account nonce
57
- * @category transaction builder
58
- * @param txType - Type of transaction
59
- * @param params - Object which contains all tx data
60
- * @returns Object with account nonce, absolute ttl and transaction fee
61
- */
62
- async function prepareTxParams(txType, _ref2) {
63
- var _nonce;
64
- let {
65
- senderId,
66
- nonce,
67
- ttl = TX_TTL,
68
- absoluteTtl,
69
- strategy,
70
- onNode
71
- } = _ref2;
72
- (_nonce = nonce) !== null && _nonce !== void 0 ? _nonce : nonce = (await onNode.getAccountNextNonce(senderId, {
73
- strategy
74
- }).catch(error => {
75
- if (!isAccountNotFoundError(error)) throw error;
76
- return {
77
- nextNonce: 1
78
- };
79
- })).nextNonce;
80
- if (ttl !== 0) {
81
- if (ttl < 0) throw new ArgumentError('ttl', 'greater or equal to 0', ttl);
82
- ttl += absoluteTtl === true ? 0 : (await onNode.getCurrentKeyBlock()).height;
83
- }
84
- return {
85
- ttl,
86
- nonce
87
- };
88
- }
89
-
28
+ import { isAccountNotFoundError } from "../utils/other.mjs";
90
29
  // TODO: find a better name or rearrange methods
91
30
  /**
92
31
  * @category transaction builder
93
32
  */
94
- export async function _buildTx(txType, _ref3) {
33
+ export async function _buildTx(txType, _ref) {
34
+ var _params$nonce, _params$ttl;
95
35
  let {
96
36
  denomination,
97
37
  absoluteTtl,
38
+ strategy,
39
+ onNode,
98
40
  ..._params
99
- } = _ref3;
41
+ } = _ref;
100
42
  // TODO: avoid this assertion
101
43
  const params = _params;
102
44
  let senderKey;
@@ -137,19 +79,12 @@ export async function _buildTx(txType, _ref3) {
137
79
  default:
138
80
  throw new ArgumentError('txType', 'valid transaction type', txType);
139
81
  }
140
- // TODO: move specific cases to field-types
141
- if ([Tag.ContractCreateTx, Tag.GaAttachTx].includes(txType)) {
142
- params.ctVersion = await getVmVersion(Tag.ContractCreateTx, {
143
- ...params,
144
- ...params.ctVersion
145
- });
146
- }
147
- if ([Tag.ContractCallTx, Tag.GaMetaTx].includes(txType)) {
148
- params.abiVersion = (await getVmVersion(Tag.ContractCallTx, params)).abiVersion;
149
- }
150
- if (txType === Tag.OracleRegisterTx) {
151
- var _params$abiVersion;
152
- (_params$abiVersion = params.abiVersion) !== null && _params$abiVersion !== void 0 ? _params$abiVersion : params.abiVersion = ABI_VERSIONS.NO_ABI;
82
+ if (Object.keys(ConsensusProtocolVersion).length !== 2 && ((Tag.ContractCreateTx === txType || Tag.GaAttachTx === txType) && params.ctVersion == null || (Tag.ContractCallTx === txType || Tag.GaMetaTx === txType) && params.abiVersion == null)) {
83
+ const {
84
+ consensusProtocolVersion
85
+ } = await onNode.getNodeInfo();
86
+ // @ts-expect-error remove after fixing buildTx types
87
+ params.consensusProtocolVersion = consensusProtocolVersion;
153
88
  }
154
89
  if (txType === Tag.PayingForTx) {
155
90
  params.tx = unpackTx(params.tx);
@@ -157,16 +92,24 @@ export async function _buildTx(txType, _ref3) {
157
92
  const senderId = params[senderKey];
158
93
  // TODO: do this check on TypeScript level
159
94
  if (senderId == null) throw new InvalidTxParamsError(`Transaction field ${senderKey} is missed`);
160
- const extraParams = await prepareTxParams(txType, {
161
- ...params,
162
- senderId,
163
- absoluteTtl
164
- });
95
+ (_params$nonce = params.nonce) !== null && _params$nonce !== void 0 ? _params$nonce : params.nonce = (await onNode.getAccountNextNonce(senderId, {
96
+ strategy
97
+ }).catch(error => {
98
+ if (!isAccountNotFoundError(error)) throw error;
99
+ return {
100
+ nextNonce: 1
101
+ };
102
+ })).nextNonce;
103
+ (_params$ttl = params.ttl) !== null && _params$ttl !== void 0 ? _params$ttl : params.ttl = TX_TTL;
104
+ if (params.ttl !== 0) {
105
+ if (params.ttl < 0) throw new ArgumentError('ttl', 'greater or equal to 0', params.ttl);
106
+ params.ttl += absoluteTtl === true ? 0 : (await onNode.getCurrentKeyBlock()).height;
107
+ }
165
108
  return syncBuildTx({
166
109
  ...params,
167
- ...extraParams
168
- }, txType, {
110
+ tag: txType
111
+ }, {
169
112
  denomination
170
- }).tx;
113
+ });
171
114
  }
172
115
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["ABI_VERSIONS","PROTOCOL_VM_ABI","TX_TTL","Tag","ArgumentError","UnsupportedProtocolError","UnknownTxError","InvalidTxParamsError","buildTx","syncBuildTx","unpackTx","isAccountNotFoundError","isKeyOfObject","getVmVersion","txType","vmVersion","abiVersion","onNode","consensusProtocolVersion","getNodeInfo","supportedProtocol","protocolForTX","prepareTxParams","senderId","nonce","ttl","absoluteTtl","strategy","getAccountNextNonce","catch","error","nextNonce","getCurrentKeyBlock","height","_buildTx","denomination","_params","params","senderKey","SpendTx","OracleQueryTx","NameClaimTx","NameUpdateTx","NameRevokeTx","NameTransferTx","NamePreclaimTx","OracleRegisterTx","ContractCreateTx","GaAttachTx","GaMetaTx","ContractCallTx","OracleExtendTx","OracleResponseTx","ChannelCloseSoloTx","ChannelSlashTx","ChannelSettleTx","ChannelSnapshotSoloTx","PayingForTx","includes","ctVersion","NO_ABI","tx","extraParams"],"sources":["../../src/tx/index.ts"],"sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2022 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\n/**\n * Transaction methods\n *\n * This is implementation of [Tx](api/tx.md) relays\n * the creation of transactions to {@link Node}.\n * These methods provide ability to create native transactions.\n */\nimport BigNumber from 'bignumber.js';\nimport {\n ABI_VERSIONS, CtVersion, PROTOCOL_VM_ABI, TX_TTL, TxParamsCommon,\n} from './builder/schema';\nimport { Tag } from './builder/constants';\nimport {\n ArgumentError, UnsupportedProtocolError, UnknownTxError, InvalidTxParamsError,\n} from '../utils/errors';\nimport Node from '../Node';\nimport { Encoded } from '../utils/encoder';\nimport { buildTx as syncBuildTx, unpackTx } from './builder/index';\nimport { isAccountNotFoundError, isKeyOfObject } from '../utils/other';\nimport { AE_AMOUNT_FORMATS } from '../utils/amount-formatter';\n\ntype Int = number | string | BigNumber;\n\nexport type BuildTxOptions <TxType extends Tag, OmitFields extends string> =\n Omit<Parameters<typeof _buildTx<TxType>>[1], OmitFields>;\n\n/**\n * Validated vm/abi version or get default based on transaction type and NODE version\n * @category transaction builder\n * @param txType - Type of transaction\n * @param ctVersion - Object with vm and abi version fields\n * @returns Object with vm/abi version\n */\nasync function getVmVersion(\n txType: Tag.ContractCreateTx, ctVersion: Partial<CtVersion> & { onNode: Node }\n): Promise<CtVersion>;\nasync function getVmVersion(\n txType: Tag, ctVersion: Partial<Pick<CtVersion, 'abiVersion'>> & { onNode: Node }\n): Promise<Pick<CtVersion, 'abiVersion'>>;\nasync function getVmVersion(\n txType: Tag,\n { vmVersion, abiVersion, onNode }: Partial<CtVersion> & { onNode: Node },\n): Promise<Partial<CtVersion>> {\n const { consensusProtocolVersion } = await onNode.getNodeInfo();\n if (!isKeyOfObject(consensusProtocolVersion, PROTOCOL_VM_ABI)) {\n throw new UnsupportedProtocolError('Not supported consensus protocol version');\n }\n const supportedProtocol = PROTOCOL_VM_ABI[consensusProtocolVersion];\n if (!isKeyOfObject(txType, supportedProtocol)) {\n throw new UnknownTxError('Not supported tx type');\n }\n const protocolForTX = supportedProtocol[txType];\n abiVersion ??= protocolForTX.abiVersion[0];\n vmVersion ??= protocolForTX.vmVersion[0];\n return { vmVersion, abiVersion };\n}\n\n/**\n * Calculate fee, get absolute ttl (ttl + height), get account nonce\n * @category transaction builder\n * @param txType - Type of transaction\n * @param params - Object which contains all tx data\n * @returns Object with account nonce, absolute ttl and transaction fee\n */\nasync function prepareTxParams(\n txType: Tag,\n {\n senderId,\n nonce,\n ttl = TX_TTL,\n absoluteTtl,\n strategy,\n onNode,\n }: {\n senderId: Encoded.AccountAddress;\n absoluteTtl?: boolean;\n strategy?: 'continuity' | 'max';\n onNode: Node;\n } & Pick<TxParamsCommon, 'nonce' | 'ttl'>,\n): Promise<{ ttl: number; nonce: number }> {\n nonce ??= (\n await onNode.getAccountNextNonce(senderId, { strategy }).catch((error) => {\n if (!isAccountNotFoundError(error)) throw error;\n return { nextNonce: 1 };\n })\n ).nextNonce;\n\n if (ttl !== 0) {\n if (ttl < 0) throw new ArgumentError('ttl', 'greater or equal to 0', ttl);\n ttl += absoluteTtl === true ? 0 : (await onNode.getCurrentKeyBlock()).height;\n }\n\n return { ttl, nonce };\n}\n\n// TODO: find a better name or rearrange methods\n/**\n * @category transaction builder\n */\nexport async function _buildTx<TxType extends Tag>(\n txType: TxType,\n { denomination, absoluteTtl, ..._params }:\n Omit<Parameters<typeof syncBuildTx<TxType, 'tx'>>[0], 'fee' | 'nonce' | 'ttl' | 'ctVersion' | 'abiVersion'>\n & {\n onNode: Node;\n fee?: Int;\n nonce?: number;\n ttl?: number;\n denomination?: AE_AMOUNT_FORMATS;\n absoluteTtl?: boolean;\n }\n & (TxType extends Tag.OracleExtendTx | Tag.OracleResponseTx\n ? { callerId: Encoded.AccountAddress } : {})\n & (TxType extends Tag.ContractCreateTx | Tag.GaAttachTx ? { ctVersion?: CtVersion } : {})\n & (TxType extends Tag.ContractCallTx | Tag.OracleRegisterTx\n ? { abiVersion?: ABI_VERSIONS } : {}),\n): Promise<Encoded.Transaction> {\n // TODO: avoid this assertion\n const params = _params as unknown as TxParamsCommon & { onNode: Node };\n let senderKey: keyof TxParamsCommon | '<absent>';\n switch (txType) {\n case Tag.SpendTx:\n case Tag.OracleQueryTx:\n senderKey = 'senderId';\n break;\n case Tag.NameClaimTx:\n case Tag.NameUpdateTx:\n case Tag.NameRevokeTx:\n case Tag.NameTransferTx:\n case Tag.NamePreclaimTx:\n case Tag.OracleRegisterTx:\n senderKey = 'accountId';\n break;\n case Tag.ContractCreateTx:\n case Tag.GaAttachTx:\n senderKey = 'ownerId';\n break;\n case Tag.GaMetaTx:\n senderKey = 'gaId';\n break;\n case Tag.ContractCallTx:\n case Tag.OracleExtendTx:\n case Tag.OracleResponseTx:\n senderKey = 'callerId';\n break;\n case Tag.ChannelCloseSoloTx:\n case Tag.ChannelSlashTx:\n case Tag.ChannelSettleTx:\n case Tag.ChannelSnapshotSoloTx:\n senderKey = 'fromId';\n break;\n case Tag.PayingForTx:\n senderKey = 'payerId';\n break;\n default:\n throw new ArgumentError('txType', 'valid transaction type', txType);\n }\n // TODO: move specific cases to field-types\n if ([Tag.ContractCreateTx, Tag.GaAttachTx].includes(txType)) {\n params.ctVersion = await getVmVersion(\n Tag.ContractCreateTx,\n { ...params, ...params.ctVersion },\n );\n }\n if ([Tag.ContractCallTx, Tag.GaMetaTx].includes(txType)) {\n params.abiVersion = (await getVmVersion(Tag.ContractCallTx, params)).abiVersion;\n }\n if (txType === Tag.OracleRegisterTx) {\n params.abiVersion ??= ABI_VERSIONS.NO_ABI;\n }\n if (txType === Tag.PayingForTx) {\n params.tx = unpackTx(params.tx);\n }\n const senderId = params[senderKey];\n // TODO: do this check on TypeScript level\n if (senderId == null) throw new InvalidTxParamsError(`Transaction field ${senderKey} is missed`);\n const extraParams = await prepareTxParams(txType, { ...params, senderId, absoluteTtl });\n return syncBuildTx({ ...params, ...extraParams } as any, txType, { denomination }).tx;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["TX_TTL","ConsensusProtocolVersion","Tag","ArgumentError","InvalidTxParamsError","buildTx","syncBuildTx","unpackTx","isAccountNotFoundError","_buildTx","txType","denomination","absoluteTtl","strategy","onNode","_params","params","senderKey","SpendTx","OracleQueryTx","NameClaimTx","NameUpdateTx","NameRevokeTx","NameTransferTx","NamePreclaimTx","OracleRegisterTx","ContractCreateTx","GaAttachTx","GaMetaTx","ContractCallTx","OracleExtendTx","OracleResponseTx","ChannelCloseSoloTx","ChannelSlashTx","ChannelSettleTx","ChannelSnapshotSoloTx","PayingForTx","Object","keys","length","ctVersion","abiVersion","consensusProtocolVersion","getNodeInfo","tx","senderId","nonce","getAccountNextNonce","catch","error","nextNonce","ttl","getCurrentKeyBlock","height","tag"],"sources":["../../src/tx/index.ts"],"sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2022 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\n/**\n * Transaction methods\n *\n * This is implementation of [Tx](api/tx.md) relays\n * the creation of transactions to {@link Node}.\n * These methods provide ability to create native transactions.\n */\nimport { TX_TTL, TxParamsCommon } from './builder/schema';\nimport { ConsensusProtocolVersion, Tag } from './builder/constants';\nimport { ArgumentError, InvalidTxParamsError } from '../utils/errors';\nimport Node from '../Node';\nimport { Encoded } from '../utils/encoder';\nimport { buildTx as syncBuildTx, unpackTx } from './builder/index';\nimport { isAccountNotFoundError } from '../utils/other';\nimport { AE_AMOUNT_FORMATS } from '../utils/amount-formatter';\n\nexport type BuildTxOptions <TxType extends Tag, OmitFields extends string> =\n Omit<Parameters<typeof _buildTx<TxType>>[1], OmitFields>;\n\n// TODO: find a better name or rearrange methods\n/**\n * @category transaction builder\n */\nexport async function _buildTx<TxType extends Tag>(\n txType: TxType,\n {\n denomination, absoluteTtl, strategy, onNode, ..._params\n }: Omit<Parameters<typeof syncBuildTx<TxType>>[0], 'tag' | 'nonce' | 'ttl'>\n & {\n denomination?: AE_AMOUNT_FORMATS;\n absoluteTtl?: boolean;\n strategy?: 'continuity' | 'max';\n onNode: Node;\n ttl?: number;\n nonce?: number;\n }\n & (TxType extends Tag.OracleExtendTx | Tag.OracleResponseTx\n ? { callerId: Encoded.AccountAddress } : {}),\n): Promise<Encoded.Transaction> {\n // TODO: avoid this assertion\n const params = _params as unknown as TxParamsCommon & { onNode: Node };\n let senderKey: keyof TxParamsCommon | '<absent>';\n switch (txType) {\n case Tag.SpendTx:\n case Tag.OracleQueryTx:\n senderKey = 'senderId';\n break;\n case Tag.NameClaimTx:\n case Tag.NameUpdateTx:\n case Tag.NameRevokeTx:\n case Tag.NameTransferTx:\n case Tag.NamePreclaimTx:\n case Tag.OracleRegisterTx:\n senderKey = 'accountId';\n break;\n case Tag.ContractCreateTx:\n case Tag.GaAttachTx:\n senderKey = 'ownerId';\n break;\n case Tag.GaMetaTx:\n senderKey = 'gaId';\n break;\n case Tag.ContractCallTx:\n case Tag.OracleExtendTx:\n case Tag.OracleResponseTx:\n senderKey = 'callerId';\n break;\n case Tag.ChannelCloseSoloTx:\n case Tag.ChannelSlashTx:\n case Tag.ChannelSettleTx:\n case Tag.ChannelSnapshotSoloTx:\n senderKey = 'fromId';\n break;\n case Tag.PayingForTx:\n senderKey = 'payerId';\n break;\n default:\n throw new ArgumentError('txType', 'valid transaction type', txType);\n }\n\n if (\n Object.keys(ConsensusProtocolVersion).length !== 2\n && (((Tag.ContractCreateTx === txType || Tag.GaAttachTx === txType) && params.ctVersion == null)\n || ((Tag.ContractCallTx === txType || Tag.GaMetaTx === txType) && params.abiVersion == null))\n ) {\n const { consensusProtocolVersion } = await onNode.getNodeInfo();\n // @ts-expect-error remove after fixing buildTx types\n params.consensusProtocolVersion = consensusProtocolVersion;\n }\n\n if (txType === Tag.PayingForTx) {\n params.tx = unpackTx(params.tx);\n }\n const senderId = params[senderKey];\n // TODO: do this check on TypeScript level\n if (senderId == null) throw new InvalidTxParamsError(`Transaction field ${senderKey} is missed`);\n\n params.nonce ??= (\n await onNode.getAccountNextNonce(senderId, { strategy }).catch((error) => {\n if (!isAccountNotFoundError(error)) throw error;\n return { nextNonce: 1 };\n })\n ).nextNonce;\n\n params.ttl ??= TX_TTL;\n if (params.ttl !== 0) {\n if (params.ttl < 0) throw new ArgumentError('ttl', 'greater or equal to 0', params.ttl);\n params.ttl += absoluteTtl === true ? 0 : (await onNode.getCurrentKeyBlock()).height;\n }\n\n return syncBuildTx({ ...params, tag: txType } as any, { denomination });\n}\n"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
- import { Tag } from './builder/constants';
2
- import { Encoded } from '../utils/encoder';
1
+ import { unpackTx } from './builder';
3
2
  import Node from '../Node';
4
3
  export interface ValidatorResult {
5
4
  message: string;
@@ -8,13 +7,12 @@ export interface ValidatorResult {
8
7
  }
9
8
  /**
10
9
  * Transaction Validator
11
- * This function validates some of transaction properties,
10
+ * This function validates some transaction properties,
12
11
  * to make sure it can be posted it to the chain
13
12
  * @category transaction builder
14
13
  * @param transaction - Base64Check-encoded transaction
15
14
  * @param nodeNotCached - Node to validate transaction against
16
- * @param parentTxTypes - Types of parent transactions
17
15
  * @returns Array with verification errors
18
16
  * @example const errors = await verifyTransaction(transaction, node)
19
17
  */
20
- export default function verifyTransaction(transaction: Encoded.Transaction | Encoded.Poi, nodeNotCached: Node, parentTxTypes?: Tag[]): Promise<ValidatorResult[]>;
18
+ export default function verifyTransaction(transaction: Parameters<typeof unpackTx>[0], nodeNotCached: Node): Promise<ValidatorResult[]>;
@@ -4,48 +4,18 @@ const {
4
4
  } = _buffer;
5
5
  import BigNumber from 'bignumber.js';
6
6
  import { hash, verify } from "../utils/crypto.mjs";
7
- import { PROTOCOL_VM_ABI } from "./builder/schema.mjs";
7
+ import { ProtocolToVmAbi } from "./builder/field-types/ct-version.mjs";
8
8
  import { Tag } from "./builder/constants.mjs";
9
- import { unpackTx } from "./builder/index.mjs";
10
- import { UnsupportedProtocolError } from "../utils/errors.mjs";
11
- import { concatBuffers, isAccountNotFoundError, isKeyOfObject } from "../utils/other.mjs";
12
- import { encode, Encoding } from "../utils/encoder.mjs";
9
+ import { buildTx, unpackTx } from "./builder/index.mjs";
10
+ import { concatBuffers, isAccountNotFoundError } from "../utils/other.mjs";
11
+ import { decode } from "../utils/encoder.mjs";
13
12
  import Node from "../Node.mjs";
14
13
  import { genAggressiveCacheGetResponsesPolicy } from "../utils/autorest.mjs";
15
14
  const validators = [];
16
15
  const getSenderAddress = tx => ['senderId', 'accountId', 'ownerId', 'callerId', 'oracleId', 'fromId', 'initiator', 'gaId', 'payerId'].map(key => tx[key]).filter(a => a).map(a => a === null || a === void 0 ? void 0 : a.toString().replace(/^ok_/, 'ak_'))[0];
17
-
18
- /**
19
- * Transaction Validator
20
- * This function validates some of transaction properties,
21
- * to make sure it can be posted it to the chain
22
- * @category transaction builder
23
- * @param transaction - Base64Check-encoded transaction
24
- * @param nodeNotCached - Node to validate transaction against
25
- * @param parentTxTypes - Types of parent transactions
26
- * @returns Array with verification errors
27
- * @example const errors = await verifyTransaction(transaction, node)
28
- */
29
- export default async function verifyTransaction(transaction, nodeNotCached) {
16
+ async function verifyTransactionInternal(tx, node, parentTxTypes) {
30
17
  var _getSenderAddress;
31
- let parentTxTypes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
32
- let node = nodeNotCached;
33
- if (!node.pipeline.getOrderedPolicies().some(_ref => {
34
- let {
35
- name
36
- } = _ref;
37
- return name === 'aggressive-cache-get-responses';
38
- })) {
39
- node = new Node(nodeNotCached.$host, {
40
- ignoreVersion: true
41
- });
42
- node.pipeline.addPolicy(genAggressiveCacheGetResponsesPolicy());
43
- }
44
- const {
45
- tx,
46
- txType
47
- } = unpackTx(transaction);
48
- const address = (_getSenderAddress = getSenderAddress(tx)) !== null && _getSenderAddress !== void 0 ? _getSenderAddress : txType === Tag.SignedTx ? getSenderAddress(tx.encodedTx.tx) : undefined;
18
+ const address = (_getSenderAddress = getSenderAddress(tx)) !== null && _getSenderAddress !== void 0 ? _getSenderAddress : tx.tag === Tag.SignedTx ? getSenderAddress(tx.encodedTx) : undefined;
49
19
  const [account, {
50
20
  height
51
21
  }, {
@@ -65,7 +35,6 @@ export default async function verifyTransaction(transaction, nodeNotCached) {
65
35
  id: acc.id
66
36
  })), node.getCurrentKeyBlockHeight(), node.getNodeInfo()]);
67
37
  return (await Promise.all(validators.map(v => v(tx, {
68
- txType,
69
38
  node,
70
39
  account,
71
40
  height,
@@ -74,48 +43,67 @@ export default async function verifyTransaction(transaction, nodeNotCached) {
74
43
  parentTxTypes
75
44
  })))).flat();
76
45
  }
77
- validators.push((_ref2, _ref3) => {
46
+
47
+ /**
48
+ * Transaction Validator
49
+ * This function validates some transaction properties,
50
+ * to make sure it can be posted it to the chain
51
+ * @category transaction builder
52
+ * @param transaction - Base64Check-encoded transaction
53
+ * @param nodeNotCached - Node to validate transaction against
54
+ * @returns Array with verification errors
55
+ * @example const errors = await verifyTransaction(transaction, node)
56
+ */
57
+ export default async function verifyTransaction(transaction, nodeNotCached) {
58
+ const node = new Node(nodeNotCached.$host, {
59
+ ignoreVersion: true
60
+ });
61
+ node.pipeline.addPolicy(genAggressiveCacheGetResponsesPolicy());
62
+ return verifyTransactionInternal(unpackTx(transaction), node, []);
63
+ }
64
+ validators.push((_ref, _ref2) => {
78
65
  let {
79
66
  encodedTx,
80
67
  signatures
81
- } = _ref2;
68
+ } = _ref;
82
69
  let {
83
70
  account,
84
71
  nodeNetworkId,
85
72
  parentTxTypes
86
- } = _ref3;
87
- if ((encodedTx !== null && encodedTx !== void 0 ? encodedTx : signatures) === undefined) return [];
73
+ } = _ref2;
74
+ if ((encodedTx !== null && encodedTx !== void 0 ? encodedTx : signatures) == null) return [];
88
75
  if (account == null) return [];
89
- if (signatures.length !== 1) return []; // TODO: Support multisignature?
76
+ if (signatures.length !== 1) return []; // TODO: Support multisignature like in state channels
90
77
  const prefix = _Buffer.from([nodeNetworkId, ...(parentTxTypes.includes(Tag.PayingForTx) ? ['inner_tx'] : [])].join('-'));
91
- const txWithNetworkId = concatBuffers([prefix, encodedTx.rlpEncoded]);
92
- const txHashWithNetworkId = concatBuffers([prefix, hash(encodedTx.rlpEncoded)]);
78
+ const txBinary = decode(buildTx(encodedTx));
79
+ const txWithNetworkId = concatBuffers([prefix, txBinary]);
80
+ const txHashWithNetworkId = concatBuffers([prefix, hash(txBinary)]);
93
81
  if (verify(txWithNetworkId, signatures[0], account.id) || verify(txHashWithNetworkId, signatures[0], account.id)) return [];
94
82
  return [{
95
83
  message: 'Signature cannot be verified, please ensure that you transaction have' + ' the correct prefix and the correct private key for the sender address',
96
84
  key: 'InvalidSignature',
97
85
  checkedKeys: ['encodedTx', 'signatures']
98
86
  }];
99
- }, async (_ref4, _ref5) => {
87
+ }, async (_ref3, _ref4) => {
100
88
  let {
101
89
  encodedTx,
102
- tx
103
- } = _ref4;
90
+ tx,
91
+ tag
92
+ } = _ref3;
104
93
  let {
105
94
  node,
106
- parentTxTypes,
107
- txType
108
- } = _ref5;
109
- if ((encodedTx !== null && encodedTx !== void 0 ? encodedTx : tx) === undefined) return [];
110
- return verifyTransaction(encode((encodedTx !== null && encodedTx !== void 0 ? encodedTx : tx).rlpEncoded, Encoding.Transaction), node, [...parentTxTypes, txType]);
111
- }, (_ref6, _ref7) => {
95
+ parentTxTypes
96
+ } = _ref4;
97
+ if ((encodedTx !== null && encodedTx !== void 0 ? encodedTx : tx) == null) return [];
98
+ return verifyTransactionInternal(encodedTx !== null && encodedTx !== void 0 ? encodedTx : tx, node, [...parentTxTypes, tag]);
99
+ }, (_ref5, _ref6) => {
112
100
  let {
113
101
  ttl
114
- } = _ref6;
102
+ } = _ref5;
115
103
  let {
116
104
  height
117
- } = _ref7;
118
- if (ttl === undefined) return [];
105
+ } = _ref6;
106
+ if (ttl == null) return [];
119
107
  ttl = +ttl;
120
108
  if (ttl === 0 || ttl >= height) return [];
121
109
  return [{
@@ -123,43 +111,43 @@ validators.push((_ref2, _ref3) => {
123
111
  key: 'ExpiredTTL',
124
112
  checkedKeys: ['ttl']
125
113
  }];
126
- }, (_ref8, _ref9) => {
127
- var _ref10, _fee;
114
+ }, (_ref7, _ref8) => {
115
+ var _ref9, _fee;
128
116
  let {
129
117
  amount,
130
118
  fee,
131
119
  nameFee,
132
- tx
133
- } = _ref8;
120
+ tx,
121
+ tag
122
+ } = _ref7;
134
123
  let {
135
124
  account,
136
- parentTxTypes,
137
- txType
138
- } = _ref9;
125
+ parentTxTypes
126
+ } = _ref8;
139
127
  if (account == null) return [];
140
- if (((_ref10 = amount !== null && amount !== void 0 ? amount : fee) !== null && _ref10 !== void 0 ? _ref10 : nameFee) === undefined) return [];
128
+ if (((_ref9 = amount !== null && amount !== void 0 ? amount : fee) !== null && _ref9 !== void 0 ? _ref9 : nameFee) == null) return [];
141
129
  (_fee = fee) !== null && _fee !== void 0 ? _fee : fee = 0;
142
- const cost = new BigNumber(fee).plus(nameFee !== null && nameFee !== void 0 ? nameFee : 0).plus(amount !== null && amount !== void 0 ? amount : 0).plus(txType === Tag.PayingForTx ? tx.tx.encodedTx.tx.fee : 0).minus(parentTxTypes.includes(Tag.PayingForTx) ? fee : 0);
130
+ const cost = new BigNumber(fee).plus(nameFee !== null && nameFee !== void 0 ? nameFee : 0).plus(amount !== null && amount !== void 0 ? amount : 0).plus(tag === Tag.PayingForTx ? tx.encodedTx.fee : 0).minus(parentTxTypes.includes(Tag.PayingForTx) ? fee : 0);
143
131
  if (cost.lte(account.balance.toString())) return [];
144
132
  return [{
145
133
  message: `Account balance ${account.balance.toString()} is not enough to execute the transaction that costs ${cost.toFixed()}`,
146
134
  key: 'InsufficientBalance',
147
135
  checkedKeys: ['amount', 'fee', 'nameFee']
148
136
  }];
149
- }, (_ref11, _ref12) => {
137
+ }, (_ref10, _ref11) => {
150
138
  let {
151
- signatures
152
- } = _ref11;
139
+ signatures,
140
+ tag
141
+ } = _ref10;
153
142
  let {
154
- account,
155
- txType
156
- } = _ref12;
143
+ account
144
+ } = _ref11;
157
145
  if (account == null) return [];
158
146
  let message;
159
- if (txType === Tag.SignedTx && account.kind === 'generalized' && signatures.length !== 0) {
147
+ if (tag === Tag.SignedTx && account.kind === 'generalized' && signatures.length !== 0) {
160
148
  message = 'Generalized account can\'t be used to generate SignedTx with signatures';
161
149
  }
162
- if (txType === Tag.GaMetaTx && account.kind === 'basic') {
150
+ if (tag === Tag.GaMetaTx && account.kind === 'basic') {
163
151
  message = 'Basic account can\'t be used to generate GaMetaTx';
164
152
  }
165
153
  if (message == null) return [];
@@ -168,14 +156,14 @@ validators.push((_ref2, _ref3) => {
168
156
  key: 'InvalidAccountType',
169
157
  checkedKeys: ['tag']
170
158
  }];
171
- }, (_ref13, _ref14) => {
159
+ }, (_ref12, _ref13) => {
172
160
  let {
173
161
  nonce
174
- } = _ref13;
162
+ } = _ref12;
175
163
  let {
176
164
  account,
177
165
  parentTxTypes
178
- } = _ref14;
166
+ } = _ref13;
179
167
  if (nonce == null || account == null || parentTxTypes.includes(Tag.GaMetaTx)) return [];
180
168
  nonce = +nonce;
181
169
  const validNonce = account.nonce + 1;
@@ -190,32 +178,31 @@ validators.push((_ref2, _ref3) => {
190
178
  }),
191
179
  checkedKeys: ['nonce']
192
180
  }];
193
- }, (_ref15, _ref16) => {
181
+ }, (_ref14, _ref15) => {
182
+ var _ref16, _ref17;
194
183
  let {
195
184
  ctVersion,
196
- abiVersion
197
- } = _ref15;
185
+ abiVersion,
186
+ tag
187
+ } = _ref14;
198
188
  let {
199
- txType,
200
189
  consensusProtocolVersion
201
- } = _ref16;
202
- if (!isKeyOfObject(consensusProtocolVersion, PROTOCOL_VM_ABI)) {
203
- throw new UnsupportedProtocolError(`Unsupported protocol: ${consensusProtocolVersion}`);
204
- }
205
- const protocol = PROTOCOL_VM_ABI[consensusProtocolVersion];
190
+ } = _ref15;
191
+ const oracleCall = Tag.Oracle === tag || Tag.OracleRegisterTx === tag;
192
+ const contractCreate = Tag.ContractCreateTx === tag || Tag.GaAttachTx === tag;
193
+ const contractCall = Tag.ContractCallTx === tag || Tag.GaMetaTx === tag;
194
+ const type = (_ref16 = (_ref17 = oracleCall ? 'oracle-call' : null) !== null && _ref17 !== void 0 ? _ref17 : contractCreate ? 'contract-create' : null) !== null && _ref16 !== void 0 ? _ref16 : contractCall ? 'contract-call' : null;
195
+ if (type == null) return [];
196
+ // TODO: remove assertion after fixing buildTx types
197
+ const protocol = ProtocolToVmAbi[consensusProtocolVersion][type];
206
198
 
207
199
  // If not contract create tx
208
200
  if (ctVersion == null) ctVersion = {
209
201
  abiVersion
210
202
  };
211
- const txProtocol = protocol[txType];
212
- if (txProtocol == null) return [];
213
- if (Object.entries(ctVersion).some(_ref17 => {
214
- let [key, value] = _ref17;
215
- return !txProtocol[key].includes(+value);
216
- })) {
203
+ if (!protocol.abiVersion.includes(ctVersion.abiVersion) || contractCreate && !protocol.vmVersion.includes(ctVersion.vmVersion)) {
217
204
  return [{
218
- message: `ABI/VM version ${JSON.stringify(ctVersion)} is wrong, supported is: ${JSON.stringify(txProtocol)}`,
205
+ message: `ABI/VM version ${JSON.stringify(ctVersion)} is wrong, supported is: ${JSON.stringify(protocol)}`,
219
206
  key: 'VmAndAbiVersionMismatch',
220
207
  checkedKeys: ['ctVersion', 'abiVersion']
221
208
  }];
@@ -223,13 +210,13 @@ validators.push((_ref2, _ref3) => {
223
210
  return [];
224
211
  }, async (_ref18, _ref19) => {
225
212
  let {
226
- contractId
213
+ contractId,
214
+ tag
227
215
  } = _ref18;
228
216
  let {
229
- txType,
230
217
  node
231
218
  } = _ref19;
232
- if (Tag.ContractCallTx !== txType) return [];
219
+ if (Tag.ContractCallTx !== tag) return [];
233
220
  contractId = contractId;
234
221
  try {
235
222
  const {
@@ -1 +1 @@
1
- {"version":3,"file":"validator.mjs","names":["BigNumber","hash","verify","PROTOCOL_VM_ABI","Tag","unpackTx","UnsupportedProtocolError","concatBuffers","isAccountNotFoundError","isKeyOfObject","encode","Encoding","Node","genAggressiveCacheGetResponsesPolicy","validators","getSenderAddress","tx","map","key","filter","a","toString","replace","verifyTransaction","transaction","nodeNotCached","parentTxTypes","node","pipeline","getOrderedPolicies","some","name","$host","ignoreVersion","addPolicy","txType","address","SignedTx","encodedTx","undefined","account","height","consensusProtocolVersion","nodeNetworkId","Promise","all","getAccountByPubkey","catch","error","id","balance","nonce","then","acc","getCurrentKeyBlockHeight","getNodeInfo","v","flat","push","signatures","length","prefix","from","includes","PayingForTx","join","txWithNetworkId","rlpEncoded","txHashWithNetworkId","message","checkedKeys","Transaction","ttl","amount","fee","nameFee","cost","plus","minus","lte","toFixed","kind","GaMetaTx","validNonce","ctVersion","abiVersion","protocol","txProtocol","Object","entries","value","JSON","stringify","contractId","ContractCallTx","active","getContract","response","parsedBody","reason"],"sources":["../../src/tx/validator.ts"],"sourcesContent":["import BigNumber from 'bignumber.js';\nimport { hash, verify } from '../utils/crypto';\nimport {\n CtVersion,\n PROTOCOL_VM_ABI,\n RawTxObject,\n TxParamsCommon,\n TxSchema,\n TxTypeSchemas,\n} from './builder/schema';\nimport { Tag } from './builder/constants';\nimport { TxUnpacked, unpackTx } from './builder';\nimport { UnsupportedProtocolError } from '../utils/errors';\nimport { concatBuffers, isAccountNotFoundError, isKeyOfObject } from '../utils/other';\nimport { encode, Encoded, Encoding } from '../utils/encoder';\nimport Node, { TransformNodeType } from '../Node';\nimport { Account } from '../apis/node';\nimport { genAggressiveCacheGetResponsesPolicy } from '../utils/autorest';\n\nexport interface ValidatorResult {\n message: string;\n key: string;\n checkedKeys: string[];\n}\n\ntype Validator = (\n tx: {\n encodedTx: TxUnpacked<TxSchema>;\n signatures: Buffer[];\n tx: TxUnpacked<TxSchema> & {\n tx: TxTypeSchemas[Tag.SignedTx];\n };\n nonce?: number;\n ttl?: number;\n amount?: number;\n fee?: number;\n nameFee?: number;\n ctVersion?: Partial<CtVersion>;\n abiVersion?: number;\n contractId?: Encoded.ContractAddress;\n },\n options: {\n // TODO: remove after fixing node types\n account?: TransformNodeType<Account> & { id: Encoded.AccountAddress };\n nodeNetworkId: string;\n parentTxTypes: Tag[];\n node: Node;\n txType: Tag;\n height: number;\n consensusProtocolVersion: number;\n }\n) => ValidatorResult[] | Promise<ValidatorResult[]>;\n\nconst validators: Validator[] = [];\n\nconst getSenderAddress = (\n tx: TxParamsCommon | RawTxObject<TxSchema>,\n): Encoded.AccountAddress | undefined => [\n 'senderId', 'accountId', 'ownerId', 'callerId',\n 'oracleId', 'fromId', 'initiator', 'gaId', 'payerId',\n]\n .map((key: keyof TxSchema) => tx[key])\n .filter((a) => a)\n .map((a) => a?.toString().replace(/^ok_/, 'ak_'))[0] as Encoded.AccountAddress | undefined;\n\n/**\n * Transaction Validator\n * This function validates some of transaction properties,\n * to make sure it can be posted it to the chain\n * @category transaction builder\n * @param transaction - Base64Check-encoded transaction\n * @param nodeNotCached - Node to validate transaction against\n * @param parentTxTypes - Types of parent transactions\n * @returns Array with verification errors\n * @example const errors = await verifyTransaction(transaction, node)\n */\nexport default async function verifyTransaction(\n transaction: Encoded.Transaction | Encoded.Poi,\n nodeNotCached: Node,\n parentTxTypes: Tag[] = [],\n): Promise<ValidatorResult[]> {\n let node = nodeNotCached;\n if (\n !node.pipeline.getOrderedPolicies()\n .some(({ name }) => name === 'aggressive-cache-get-responses')\n ) {\n node = new Node(nodeNotCached.$host, { ignoreVersion: true });\n node.pipeline.addPolicy(genAggressiveCacheGetResponsesPolicy());\n }\n\n const { tx, txType } = unpackTx<Tag.SignedTx>(transaction);\n const address = getSenderAddress(tx)\n ?? (txType === Tag.SignedTx ? getSenderAddress(tx.encodedTx.tx) : undefined);\n const [account, { height }, { consensusProtocolVersion, nodeNetworkId }] = await Promise.all([\n address == null\n ? undefined\n : node.getAccountByPubkey(address)\n .catch((error) => {\n if (!isAccountNotFoundError(error)) throw error;\n return { id: address, balance: 0n, nonce: 0 };\n })\n // TODO: remove after fixing https://github.com/aeternity/aepp-sdk-js/issues/1537\n .then((acc) => ({ ...acc, id: acc.id as Encoded.AccountAddress })),\n node.getCurrentKeyBlockHeight(),\n node.getNodeInfo(),\n ]);\n\n return (await Promise.all(\n validators.map((v) => v(\n tx as any,\n {\n txType, node, account, height, consensusProtocolVersion, nodeNetworkId, parentTxTypes,\n },\n )),\n )).flat();\n}\n\nvalidators.push(\n ({ encodedTx, signatures }, { account, nodeNetworkId, parentTxTypes }) => {\n if ((encodedTx ?? signatures) === undefined) return [];\n if (account == null) return [];\n if (signatures.length !== 1) return []; // TODO: Support multisignature?\n const prefix = Buffer.from([\n nodeNetworkId,\n ...parentTxTypes.includes(Tag.PayingForTx) ? ['inner_tx'] : [],\n ].join('-'));\n const txWithNetworkId = concatBuffers([prefix, encodedTx.rlpEncoded]);\n const txHashWithNetworkId = concatBuffers([prefix, hash(encodedTx.rlpEncoded)]);\n if (verify(txWithNetworkId, signatures[0], account.id)\n || verify(txHashWithNetworkId, signatures[0], account.id)) return [];\n return [{\n message: 'Signature cannot be verified, please ensure that you transaction have'\n + ' the correct prefix and the correct private key for the sender address',\n key: 'InvalidSignature',\n checkedKeys: ['encodedTx', 'signatures'],\n }];\n },\n async ({ encodedTx, tx }, { node, parentTxTypes, txType }) => {\n if ((encodedTx ?? tx) === undefined) return [];\n return verifyTransaction(\n encode((encodedTx ?? tx).rlpEncoded, Encoding.Transaction),\n node,\n [...parentTxTypes, txType],\n );\n },\n ({ ttl }, { height }) => {\n if (ttl === undefined) return [];\n ttl = +ttl;\n if (ttl === 0 || ttl >= height) return [];\n return [{\n message: `TTL ${ttl} is already expired, current height is ${height}`,\n key: 'ExpiredTTL',\n checkedKeys: ['ttl'],\n }];\n },\n ({\n amount, fee, nameFee, tx,\n }, { account, parentTxTypes, txType }) => {\n if (account == null) return [];\n if ((amount ?? fee ?? nameFee) === undefined) return [];\n fee ??= 0;\n const cost = new BigNumber(fee).plus(nameFee ?? 0).plus(amount ?? 0)\n .plus(txType === Tag.PayingForTx ? (tx.tx.encodedTx.tx).fee : 0)\n .minus(parentTxTypes.includes(Tag.PayingForTx) ? fee : 0);\n if (cost.lte(account.balance.toString())) return [];\n return [{\n message: `Account balance ${account.balance.toString()} is not enough to execute the transaction that costs ${cost.toFixed()}`,\n key: 'InsufficientBalance',\n checkedKeys: ['amount', 'fee', 'nameFee'],\n }];\n },\n ({ signatures }, { account, txType }) => {\n if (account == null) return [];\n let message;\n if (txType === Tag.SignedTx && account.kind === 'generalized' && signatures.length !== 0) {\n message = 'Generalized account can\\'t be used to generate SignedTx with signatures';\n }\n if (txType === Tag.GaMetaTx && account.kind === 'basic') {\n message = 'Basic account can\\'t be used to generate GaMetaTx';\n }\n if (message == null) return [];\n return [{ message, key: 'InvalidAccountType', checkedKeys: ['tag'] }];\n },\n ({ nonce }, { account, parentTxTypes }) => {\n if (nonce == null || account == null || parentTxTypes.includes(Tag.GaMetaTx)) return [];\n nonce = +nonce;\n const validNonce = account.nonce + 1;\n if (nonce === validNonce) return [];\n return [{\n ...nonce < validNonce\n ? {\n message: `Nonce ${nonce} is already used, valid nonce is ${validNonce}`,\n key: 'NonceAlreadyUsed',\n }\n : {\n message: `Nonce ${nonce} is too high, valid nonce is ${validNonce}`,\n key: 'NonceHigh',\n },\n checkedKeys: ['nonce'],\n }];\n },\n ({ ctVersion, abiVersion }, { txType, consensusProtocolVersion }) => {\n if (!isKeyOfObject(consensusProtocolVersion, PROTOCOL_VM_ABI)) {\n throw new UnsupportedProtocolError(`Unsupported protocol: ${consensusProtocolVersion}`);\n }\n const protocol = PROTOCOL_VM_ABI[consensusProtocolVersion];\n\n // If not contract create tx\n if (ctVersion == null) ctVersion = { abiVersion };\n const txProtocol = protocol[txType as keyof typeof protocol];\n if (txProtocol == null) return [];\n if (Object.entries(ctVersion).some(\n ([\n key,\n value,\n ]: [\n key:keyof typeof txProtocol,\n value:any]) => !(txProtocol[key].includes(+value as never)),\n )) {\n return [{\n message: `ABI/VM version ${JSON.stringify(ctVersion)} is wrong, supported is: ${JSON.stringify(txProtocol)}`,\n key: 'VmAndAbiVersionMismatch',\n checkedKeys: ['ctVersion', 'abiVersion'],\n }];\n }\n return [];\n },\n async ({ contractId }, { txType, node }) => {\n if (Tag.ContractCallTx !== txType) return [];\n contractId = contractId as Encoded.ContractAddress;\n try {\n const { active } = await node.getContract(contractId);\n if (active) return [];\n return [{\n message: `Contract ${contractId} is not active`,\n key: 'ContractNotActive',\n checkedKeys: ['contractId'],\n }];\n } catch (error) {\n if (error.response?.parsedBody?.reason == null) throw error;\n return [{\n message: error.response.parsedBody.reason,\n key: 'ContractNotFound',\n checkedKeys: ['contractId'],\n }];\n }\n },\n);\n"],"mappings":"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"}
1
+ {"version":3,"file":"validator.mjs","names":["BigNumber","hash","verify","ProtocolToVmAbi","Tag","buildTx","unpackTx","concatBuffers","isAccountNotFoundError","decode","Node","genAggressiveCacheGetResponsesPolicy","validators","getSenderAddress","tx","map","key","filter","a","toString","replace","verifyTransactionInternal","node","parentTxTypes","address","tag","SignedTx","encodedTx","undefined","account","height","consensusProtocolVersion","nodeNetworkId","Promise","all","getAccountByPubkey","catch","error","id","balance","nonce","then","acc","getCurrentKeyBlockHeight","getNodeInfo","v","flat","verifyTransaction","transaction","nodeNotCached","$host","ignoreVersion","pipeline","addPolicy","push","signatures","length","prefix","from","includes","PayingForTx","join","txBinary","txWithNetworkId","txHashWithNetworkId","message","checkedKeys","ttl","amount","fee","nameFee","cost","plus","minus","lte","toFixed","kind","GaMetaTx","validNonce","ctVersion","abiVersion","oracleCall","Oracle","OracleRegisterTx","contractCreate","ContractCreateTx","GaAttachTx","contractCall","ContractCallTx","type","protocol","vmVersion","JSON","stringify","contractId","active","getContract","response","parsedBody","reason"],"sources":["../../src/tx/validator.ts"],"sourcesContent":["import BigNumber from 'bignumber.js';\nimport { hash, verify } from '../utils/crypto';\nimport { RawTxObject, TxParamsCommon, TxSchema } from './builder/schema';\nimport { ProtocolToVmAbi } from './builder/field-types/ct-version';\nimport { Tag, ConsensusProtocolVersion } from './builder/constants';\nimport { buildTx, unpackTx } from './builder';\nimport { concatBuffers, isAccountNotFoundError } from '../utils/other';\nimport { Encoded, decode } from '../utils/encoder';\nimport Node, { TransformNodeType } from '../Node';\nimport { Account } from '../apis/node';\nimport { genAggressiveCacheGetResponsesPolicy } from '../utils/autorest';\n\nexport interface ValidatorResult {\n message: string;\n key: string;\n checkedKeys: string[];\n}\n\ntype UnpackedTx = ReturnType<typeof unpackTx>['tx'];\n\ntype Validator = (\n tx: UnpackedTx,\n options: {\n // TODO: remove after fixing node types\n account?: TransformNodeType<Account> & { id: Encoded.AccountAddress };\n nodeNetworkId: string;\n parentTxTypes: Tag[];\n node: Node;\n height: number;\n consensusProtocolVersion: ConsensusProtocolVersion;\n }\n) => ValidatorResult[] | Promise<ValidatorResult[]>;\n\nconst validators: Validator[] = [];\n\nconst getSenderAddress = (\n tx: TxParamsCommon | RawTxObject<TxSchema>,\n): Encoded.AccountAddress | undefined => [\n 'senderId', 'accountId', 'ownerId', 'callerId',\n 'oracleId', 'fromId', 'initiator', 'gaId', 'payerId',\n]\n .map((key: keyof TxSchema) => tx[key])\n .filter((a) => a)\n .map((a) => a?.toString().replace(/^ok_/, 'ak_'))[0] as Encoded.AccountAddress | undefined;\n\nasync function verifyTransactionInternal(\n tx: UnpackedTx,\n node: Node,\n parentTxTypes: Tag[],\n): Promise<ValidatorResult[]> {\n const address = getSenderAddress(tx)\n ?? (tx.tag === Tag.SignedTx ? getSenderAddress(tx.encodedTx) : undefined);\n const [account, { height }, { consensusProtocolVersion, nodeNetworkId }] = await Promise.all([\n address == null\n ? undefined\n : node.getAccountByPubkey(address)\n .catch((error) => {\n if (!isAccountNotFoundError(error)) throw error;\n return { id: address, balance: 0n, nonce: 0 };\n })\n // TODO: remove after fixing https://github.com/aeternity/aepp-sdk-js/issues/1537\n .then((acc) => ({ ...acc, id: acc.id as Encoded.AccountAddress })),\n node.getCurrentKeyBlockHeight(),\n node.getNodeInfo(),\n ]);\n\n return (await Promise.all(\n validators.map((v) => v(\n tx,\n {\n node, account, height, consensusProtocolVersion, nodeNetworkId, parentTxTypes,\n },\n )),\n )).flat();\n}\n\n/**\n * Transaction Validator\n * This function validates some transaction properties,\n * to make sure it can be posted it to the chain\n * @category transaction builder\n * @param transaction - Base64Check-encoded transaction\n * @param nodeNotCached - Node to validate transaction against\n * @returns Array with verification errors\n * @example const errors = await verifyTransaction(transaction, node)\n */\nexport default async function verifyTransaction(\n transaction: Parameters<typeof unpackTx>[0],\n nodeNotCached: Node,\n): Promise<ValidatorResult[]> {\n const node = new Node(nodeNotCached.$host, { ignoreVersion: true });\n node.pipeline.addPolicy(genAggressiveCacheGetResponsesPolicy());\n return verifyTransactionInternal(unpackTx(transaction), node, []);\n}\n\nvalidators.push(\n ({ encodedTx, signatures }, { account, nodeNetworkId, parentTxTypes }) => {\n if ((encodedTx ?? signatures) == null) return [];\n if (account == null) return [];\n if (signatures.length !== 1) return []; // TODO: Support multisignature like in state channels\n const prefix = Buffer.from([\n nodeNetworkId,\n ...parentTxTypes.includes(Tag.PayingForTx) ? ['inner_tx'] : [],\n ].join('-'));\n const txBinary = decode(buildTx(encodedTx));\n const txWithNetworkId = concatBuffers([prefix, txBinary]);\n const txHashWithNetworkId = concatBuffers([prefix, hash(txBinary)]);\n if (verify(txWithNetworkId, signatures[0], account.id)\n || verify(txHashWithNetworkId, signatures[0], account.id)) return [];\n return [{\n message: 'Signature cannot be verified, please ensure that you transaction have'\n + ' the correct prefix and the correct private key for the sender address',\n key: 'InvalidSignature',\n checkedKeys: ['encodedTx', 'signatures'],\n }];\n },\n async ({ encodedTx, tx, tag }, { node, parentTxTypes }) => {\n if ((encodedTx ?? tx) == null) return [];\n return verifyTransactionInternal(encodedTx ?? tx, node, [...parentTxTypes, tag]);\n },\n ({ ttl }, { height }) => {\n if (ttl == null) return [];\n ttl = +ttl;\n if (ttl === 0 || ttl >= height) return [];\n return [{\n message: `TTL ${ttl} is already expired, current height is ${height}`,\n key: 'ExpiredTTL',\n checkedKeys: ['ttl'],\n }];\n },\n ({\n amount, fee, nameFee, tx, tag,\n }, { account, parentTxTypes }) => {\n if (account == null) return [];\n if ((amount ?? fee ?? nameFee) == null) return [];\n fee ??= 0;\n const cost = new BigNumber(fee).plus(nameFee ?? 0).plus(amount ?? 0)\n .plus(tag === Tag.PayingForTx ? tx.encodedTx.fee : 0)\n .minus(parentTxTypes.includes(Tag.PayingForTx) ? fee : 0);\n if (cost.lte(account.balance.toString())) return [];\n return [{\n message: `Account balance ${account.balance.toString()} is not enough to execute the transaction that costs ${cost.toFixed()}`,\n key: 'InsufficientBalance',\n checkedKeys: ['amount', 'fee', 'nameFee'],\n }];\n },\n ({ signatures, tag }, { account }) => {\n if (account == null) return [];\n let message;\n if (tag === Tag.SignedTx && account.kind === 'generalized' && signatures.length !== 0) {\n message = 'Generalized account can\\'t be used to generate SignedTx with signatures';\n }\n if (tag === Tag.GaMetaTx && account.kind === 'basic') {\n message = 'Basic account can\\'t be used to generate GaMetaTx';\n }\n if (message == null) return [];\n return [{ message, key: 'InvalidAccountType', checkedKeys: ['tag'] }];\n },\n ({ nonce }, { account, parentTxTypes }) => {\n if (nonce == null || account == null || parentTxTypes.includes(Tag.GaMetaTx)) return [];\n nonce = +nonce;\n const validNonce = account.nonce + 1;\n if (nonce === validNonce) return [];\n return [{\n ...nonce < validNonce\n ? {\n message: `Nonce ${nonce} is already used, valid nonce is ${validNonce}`,\n key: 'NonceAlreadyUsed',\n }\n : {\n message: `Nonce ${nonce} is too high, valid nonce is ${validNonce}`,\n key: 'NonceHigh',\n },\n checkedKeys: ['nonce'],\n }];\n },\n ({ ctVersion, abiVersion, tag }, { consensusProtocolVersion }) => {\n const oracleCall = Tag.Oracle === tag || Tag.OracleRegisterTx === tag;\n const contractCreate = Tag.ContractCreateTx === tag || Tag.GaAttachTx === tag;\n const contractCall = Tag.ContractCallTx === tag || Tag.GaMetaTx === tag;\n const type = (oracleCall ? 'oracle-call' : null)\n ?? (contractCreate ? 'contract-create' : null)\n ?? (contractCall ? 'contract-call' : null);\n if (type == null) return [];\n // TODO: remove assertion after fixing buildTx types\n const protocol = ProtocolToVmAbi[consensusProtocolVersion][type] as unknown as {\n abiVersion: any[];\n vmVersion: any[];\n };\n\n // If not contract create tx\n if (ctVersion == null) ctVersion = { abiVersion };\n if (\n !protocol.abiVersion.includes(ctVersion.abiVersion)\n || (contractCreate && !protocol.vmVersion.includes(ctVersion.vmVersion))\n ) {\n return [{\n message: `ABI/VM version ${JSON.stringify(ctVersion)} is wrong, supported is: ${JSON.stringify(protocol)}`,\n key: 'VmAndAbiVersionMismatch',\n checkedKeys: ['ctVersion', 'abiVersion'],\n }];\n }\n return [];\n },\n async ({ contractId, tag }, { node }) => {\n if (Tag.ContractCallTx !== tag) return [];\n contractId = contractId as Encoded.ContractAddress;\n try {\n const { active } = await node.getContract(contractId);\n if (active) return [];\n return [{\n message: `Contract ${contractId} is not active`,\n key: 'ContractNotActive',\n checkedKeys: ['contractId'],\n }];\n } catch (error) {\n if (error.response?.parsedBody?.reason == null) throw error;\n return [{\n message: error.response.parsedBody.reason,\n key: 'ContractNotFound',\n checkedKeys: ['contractId'],\n }];\n }\n },\n);\n"],"mappings":";;;;AAAA,OAAOA,SAAS,MAAM,cAAc;AAAC,SAC5BC,IAAI,EAAEC,MAAM;AAAA,SAEZC,eAAe;AAAA,SACfC,GAAG;AAAA,SACHC,OAAO,EAAEC,QAAQ;AAAA,SACjBC,aAAa,EAAEC,sBAAsB;AAAA,SAC5BC,MAAM;AAAA,OACjBC,IAAI;AAAA,SAEFC,oCAAoC;AAuB7C,MAAMC,UAAuB,GAAG,EAAE;AAElC,MAAMC,gBAAgB,GACpBC,EAA0C,IACH,CACvC,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAC9C,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,CACrD,CACEC,GAAG,CAAEC,GAAmB,IAAKF,EAAE,CAACE,GAAG,CAAC,CAAC,CACrCC,MAAM,CAAEC,CAAC,IAAKA,CAAC,CAAC,CAChBH,GAAG,CAAEG,CAAC,IAAKA,CAAC,aAADA,CAAC,uBAADA,CAAC,CAAEC,QAAQ,EAAE,CAACC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAuC;AAE5F,eAAeC,yBAAyB,CACtCP,EAAc,EACdQ,IAAU,EACVC,aAAoB,EACQ;EAAA;EAC5B,MAAMC,OAAO,wBAAGX,gBAAgB,CAACC,EAAE,CAAC,iEAC9BA,EAAE,CAACW,GAAG,KAAKrB,GAAG,CAACsB,QAAQ,GAAGb,gBAAgB,CAACC,EAAE,CAACa,SAAS,CAAC,GAAGC,SAAU;EAC3E,MAAM,CAACC,OAAO,EAAE;IAAEC;EAAO,CAAC,EAAE;IAAEC,wBAAwB;IAAEC;EAAc,CAAC,CAAC,GAAG,MAAMC,OAAO,CAACC,GAAG,CAAC,CAC3FV,OAAO,IAAI,IAAI,GACXI,SAAS,GACTN,IAAI,CAACa,kBAAkB,CAACX,OAAO,CAAC,CAC/BY,KAAK,CAAEC,KAAK,IAAK;IAChB,IAAI,CAAC7B,sBAAsB,CAAC6B,KAAK,CAAC,EAAE,MAAMA,KAAK;IAC/C,OAAO;MAAEC,EAAE,EAAEd,OAAO;MAAEe,OAAO,EAAE,EAAE;MAAEC,KAAK,EAAE;IAAE,CAAC;EAC/C,CAAC;EACD;EAAA,CACCC,IAAI,CAAEC,GAAG,KAAM;IAAE,GAAGA,GAAG;IAAEJ,EAAE,EAAEI,GAAG,CAACJ;EAA6B,CAAC,CAAC,CAAC,EACtEhB,IAAI,CAACqB,wBAAwB,EAAE,EAC/BrB,IAAI,CAACsB,WAAW,EAAE,CACnB,CAAC;EAEF,OAAO,CAAC,MAAMX,OAAO,CAACC,GAAG,CACvBtB,UAAU,CAACG,GAAG,CAAE8B,CAAC,IAAKA,CAAC,CACrB/B,EAAE,EACF;IACEQ,IAAI;IAAEO,OAAO;IAAEC,MAAM;IAAEC,wBAAwB;IAAEC,aAAa;IAAET;EAClE,CAAC,CACF,CAAC,CACH,EAAEuB,IAAI,EAAE;AACX;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,eAAeC,iBAAiB,CAC7CC,WAA2C,EAC3CC,aAAmB,EACS;EAC5B,MAAM3B,IAAI,GAAG,IAAIZ,IAAI,CAACuC,aAAa,CAACC,KAAK,EAAE;IAAEC,aAAa,EAAE;EAAK,CAAC,CAAC;EACnE7B,IAAI,CAAC8B,QAAQ,CAACC,SAAS,CAAC1C,oCAAoC,EAAE,CAAC;EAC/D,OAAOU,yBAAyB,CAACf,QAAQ,CAAC0C,WAAW,CAAC,EAAE1B,IAAI,EAAE,EAAE,CAAC;AACnE;AAEAV,UAAU,CAAC0C,IAAI,CACb,iBAA0E;EAAA,IAAzE;IAAE3B,SAAS;IAAE4B;EAAW,CAAC;EAAA,IAAE;IAAE1B,OAAO;IAAEG,aAAa;IAAET;EAAc,CAAC;EACnE,IAAI,CAACI,SAAS,aAATA,SAAS,cAATA,SAAS,GAAI4B,UAAU,KAAK,IAAI,EAAE,OAAO,EAAE;EAChD,IAAI1B,OAAO,IAAI,IAAI,EAAE,OAAO,EAAE;EAC9B,IAAI0B,UAAU,CAACC,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;EACxC,MAAMC,MAAM,GAAG,QAAOC,IAAI,CAAC,CACzB1B,aAAa,EACb,IAAGT,aAAa,CAACoC,QAAQ,CAACvD,GAAG,CAACwD,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,EAC/D,CAACC,IAAI,CAAC,GAAG,CAAC,CAAC;EACZ,MAAMC,QAAQ,GAAGrD,MAAM,CAACJ,OAAO,CAACsB,SAAS,CAAC,CAAC;EAC3C,MAAMoC,eAAe,GAAGxD,aAAa,CAAC,CAACkD,MAAM,EAAEK,QAAQ,CAAC,CAAC;EACzD,MAAME,mBAAmB,GAAGzD,aAAa,CAAC,CAACkD,MAAM,EAAExD,IAAI,CAAC6D,QAAQ,CAAC,CAAC,CAAC;EACnE,IAAI5D,MAAM,CAAC6D,eAAe,EAAER,UAAU,CAAC,CAAC,CAAC,EAAE1B,OAAO,CAACS,EAAE,CAAC,IACjDpC,MAAM,CAAC8D,mBAAmB,EAAET,UAAU,CAAC,CAAC,CAAC,EAAE1B,OAAO,CAACS,EAAE,CAAC,EAAE,OAAO,EAAE;EACtE,OAAO,CAAC;IACN2B,OAAO,EAAE,uEAAuE,GAC5E,wEAAwE;IAC5EjD,GAAG,EAAE,kBAAkB;IACvBkD,WAAW,EAAE,CAAC,WAAW,EAAE,YAAY;EACzC,CAAC,CAAC;AACJ,CAAC,EACD,wBAA2D;EAAA,IAApD;IAAEvC,SAAS;IAAEb,EAAE;IAAEW;EAAI,CAAC;EAAA,IAAE;IAAEH,IAAI;IAAEC;EAAc,CAAC;EACpD,IAAI,CAACI,SAAS,aAATA,SAAS,cAATA,SAAS,GAAIb,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE;EACxC,OAAOO,yBAAyB,CAACM,SAAS,aAATA,SAAS,cAATA,SAAS,GAAIb,EAAE,EAAEQ,IAAI,EAAE,CAAC,GAAGC,aAAa,EAAEE,GAAG,CAAC,CAAC;AAClF,CAAC,EACD,kBAAyB;EAAA,IAAxB;IAAE0C;EAAI,CAAC;EAAA,IAAE;IAAErC;EAAO,CAAC;EAClB,IAAIqC,GAAG,IAAI,IAAI,EAAE,OAAO,EAAE;EAC1BA,GAAG,GAAG,CAACA,GAAG;EACV,IAAIA,GAAG,KAAK,CAAC,IAAIA,GAAG,IAAIrC,MAAM,EAAE,OAAO,EAAE;EACzC,OAAO,CAAC;IACNmC,OAAO,EAAG,OAAME,GAAI,0CAAyCrC,MAAO,EAAC;IACrEd,GAAG,EAAE,YAAY;IACjBkD,WAAW,EAAE,CAAC,KAAK;EACrB,CAAC,CAAC;AACJ,CAAC,EACD,kBAEkC;EAAA;EAAA,IAFjC;IACCE,MAAM;IAAEC,GAAG;IAAEC,OAAO;IAAExD,EAAE;IAAEW;EAC5B,CAAC;EAAA,IAAE;IAAEI,OAAO;IAAEN;EAAc,CAAC;EAC3B,IAAIM,OAAO,IAAI,IAAI,EAAE,OAAO,EAAE;EAC9B,IAAI,UAACuC,MAAM,aAANA,MAAM,cAANA,MAAM,GAAIC,GAAG,yCAAIC,OAAO,KAAK,IAAI,EAAE,OAAO,EAAE;EACjD,QAAAD,GAAG,uCAAHA,GAAG,GAAK,CAAC;EACT,MAAME,IAAI,GAAG,IAAIvE,SAAS,CAACqE,GAAG,CAAC,CAACG,IAAI,CAACF,OAAO,aAAPA,OAAO,cAAPA,OAAO,GAAI,CAAC,CAAC,CAACE,IAAI,CAACJ,MAAM,aAANA,MAAM,cAANA,MAAM,GAAI,CAAC,CAAC,CACjEI,IAAI,CAAC/C,GAAG,KAAKrB,GAAG,CAACwD,WAAW,GAAG9C,EAAE,CAACa,SAAS,CAAC0C,GAAG,GAAG,CAAC,CAAC,CACpDI,KAAK,CAAClD,aAAa,CAACoC,QAAQ,CAACvD,GAAG,CAACwD,WAAW,CAAC,GAAGS,GAAG,GAAG,CAAC,CAAC;EAC3D,IAAIE,IAAI,CAACG,GAAG,CAAC7C,OAAO,CAACU,OAAO,CAACpB,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE;EACnD,OAAO,CAAC;IACN8C,OAAO,EAAG,mBAAkBpC,OAAO,CAACU,OAAO,CAACpB,QAAQ,EAAG,wDAAuDoD,IAAI,CAACI,OAAO,EAAG,EAAC;IAC9H3D,GAAG,EAAE,qBAAqB;IAC1BkD,WAAW,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS;EAC1C,CAAC,CAAC;AACJ,CAAC,EACD,oBAAsC;EAAA,IAArC;IAAEX,UAAU;IAAE9B;EAAI,CAAC;EAAA,IAAE;IAAEI;EAAQ,CAAC;EAC/B,IAAIA,OAAO,IAAI,IAAI,EAAE,OAAO,EAAE;EAC9B,IAAIoC,OAAO;EACX,IAAIxC,GAAG,KAAKrB,GAAG,CAACsB,QAAQ,IAAIG,OAAO,CAAC+C,IAAI,KAAK,aAAa,IAAIrB,UAAU,CAACC,MAAM,KAAK,CAAC,EAAE;IACrFS,OAAO,GAAG,yEAAyE;EACrF;EACA,IAAIxC,GAAG,KAAKrB,GAAG,CAACyE,QAAQ,IAAIhD,OAAO,CAAC+C,IAAI,KAAK,OAAO,EAAE;IACpDX,OAAO,GAAG,mDAAmD;EAC/D;EACA,IAAIA,OAAO,IAAI,IAAI,EAAE,OAAO,EAAE;EAC9B,OAAO,CAAC;IAAEA,OAAO;IAAEjD,GAAG,EAAE,oBAAoB;IAAEkD,WAAW,EAAE,CAAC,KAAK;EAAE,CAAC,CAAC;AACvE,CAAC,EACD,oBAA2C;EAAA,IAA1C;IAAE1B;EAAM,CAAC;EAAA,IAAE;IAAEX,OAAO;IAAEN;EAAc,CAAC;EACpC,IAAIiB,KAAK,IAAI,IAAI,IAAIX,OAAO,IAAI,IAAI,IAAIN,aAAa,CAACoC,QAAQ,CAACvD,GAAG,CAACyE,QAAQ,CAAC,EAAE,OAAO,EAAE;EACvFrC,KAAK,GAAG,CAACA,KAAK;EACd,MAAMsC,UAAU,GAAGjD,OAAO,CAACW,KAAK,GAAG,CAAC;EACpC,IAAIA,KAAK,KAAKsC,UAAU,EAAE,OAAO,EAAE;EACnC,OAAO,CAAC;IACN,IAAGtC,KAAK,GAAGsC,UAAU,GACjB;MACAb,OAAO,EAAG,SAAQzB,KAAM,oCAAmCsC,UAAW,EAAC;MACvE9D,GAAG,EAAE;IACP,CAAC,GACC;MACAiD,OAAO,EAAG,SAAQzB,KAAM,gCAA+BsC,UAAW,EAAC;MACnE9D,GAAG,EAAE;IACP,CAAC;IACHkD,WAAW,EAAE,CAAC,OAAO;EACvB,CAAC,CAAC;AACJ,CAAC,EACD,oBAAkE;EAAA;EAAA,IAAjE;IAAEa,SAAS;IAAEC,UAAU;IAAEvD;EAAI,CAAC;EAAA,IAAE;IAAEM;EAAyB,CAAC;EAC3D,MAAMkD,UAAU,GAAG7E,GAAG,CAAC8E,MAAM,KAAKzD,GAAG,IAAIrB,GAAG,CAAC+E,gBAAgB,KAAK1D,GAAG;EACrE,MAAM2D,cAAc,GAAGhF,GAAG,CAACiF,gBAAgB,KAAK5D,GAAG,IAAIrB,GAAG,CAACkF,UAAU,KAAK7D,GAAG;EAC7E,MAAM8D,YAAY,GAAGnF,GAAG,CAACoF,cAAc,KAAK/D,GAAG,IAAIrB,GAAG,CAACyE,QAAQ,KAAKpD,GAAG;EACvE,MAAMgE,IAAI,uBAAIR,UAAU,GAAG,aAAa,GAAG,IAAI,2CACzCG,cAAc,GAAG,iBAAiB,GAAG,IAAI,2CACzCG,YAAY,GAAG,eAAe,GAAG,IAAK;EAC5C,IAAIE,IAAI,IAAI,IAAI,EAAE,OAAO,EAAE;EAC3B;EACA,MAAMC,QAAQ,GAAGvF,eAAe,CAAC4B,wBAAwB,CAAC,CAAC0D,IAAI,CAG9D;;EAED;EACA,IAAIV,SAAS,IAAI,IAAI,EAAEA,SAAS,GAAG;IAAEC;EAAW,CAAC;EACjD,IACE,CAACU,QAAQ,CAACV,UAAU,CAACrB,QAAQ,CAACoB,SAAS,CAACC,UAAU,CAAC,IAC/CI,cAAc,IAAI,CAACM,QAAQ,CAACC,SAAS,CAAChC,QAAQ,CAACoB,SAAS,CAACY,SAAS,CAAE,EACxE;IACA,OAAO,CAAC;MACN1B,OAAO,EAAG,kBAAiB2B,IAAI,CAACC,SAAS,CAACd,SAAS,CAAE,4BAA2Ba,IAAI,CAACC,SAAS,CAACH,QAAQ,CAAE,EAAC;MAC1G1E,GAAG,EAAE,yBAAyB;MAC9BkD,WAAW,EAAE,CAAC,WAAW,EAAE,YAAY;IACzC,CAAC,CAAC;EACJ;EACA,OAAO,EAAE;AACX,CAAC,EACD,0BAAyC;EAAA,IAAlC;IAAE4B,UAAU;IAAErE;EAAI,CAAC;EAAA,IAAE;IAAEH;EAAK,CAAC;EAClC,IAAIlB,GAAG,CAACoF,cAAc,KAAK/D,GAAG,EAAE,OAAO,EAAE;EACzCqE,UAAU,GAAGA,UAAqC;EAClD,IAAI;IACF,MAAM;MAAEC;IAAO,CAAC,GAAG,MAAMzE,IAAI,CAAC0E,WAAW,CAACF,UAAU,CAAC;IACrD,IAAIC,MAAM,EAAE,OAAO,EAAE;IACrB,OAAO,CAAC;MACN9B,OAAO,EAAG,YAAW6B,UAAW,gBAAe;MAC/C9E,GAAG,EAAE,mBAAmB;MACxBkD,WAAW,EAAE,CAAC,YAAY;IAC5B,CAAC,CAAC;EACJ,CAAC,CAAC,OAAO7B,KAAK,EAAE;IAAA;IACd,IAAI,oBAAAA,KAAK,CAAC4D,QAAQ,6EAAd,gBAAgBC,UAAU,0DAA1B,sBAA4BC,MAAM,KAAI,IAAI,EAAE,MAAM9D,KAAK;IAC3D,OAAO,CAAC;MACN4B,OAAO,EAAE5B,KAAK,CAAC4D,QAAQ,CAACC,UAAU,CAACC,MAAM;MACzCnF,GAAG,EAAE,kBAAkB;MACvBkD,WAAW,EAAE,CAAC,YAAY;IAC5B,CAAC,CAAC;EACJ;AACF,CAAC,CACF"}
@@ -33,7 +33,7 @@ export function toBytes(val) {
33
33
  // If the value is an int it will be encoded as bytes big endian
34
34
  // Raises ValueError if the input is not an int or string
35
35
 
36
- if (val === undefined || val === null) return _Buffer.from([]);
36
+ if (val == null) return _Buffer.from([]);
37
37
  if (Number.isInteger(val) || BigNumber.isBigNumber(val) || big) {
38
38
  if (!BigNumber.isBigNumber(val)) val = new BigNumber(val);
39
39
  if (!val.isInteger()) throw new TypeError(`Unexpected not integer value: ${val.toFixed()}`);
@@ -1 +1 @@
1
- {"version":3,"file":"bytes.mjs","names":["BigNumber","NoSerializerFoundError","TypeError","toBytes","val","big","undefined","from","Number","isInteger","isBigNumber","toFixed","hexString","toString","length"],"sources":["../../src/utils/bytes.ts"],"sourcesContent":["/*\n * ISC License (ISC)\n * Copyright 2018 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\nimport BigNumber from 'bignumber.js';\nimport { NoSerializerFoundError, TypeError } from './errors';\n\n/**\n * Convert string, number, or BigNumber to byte array\n * @param val - value to convert\n * @param big - enables force conversion to BigNumber\n * @returns Buffer\n */\n// eslint-disable-next-line import/prefer-default-export\nexport function toBytes(val?: null | string | number | BigNumber, big = false): Buffer {\n // Encode a value to bytes.\n // If the value is an int it will be encoded as bytes big endian\n // Raises ValueError if the input is not an int or string\n\n if (val === undefined || val === null) return Buffer.from([]);\n if (Number.isInteger(val) || BigNumber.isBigNumber(val) || big) {\n if (!BigNumber.isBigNumber(val)) val = new BigNumber(val);\n if (!val.isInteger()) throw new TypeError(`Unexpected not integer value: ${val.toFixed()}`);\n let hexString = val.toString(16);\n if (hexString.length % 2 === 1) hexString = `0${hexString}`;\n return Buffer.from(hexString, 'hex');\n }\n if (typeof val === 'string') {\n return Buffer.from(val);\n }\n throw new NoSerializerFoundError();\n}\n"],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAOA,SAAS,MAAM,cAAc;AAAC,SAC5BC,sBAAsB,EAAEC,SAAS;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,OAAO,CAACC,GAAwC,EAAuB;EAAA,IAArBC,GAAG,uEAAG,KAAK;EAC3E;EACA;EACA;;EAEA,IAAID,GAAG,KAAKE,SAAS,IAAIF,GAAG,KAAK,IAAI,EAAE,OAAO,QAAOG,IAAI,CAAC,EAAE,CAAC;EAC7D,IAAIC,MAAM,CAACC,SAAS,CAACL,GAAG,CAAC,IAAIJ,SAAS,CAACU,WAAW,CAACN,GAAG,CAAC,IAAIC,GAAG,EAAE;IAC9D,IAAI,CAACL,SAAS,CAACU,WAAW,CAACN,GAAG,CAAC,EAAEA,GAAG,GAAG,IAAIJ,SAAS,CAACI,GAAG,CAAC;IACzD,IAAI,CAACA,GAAG,CAACK,SAAS,EAAE,EAAE,MAAM,IAAIP,SAAS,CAAE,iCAAgCE,GAAG,CAACO,OAAO,EAAG,EAAC,CAAC;IAC3F,IAAIC,SAAS,GAAGR,GAAG,CAACS,QAAQ,CAAC,EAAE,CAAC;IAChC,IAAID,SAAS,CAACE,MAAM,GAAG,CAAC,KAAK,CAAC,EAAEF,SAAS,GAAI,IAAGA,SAAU,EAAC;IAC3D,OAAO,QAAOL,IAAI,CAACK,SAAS,EAAE,KAAK,CAAC;EACtC;EACA,IAAI,OAAOR,GAAG,KAAK,QAAQ,EAAE;IAC3B,OAAO,QAAOG,IAAI,CAACH,GAAG,CAAC;EACzB;EACA,MAAM,IAAIH,sBAAsB,EAAE;AACpC"}
1
+ {"version":3,"file":"bytes.mjs","names":["BigNumber","NoSerializerFoundError","TypeError","toBytes","val","big","from","Number","isInteger","isBigNumber","toFixed","hexString","toString","length"],"sources":["../../src/utils/bytes.ts"],"sourcesContent":["/*\n * ISC License (ISC)\n * Copyright 2018 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\nimport BigNumber from 'bignumber.js';\nimport { NoSerializerFoundError, TypeError } from './errors';\n\n/**\n * Convert string, number, or BigNumber to byte array\n * @param val - value to convert\n * @param big - enables force conversion to BigNumber\n * @returns Buffer\n */\n// eslint-disable-next-line import/prefer-default-export\nexport function toBytes(val?: null | string | number | BigNumber, big = false): Buffer {\n // Encode a value to bytes.\n // If the value is an int it will be encoded as bytes big endian\n // Raises ValueError if the input is not an int or string\n\n if (val == null) return Buffer.from([]);\n if (Number.isInteger(val) || BigNumber.isBigNumber(val) || big) {\n if (!BigNumber.isBigNumber(val)) val = new BigNumber(val);\n if (!val.isInteger()) throw new TypeError(`Unexpected not integer value: ${val.toFixed()}`);\n let hexString = val.toString(16);\n if (hexString.length % 2 === 1) hexString = `0${hexString}`;\n return Buffer.from(hexString, 'hex');\n }\n if (typeof val === 'string') {\n return Buffer.from(val);\n }\n throw new NoSerializerFoundError();\n}\n"],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAOA,SAAS,MAAM,cAAc;AAAC,SAC5BC,sBAAsB,EAAEC,SAAS;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,OAAO,CAACC,GAAwC,EAAuB;EAAA,IAArBC,GAAG,uEAAG,KAAK;EAC3E;EACA;EACA;;EAEA,IAAID,GAAG,IAAI,IAAI,EAAE,OAAO,QAAOE,IAAI,CAAC,EAAE,CAAC;EACvC,IAAIC,MAAM,CAACC,SAAS,CAACJ,GAAG,CAAC,IAAIJ,SAAS,CAACS,WAAW,CAACL,GAAG,CAAC,IAAIC,GAAG,EAAE;IAC9D,IAAI,CAACL,SAAS,CAACS,WAAW,CAACL,GAAG,CAAC,EAAEA,GAAG,GAAG,IAAIJ,SAAS,CAACI,GAAG,CAAC;IACzD,IAAI,CAACA,GAAG,CAACI,SAAS,EAAE,EAAE,MAAM,IAAIN,SAAS,CAAE,iCAAgCE,GAAG,CAACM,OAAO,EAAG,EAAC,CAAC;IAC3F,IAAIC,SAAS,GAAGP,GAAG,CAACQ,QAAQ,CAAC,EAAE,CAAC;IAChC,IAAID,SAAS,CAACE,MAAM,GAAG,CAAC,KAAK,CAAC,EAAEF,SAAS,GAAI,IAAGA,SAAU,EAAC;IAC3D,OAAO,QAAOL,IAAI,CAACK,SAAS,EAAE,KAAK,CAAC;EACtC;EACA,IAAI,OAAOP,GAAG,KAAK,QAAQ,EAAE;IAC3B,OAAO,QAAOE,IAAI,CAACF,GAAG,CAAC;EACzB;EACA,MAAM,IAAIH,sBAAsB,EAAE;AACpC"}