@aeternity/aepp-sdk 11.0.1 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (376) hide show
  1. package/LICENSE +1 -1
  2. package/dist/aepp-sdk.browser-script.js +1 -1
  3. package/dist/aepp-sdk.browser-script.js.LICENSE.txt +12 -19
  4. package/dist/aepp-sdk.browser-script.js.map +1 -1
  5. package/dist/aepp-sdk.browser.js +1 -1
  6. package/dist/aepp-sdk.browser.js.map +1 -1
  7. package/dist/aepp-sdk.js +1 -1
  8. package/dist/aepp-sdk.js.map +1 -1
  9. package/es/AeSdk.d.ts +37 -0
  10. package/es/AeSdk.mjs +81 -0
  11. package/es/AeSdk.mjs.map +1 -0
  12. package/es/AeSdkAepp.d.ts +69 -0
  13. package/es/AeSdkAepp.mjs +175 -0
  14. package/es/AeSdkAepp.mjs.map +1 -0
  15. package/es/AeSdkBase.d.ts +212 -0
  16. package/es/AeSdkBase.mjs +310 -0
  17. package/es/AeSdkBase.mjs.map +1 -0
  18. package/es/AeSdkWallet.d.ts +103 -0
  19. package/es/AeSdkWallet.mjs +322 -0
  20. package/es/AeSdkWallet.mjs.map +1 -0
  21. package/es/Node.d.ts +44 -0
  22. package/es/Node.mjs +141 -0
  23. package/es/Node.mjs.map +1 -0
  24. package/es/account/Base.d.ts +65 -0
  25. package/es/account/Base.mjs +123 -0
  26. package/es/account/Base.mjs.map +1 -0
  27. package/es/account/Memory.d.ts +25 -0
  28. package/es/account/Memory.mjs +81 -0
  29. package/es/account/Memory.mjs.map +1 -0
  30. package/es/account/Rpc.d.ts +27 -0
  31. package/es/account/Rpc.mjs +79 -0
  32. package/es/account/Rpc.mjs.map +1 -0
  33. package/es/aens.d.ts +209 -0
  34. package/es/aens.mjs +332 -0
  35. package/es/aens.mjs.map +1 -0
  36. package/es/aepp-wallet-communication/connection/Browser.d.ts +32 -0
  37. package/es/aepp-wallet-communication/connection/Browser.mjs +70 -0
  38. package/es/aepp-wallet-communication/connection/Browser.mjs.map +1 -0
  39. package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +17 -0
  40. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +57 -0
  41. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -0
  42. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.d.ts +35 -0
  43. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs +142 -0
  44. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs.map +1 -0
  45. package/es/aepp-wallet-communication/connection-proxy.d.ts +10 -0
  46. package/{src/utils/crypto-ts.ts → es/aepp-wallet-communication/connection-proxy.mjs} +15 -11
  47. package/es/aepp-wallet-communication/connection-proxy.mjs.map +1 -0
  48. package/es/aepp-wallet-communication/rpc/RpcClient.d.ts +33 -0
  49. package/es/aepp-wallet-communication/rpc/RpcClient.mjs +169 -0
  50. package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -0
  51. package/es/aepp-wallet-communication/rpc/types.d.ts +77 -0
  52. package/es/aepp-wallet-communication/rpc/types.mjs +3 -0
  53. package/es/aepp-wallet-communication/rpc/types.mjs.map +1 -0
  54. package/es/aepp-wallet-communication/schema.d.ts +90 -46
  55. package/es/aepp-wallet-communication/schema.mjs +214 -0
  56. package/es/aepp-wallet-communication/schema.mjs.map +1 -0
  57. package/es/aepp-wallet-communication/wallet-detector.d.ts +24 -0
  58. package/es/aepp-wallet-communication/wallet-detector.mjs +63 -0
  59. package/es/aepp-wallet-communication/wallet-detector.mjs.map +1 -0
  60. package/es/apis/compiler/compiler.d.ts +92 -0
  61. package/es/apis/compiler/compiler.mjs +576 -0
  62. package/es/apis/compiler/compiler.mjs.map +1 -0
  63. package/es/apis/compiler/index.d.ts +2 -0
  64. package/es/apis/compiler/index.mjs +3 -0
  65. package/es/apis/compiler/index.mjs.map +1 -0
  66. package/es/apis/compiler/models/index.d.ts +248 -0
  67. package/es/apis/compiler/models/index.mjs +48 -0
  68. package/es/apis/compiler/models/index.mjs.map +1 -0
  69. package/es/apis/compiler/models/mappers.d.ts +23 -0
  70. package/es/apis/compiler/models/mappers.mjs +585 -0
  71. package/es/apis/compiler/models/mappers.mjs.map +1 -0
  72. package/es/apis/compiler/models/parameters.d.ts +13 -0
  73. package/es/apis/compiler/models/parameters.mjs +71 -0
  74. package/es/apis/compiler/models/parameters.mjs.map +1 -0
  75. package/es/apis/node/index.d.ts +2 -0
  76. package/es/apis/node/index.mjs +3 -0
  77. package/es/apis/node/index.mjs.map +1 -0
  78. package/es/apis/node/models/index.d.ts +1061 -0
  79. package/es/apis/node/models/index.mjs +2 -0
  80. package/es/apis/node/models/index.mjs.map +1 -0
  81. package/es/apis/node/models/mappers.d.ts +95 -0
  82. package/es/apis/node/models/mappers.mjs +4164 -0
  83. package/es/apis/node/models/mappers.mjs.map +1 -0
  84. package/es/apis/node/models/parameters.d.ts +17 -0
  85. package/es/apis/node/models/parameters.mjs +165 -0
  86. package/es/apis/node/models/parameters.mjs.map +1 -0
  87. package/es/apis/node/node.d.ts +215 -0
  88. package/es/apis/node/node.mjs +1165 -0
  89. package/es/apis/node/node.mjs.map +1 -0
  90. package/es/chain.d.ts +220 -0
  91. package/es/chain.mjs +524 -0
  92. package/es/chain.mjs.map +1 -0
  93. package/es/channel/handlers.d.ts +34 -0
  94. package/es/channel/handlers.mjs +147 -112
  95. package/es/channel/handlers.mjs.map +1 -1
  96. package/es/channel/index.d.ts +634 -0
  97. package/es/channel/index.mjs +898 -900
  98. package/es/channel/index.mjs.map +1 -1
  99. package/es/channel/internal.d.ts +100 -0
  100. package/es/channel/internal.mjs +97 -51
  101. package/es/channel/internal.mjs.map +1 -1
  102. package/es/contract/Compiler.d.ts +17 -0
  103. package/es/contract/Compiler.mjs +67 -0
  104. package/es/contract/Compiler.mjs.map +1 -0
  105. package/es/contract/aci.d.ts +125 -0
  106. package/es/contract/aci.mjs +199 -180
  107. package/es/contract/aci.mjs.map +1 -1
  108. package/es/contract/ga.d.ts +68 -0
  109. package/es/contract/ga.mjs +190 -0
  110. package/es/contract/ga.mjs.map +1 -0
  111. package/es/contract/methods.d.ts +68 -0
  112. package/es/contract/methods.mjs +101 -0
  113. package/es/contract/methods.mjs.map +1 -0
  114. package/es/index.d.ts +32 -0
  115. package/es/index.mjs +32 -40
  116. package/es/index.mjs.map +1 -1
  117. package/es/oracle.d.ts +154 -0
  118. package/es/oracle.mjs +288 -0
  119. package/es/oracle.mjs.map +1 -0
  120. package/es/spend.d.ts +61 -0
  121. package/es/spend.mjs +122 -0
  122. package/es/spend.mjs.map +1 -0
  123. package/es/tx/builder/constants.d.ts +41 -0
  124. package/es/tx/builder/constants.mjs +11 -19
  125. package/es/tx/builder/constants.mjs.map +1 -1
  126. package/es/tx/builder/field-types.d.ts +62 -0
  127. package/es/tx/builder/field-types.mjs +62 -10
  128. package/es/tx/builder/field-types.mjs.map +1 -1
  129. package/es/tx/builder/helpers.d.ts +131 -0
  130. package/es/tx/builder/helpers.mjs +71 -169
  131. package/es/tx/builder/helpers.mjs.map +1 -1
  132. package/es/tx/builder/index.d.ts +75 -0
  133. package/es/tx/builder/index.mjs +141 -323
  134. package/es/tx/builder/index.mjs.map +1 -1
  135. package/es/tx/builder/schema.d.ts +350 -0
  136. package/es/tx/builder/schema.mjs +173 -510
  137. package/es/tx/builder/schema.mjs.map +1 -1
  138. package/es/tx/index.d.ts +63 -0
  139. package/es/tx/index.mjs +171 -265
  140. package/es/tx/index.mjs.map +1 -1
  141. package/es/tx/min-fee.d.ts +20 -0
  142. package/es/tx/min-fee.mjs +148 -0
  143. package/es/tx/min-fee.mjs.map +1 -0
  144. package/es/tx/validator.d.ts +19 -0
  145. package/es/tx/validator.mjs +64 -71
  146. package/es/tx/validator.mjs.map +1 -1
  147. package/es/typings/@aeternity__argon2-browser/index.d.mjs +2 -0
  148. package/es/typings/@aeternity__argon2-browser/index.d.mjs.map +1 -0
  149. package/es/typings/@aeternity__uuid/index.d.mjs +2 -0
  150. package/es/typings/@aeternity__uuid/index.d.mjs.map +1 -0
  151. package/es/typings/bip32-path/index.d.mjs +2 -0
  152. package/es/typings/bip32-path/index.d.mjs.map +1 -0
  153. package/es/typings/blakejs/index.d.mjs.map +1 -1
  154. package/es/typings/tweetnacl-auth/index.d.mjs +2 -0
  155. package/es/typings/tweetnacl-auth/index.d.mjs.map +1 -0
  156. package/es/utils/amount-formatter.d.ts +42 -0
  157. package/es/utils/amount-formatter.mjs +28 -41
  158. package/es/utils/amount-formatter.mjs.map +1 -1
  159. package/es/utils/autorest.d.ts +6 -0
  160. package/es/utils/autorest.mjs +97 -0
  161. package/es/utils/autorest.mjs.map +1 -0
  162. package/es/utils/bignumber.d.ts +13 -0
  163. package/es/utils/bignumber.mjs +10 -8
  164. package/es/utils/bignumber.mjs.map +1 -1
  165. package/es/{bytes.d.ts → utils/bytes.d.ts} +10 -13
  166. package/es/utils/bytes.mjs +10 -14
  167. package/es/utils/bytes.mjs.map +1 -1
  168. package/es/utils/crypto.d.ts +103 -0
  169. package/es/utils/crypto.mjs +60 -68
  170. package/es/utils/crypto.mjs.map +1 -1
  171. package/es/utils/encoder.d.ts +26 -0
  172. package/es/utils/encoder.mjs +47 -51
  173. package/es/utils/encoder.mjs.map +1 -1
  174. package/es/{errors.d.ts → utils/errors.d.ts} +254 -57
  175. package/es/utils/errors.mjs +318 -125
  176. package/es/utils/errors.mjs.map +1 -1
  177. package/es/utils/hd-wallet.d.ts +34 -0
  178. package/es/utils/hd-wallet.mjs +27 -16
  179. package/es/utils/hd-wallet.mjs.map +1 -1
  180. package/es/utils/json-big.d.ts +5 -0
  181. package/es/utils/json-big.mjs +10 -14
  182. package/es/utils/json-big.mjs.map +1 -1
  183. package/es/utils/keystore.d.ts +51 -0
  184. package/es/utils/keystore.mjs +98 -193
  185. package/es/utils/keystore.mjs.map +1 -1
  186. package/es/{mptree.d.ts → utils/mptree.d.ts} +5 -8
  187. package/es/utils/mptree.mjs +13 -14
  188. package/es/utils/mptree.mjs.map +1 -1
  189. package/es/utils/other.d.ts +14 -0
  190. package/es/utils/other.mjs +21 -36
  191. package/es/utils/other.mjs.map +1 -1
  192. package/es/{semver-satisfies.d.ts → utils/semver-satisfies.d.ts} +0 -0
  193. package/es/utils/semver-satisfies.mjs.map +1 -1
  194. package/es/utils/string.d.ts +24 -0
  195. package/es/utils/string.mjs +8 -10
  196. package/es/utils/string.mjs.map +1 -1
  197. package/package.json +49 -39
  198. package/src/AeSdk.ts +65 -0
  199. package/src/AeSdkAepp.ts +167 -0
  200. package/src/AeSdkBase.ts +320 -0
  201. package/src/AeSdkWallet.ts +332 -0
  202. package/src/Node.ts +167 -0
  203. package/src/account/Base.ts +114 -0
  204. package/src/account/Memory.ts +83 -0
  205. package/src/account/Rpc.ts +67 -0
  206. package/src/aens.ts +391 -0
  207. package/src/aepp-wallet-communication/connection/Browser.ts +68 -0
  208. package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +58 -0
  209. package/src/aepp-wallet-communication/connection/BrowserWindowMessage.ts +111 -0
  210. package/{es/utils/crypto-ts.mjs → src/aepp-wallet-communication/connection-proxy.ts} +16 -17
  211. package/src/aepp-wallet-communication/rpc/RpcClient.ts +137 -0
  212. package/src/aepp-wallet-communication/rpc/types.ts +66 -0
  213. package/src/aepp-wallet-communication/schema.ts +181 -0
  214. package/src/aepp-wallet-communication/wallet-detector.ts +71 -0
  215. package/src/apis/compiler/code-model-v4.yaml +2649 -0
  216. package/src/apis/compiler/compiler.ts +585 -0
  217. package/src/apis/compiler/index.ts +2 -0
  218. package/src/apis/compiler/models/index.ts +301 -0
  219. package/src/apis/compiler/models/mappers.ts +583 -0
  220. package/src/apis/compiler/models/parameters.ts +93 -0
  221. package/src/apis/node/code-model-v4.yaml +10046 -0
  222. package/src/apis/node/index.ts +2 -0
  223. package/src/apis/node/models/index.ts +1253 -0
  224. package/src/apis/node/models/mappers.ts +4278 -0
  225. package/src/apis/node/models/parameters.ts +188 -0
  226. package/src/apis/node/node.ts +1299 -0
  227. package/src/chain.ts +444 -0
  228. package/src/channel/{handlers.js → handlers.ts} +220 -128
  229. package/src/channel/index.ts +991 -0
  230. package/src/channel/internal.ts +345 -0
  231. package/src/contract/Compiler.ts +66 -0
  232. package/src/contract/aci.ts +529 -0
  233. package/src/contract/ga.ts +178 -0
  234. package/src/contract/methods.ts +118 -0
  235. package/src/index.ts +51 -0
  236. package/src/oracle.ts +342 -0
  237. package/src/spend.ts +152 -0
  238. package/src/tx/builder/{constants.js → constants.ts} +12 -16
  239. package/src/tx/builder/field-types.ts +111 -0
  240. package/src/tx/builder/helpers.ts +253 -0
  241. package/src/tx/builder/index.ts +394 -0
  242. package/src/tx/builder/schema.ts +771 -0
  243. package/src/tx/index.ts +199 -0
  244. package/src/tx/min-fee.ts +136 -0
  245. package/src/tx/validator.ts +226 -0
  246. package/src/typings/@aeternity__argon2-browser/index.d.ts +3 -0
  247. package/src/typings/@aeternity__uuid/index.d.ts +3 -0
  248. package/src/typings/bip32-path/index.d.ts +33 -0
  249. package/src/typings/tweetnacl-auth/index.d.ts +14 -0
  250. package/src/utils/amount-formatter.ts +29 -42
  251. package/src/utils/autorest.ts +90 -0
  252. package/src/utils/bignumber.ts +9 -11
  253. package/src/utils/bytes.ts +12 -14
  254. package/src/utils/crypto.ts +217 -0
  255. package/src/utils/encoder.ts +52 -55
  256. package/src/utils/errors.ts +268 -134
  257. package/src/utils/hd-wallet.ts +134 -0
  258. package/src/utils/json-big.ts +26 -0
  259. package/src/utils/keystore.ts +179 -0
  260. package/src/utils/mptree.ts +14 -14
  261. package/src/utils/other.ts +28 -43
  262. package/src/utils/string.ts +8 -10
  263. package/es/account/base.mjs +0 -179
  264. package/es/account/base.mjs.map +0 -1
  265. package/es/account/memory.mjs +0 -99
  266. package/es/account/memory.mjs.map +0 -1
  267. package/es/account/multiple.mjs +0 -179
  268. package/es/account/multiple.mjs.map +0 -1
  269. package/es/ae/aens.mjs +0 -404
  270. package/es/ae/aens.mjs.map +0 -1
  271. package/es/ae/aepp.mjs +0 -45
  272. package/es/ae/aepp.mjs.map +0 -1
  273. package/es/ae/contract.mjs +0 -159
  274. package/es/ae/contract.mjs.map +0 -1
  275. package/es/ae/index.mjs +0 -207
  276. package/es/ae/index.mjs.map +0 -1
  277. package/es/ae/oracle.mjs +0 -339
  278. package/es/ae/oracle.mjs.map +0 -1
  279. package/es/ae/universal.mjs +0 -45
  280. package/es/ae/universal.mjs.map +0 -1
  281. package/es/ae/wallet.mjs +0 -50
  282. package/es/ae/wallet.mjs.map +0 -1
  283. package/es/amount-formatter.d.ts +0 -58
  284. package/es/bignumber.d.ts +0 -18
  285. package/es/chain/index.mjs +0 -272
  286. package/es/chain/index.mjs.map +0 -1
  287. package/es/chain/node.mjs +0 -442
  288. package/es/chain/node.mjs.map +0 -1
  289. package/es/contract/compiler.mjs +0 -115
  290. package/es/contract/compiler.mjs.map +0 -1
  291. package/es/contract/ga/helpers.mjs +0 -30
  292. package/es/contract/ga/helpers.mjs.map +0 -1
  293. package/es/contract/ga/index.mjs +0 -178
  294. package/es/contract/ga/index.mjs.map +0 -1
  295. package/es/crypto-ts.d.ts +0 -9
  296. package/es/encoder.d.ts +0 -26
  297. package/es/node-pool/index.mjs +0 -188
  298. package/es/node-pool/index.mjs.map +0 -1
  299. package/es/node.mjs +0 -133
  300. package/es/node.mjs.map +0 -1
  301. package/es/other.d.ts +0 -31
  302. package/es/string.d.ts +0 -26
  303. package/es/tx/tx-object.mjs +0 -283
  304. package/es/tx/tx-object.mjs.map +0 -1
  305. package/es/tx/tx.mjs +0 -938
  306. package/es/tx/tx.mjs.map +0 -1
  307. package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs +0 -132
  308. package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs.map +0 -1
  309. package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs +0 -183
  310. package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs.map +0 -1
  311. package/es/utils/aepp-wallet-communication/connection/index.mjs +0 -87
  312. package/es/utils/aepp-wallet-communication/connection/index.mjs.map +0 -1
  313. package/es/utils/aepp-wallet-communication/content-script-bridge.mjs +0 -98
  314. package/es/utils/aepp-wallet-communication/content-script-bridge.mjs.map +0 -1
  315. package/es/utils/aepp-wallet-communication/helpers.mjs +0 -92
  316. package/es/utils/aepp-wallet-communication/helpers.mjs.map +0 -1
  317. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs +0 -375
  318. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs.map +0 -1
  319. package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs +0 -275
  320. package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs.map +0 -1
  321. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs +0 -541
  322. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs.map +0 -1
  323. package/es/utils/aepp-wallet-communication/schema.mjs +0 -102
  324. package/es/utils/aepp-wallet-communication/schema.mjs.map +0 -1
  325. package/es/utils/aepp-wallet-communication/wallet-detector.mjs +0 -110
  326. package/es/utils/aepp-wallet-communication/wallet-detector.mjs.map +0 -1
  327. package/es/utils/async-init.mjs +0 -64
  328. package/es/utils/async-init.mjs.map +0 -1
  329. package/es/utils/crypto-ts.mjs.map +0 -1
  330. package/es/utils/swagger.mjs +0 -164
  331. package/es/utils/swagger.mjs.map +0 -1
  332. package/src/account/base.js +0 -153
  333. package/src/account/memory.js +0 -83
  334. package/src/account/multiple.js +0 -162
  335. package/src/ae/aens.js +0 -361
  336. package/src/ae/aepp.js +0 -45
  337. package/src/ae/contract.js +0 -148
  338. package/src/ae/index.js +0 -168
  339. package/src/ae/oracle.js +0 -311
  340. package/src/ae/universal.js +0 -47
  341. package/src/ae/wallet.js +0 -50
  342. package/src/chain/index.js +0 -269
  343. package/src/chain/node.js +0 -320
  344. package/src/channel/index.js +0 -903
  345. package/src/channel/internal.js +0 -236
  346. package/src/contract/aci.js +0 -376
  347. package/src/contract/compiler.js +0 -100
  348. package/src/contract/ga/helpers.js +0 -19
  349. package/src/contract/ga/index.js +0 -150
  350. package/src/index.js +0 -89
  351. package/src/node-pool/index.js +0 -172
  352. package/src/node.js +0 -116
  353. package/src/tx/builder/field-types.js +0 -61
  354. package/src/tx/builder/helpers.js +0 -334
  355. package/src/tx/builder/index.js +0 -465
  356. package/src/tx/builder/schema.js +0 -1100
  357. package/src/tx/index.js +0 -301
  358. package/src/tx/tx-object.js +0 -187
  359. package/src/tx/tx.js +0 -631
  360. package/src/tx/validator.js +0 -181
  361. package/src/utils/aepp-wallet-communication/connection/browser-runtime.js +0 -119
  362. package/src/utils/aepp-wallet-communication/connection/browser-window-message.js +0 -165
  363. package/src/utils/aepp-wallet-communication/connection/index.js +0 -85
  364. package/src/utils/aepp-wallet-communication/content-script-bridge.js +0 -86
  365. package/src/utils/aepp-wallet-communication/helpers.js +0 -60
  366. package/src/utils/aepp-wallet-communication/rpc/aepp-rpc.js +0 -294
  367. package/src/utils/aepp-wallet-communication/rpc/rpc-client.js +0 -232
  368. package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +0 -401
  369. package/src/utils/aepp-wallet-communication/schema.ts +0 -80
  370. package/src/utils/aepp-wallet-communication/wallet-detector.js +0 -92
  371. package/src/utils/async-init.js +0 -45
  372. package/src/utils/crypto.js +0 -219
  373. package/src/utils/hd-wallet.js +0 -100
  374. package/src/utils/json-big.js +0 -26
  375. package/src/utils/keystore.js +0 -219
  376. package/src/utils/swagger.js +0 -156
@@ -0,0 +1,199 @@
1
+ /*
2
+ * ISC License (ISC)
3
+ * Copyright (c) 2022 aeternity developers
4
+ *
5
+ * Permission to use, copy, modify, and/or distribute this software for any
6
+ * purpose with or without fee is hereby granted, provided that the above
7
+ * copyright notice and this permission notice appear in all copies.
8
+ *
9
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
10
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11
+ * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
12
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
14
+ * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15
+ * PERFORMANCE OF THIS SOFTWARE.
16
+ */
17
+
18
+ /**
19
+ * Transaction methods
20
+ *
21
+ * This is implementation of [Tx](api/tx.md) relays
22
+ * the creation of transactions to {@link Node}.
23
+ * These methods provide ability to create native transactions.
24
+ */
25
+ import {
26
+ ABI_VERSIONS, CtVersion, PROTOCOL_VM_ABI, TX_TYPE, TX_TTL, TxParamsCommon
27
+ } from './builder/schema'
28
+ import {
29
+ ArgumentError, UnsupportedProtocolError, UnknownTxError, InvalidTxParamsError
30
+ } from '../utils/errors'
31
+ import BigNumber from 'bignumber.js'
32
+ import Node from '../Node'
33
+ import { EncodedData } from '../utils/encoder'
34
+ import { buildTx as syncBuildTx, unpackTx } from './builder/index'
35
+ import calculateMinFee from './min-fee'
36
+ import { isKeyOfObject } from '../utils/other'
37
+ import { AE_AMOUNT_FORMATS } from '../utils/amount-formatter'
38
+
39
+ type Int = number | string | BigNumber
40
+
41
+ // uses a new feature, probably typescript-eslint doesn't support it yet
42
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
43
+ export type BuildTxOptions <TxType extends TX_TYPE, OmitFields extends string> =
44
+ Omit<Parameters<typeof _buildTx<TxType>>[1], OmitFields>
45
+
46
+ // TODO: find a better name or rearrange methods
47
+ export async function _buildTx<TxType extends TX_TYPE> (
48
+ txType: TxType,
49
+ { denomination, absoluteTtl, ..._params }:
50
+ Omit<Parameters<typeof syncBuildTx<TxType, 'tx'>>[0], 'fee' | 'nonce' | 'ttl' | 'ctVersion' | 'abiVersion'>
51
+ & {
52
+ onNode: Node
53
+ fee?: Int
54
+ nonce?: number
55
+ ttl?: number
56
+ denomination?: AE_AMOUNT_FORMATS
57
+ absoluteTtl?: boolean
58
+ }
59
+ & (TxType extends TX_TYPE.oracleExtend | TX_TYPE.oracleResponse ? { callerId: EncodedData<'ak'> } : {})
60
+ & (TxType extends TX_TYPE.contractCreate | TX_TYPE.gaAttach ? { ctVersion?: CtVersion } : {})
61
+ & (TxType extends TX_TYPE.contractCall | TX_TYPE.oracleRegister
62
+ ? { abiVersion?: ABI_VERSIONS } : {})
63
+ ): Promise<EncodedData<'tx'>> {
64
+ // TODO: avoid this assertion
65
+ const params = _params as unknown as TxParamsCommon & { onNode: Node }
66
+ let senderKey: keyof TxParamsCommon | '<absent>'
67
+ switch (txType) {
68
+ case TX_TYPE.spend:
69
+ case TX_TYPE.oracleQuery:
70
+ senderKey = 'senderId'
71
+ break
72
+ case TX_TYPE.nameClaim:
73
+ case TX_TYPE.nameUpdate:
74
+ case TX_TYPE.nameRevoke:
75
+ case TX_TYPE.nameTransfer:
76
+ case TX_TYPE.namePreClaim:
77
+ case TX_TYPE.oracleRegister:
78
+ senderKey = 'accountId'
79
+ break
80
+ case TX_TYPE.contractCreate:
81
+ case TX_TYPE.gaAttach:
82
+ senderKey = 'ownerId'
83
+ break
84
+ case TX_TYPE.contractCall:
85
+ case TX_TYPE.oracleExtend:
86
+ case TX_TYPE.oracleResponse:
87
+ senderKey = 'callerId'
88
+ break
89
+ case TX_TYPE.channelCloseSolo:
90
+ case TX_TYPE.channelSlash:
91
+ case TX_TYPE.channelSettle:
92
+ case TX_TYPE.channelSnapshotSolo:
93
+ senderKey = 'fromId'
94
+ break
95
+ case TX_TYPE.payingFor:
96
+ senderKey = 'payerId'
97
+ break
98
+ default:
99
+ throw new ArgumentError('txType', 'valid transaction type', txType)
100
+ }
101
+ // TODO: move specific cases to field-types
102
+ if ([TX_TYPE.contractCreate, TX_TYPE.gaAttach].includes(txType)) {
103
+ params.ctVersion = await getVmVersion(
104
+ TX_TYPE.contractCreate, { ...params, ...params.ctVersion }
105
+ )
106
+ }
107
+ if (txType === TX_TYPE.contractCall) {
108
+ params.abiVersion = (await getVmVersion(TX_TYPE.contractCall, params)).abiVersion
109
+ }
110
+ if (txType === TX_TYPE.oracleRegister) {
111
+ params.abiVersion ??= ABI_VERSIONS.NO_ABI
112
+ }
113
+ if (txType === TX_TYPE.payingFor) {
114
+ params.tx = unpackTx(params.tx)
115
+ }
116
+ const senderId = params[senderKey]
117
+ // TODO: do this check on TypeScript level
118
+ if (senderId == null) throw new InvalidTxParamsError(`Transaction field ${senderKey} is missed`)
119
+ const extraParams = await prepareTxParams(
120
+ txType, { ...params, senderId, denomination, absoluteTtl }
121
+ )
122
+ return syncBuildTx({ ...params, ...extraParams } as any, txType, { denomination }).tx
123
+ }
124
+
125
+ /**
126
+ * Validated vm/abi version or get default based on transaction type and NODE version
127
+ *
128
+ * @param txType - Type of transaction
129
+ * @param ctVersion - Object with vm and abi version fields
130
+ * @returns Object with vm/abi version
131
+ */
132
+ export async function getVmVersion (
133
+ txType: TX_TYPE.contractCreate, ctVersion: Partial<CtVersion> & { onNode: Node }
134
+ ): Promise<CtVersion>
135
+ export async function getVmVersion (
136
+ txType: TX_TYPE, ctVersion: Partial<Pick<CtVersion, 'abiVersion'>> & { onNode: Node }
137
+ ): Promise<Pick<CtVersion, 'abiVersion'>>
138
+ export async function getVmVersion (
139
+ txType: TX_TYPE, { vmVersion, abiVersion, onNode }: Partial<CtVersion> & { onNode: Node }
140
+ ): Promise<Partial<CtVersion>> {
141
+ const { consensusProtocolVersion } = await onNode.getNodeInfo()
142
+ if (!isKeyOfObject(consensusProtocolVersion, PROTOCOL_VM_ABI)) {
143
+ throw new UnsupportedProtocolError('Not supported consensus protocol version')
144
+ }
145
+ const supportedProtocol = PROTOCOL_VM_ABI[consensusProtocolVersion]
146
+ if (!isKeyOfObject(txType, supportedProtocol)) {
147
+ throw new UnknownTxError('Not supported tx type')
148
+ }
149
+ const protocolForTX = supportedProtocol[txType]
150
+ abiVersion ??= protocolForTX.abiVersion[0]
151
+ vmVersion ??= protocolForTX.vmVersion[0]
152
+ return { vmVersion, abiVersion }
153
+ }
154
+
155
+ /**
156
+ * Calculate fee, get absolute ttl (ttl + height), get account nonce
157
+ *
158
+ * @param txType - Type of transaction
159
+ * @param params - Object which contains all tx data
160
+ * @returns Object with account nonce, absolute ttl and transaction fee
161
+ */
162
+ export async function prepareTxParams (
163
+ txType: TX_TYPE,
164
+ {
165
+ senderId,
166
+ nonce,
167
+ ttl = TX_TTL,
168
+ fee: f,
169
+ absoluteTtl,
170
+ vsn,
171
+ strategy,
172
+ denomination,
173
+ onNode,
174
+ ...txParams
175
+ }: PrepareTxParamsOptions
176
+ ): Promise<{ fee: BigNumber, ttl: number, nonce: number }> {
177
+ nonce ??= (
178
+ await onNode.getAccountNextNonce(senderId, { strategy }).catch(() => ({ nextNonce: 1 }))
179
+ ).nextNonce
180
+
181
+ if (ttl !== 0) {
182
+ if (ttl < 0) throw new ArgumentError('ttl', 'greater or equal to 0', ttl)
183
+ ttl += absoluteTtl === true ? 0 : (await onNode.getCurrentKeyBlock()).height
184
+ }
185
+
186
+ const fee = f != null
187
+ ? new BigNumber(f)
188
+ : calculateMinFee(txType, { params: { ...txParams, senderId, nonce, ttl }, vsn, denomination })
189
+ return { fee, ttl, nonce }
190
+ }
191
+
192
+ interface PrepareTxParamsOptions extends Pick<TxParamsCommon, 'nonce' | 'ttl' | 'fee'> {
193
+ senderId: EncodedData<'ak'>
194
+ vsn?: number
195
+ absoluteTtl?: boolean
196
+ strategy?: 'continuity' | 'max'
197
+ denomination?: AE_AMOUNT_FORMATS
198
+ onNode: Node
199
+ }
@@ -0,0 +1,136 @@
1
+ import BigNumber from 'bignumber.js'
2
+ import { MIN_GAS_PRICE, TX_TYPE, TxParamsCommon } from './builder/schema'
3
+ import { AE_AMOUNT_FORMATS } from '../utils/amount-formatter'
4
+ import { buildTx } from './builder'
5
+ import { isKeyOfObject } from '../utils/other'
6
+
7
+ const BASE_GAS = 15000
8
+ const GAS_PER_BYTE = 20
9
+ const KEY_BLOCK_INTERVAL = 3
10
+
11
+ /**
12
+ * Calculate the Base fee gas
13
+ * @see {@link https://github.com/aeternity/protocol/blob/master/consensus/README.md#gas}
14
+ * @param txType - The transaction type
15
+ * @returns The base fee
16
+ * @example
17
+ * ```js
18
+ * TX_FEE_BASE('channelForceProgress') => new BigNumber(30 * 15000)
19
+ * ```
20
+ */
21
+ const TX_FEE_BASE_GAS = (txType: TX_TYPE): BigNumber => {
22
+ const feeFactors = {
23
+ [TX_TYPE.channelForceProgress]: 30,
24
+ [TX_TYPE.channelOffChain]: 0,
25
+ [TX_TYPE.channelOffChainCallContract]: 0,
26
+ [TX_TYPE.channelOffChainCreateContract]: 0,
27
+ [TX_TYPE.channelOffChainUpdateDeposit]: 0,
28
+ [TX_TYPE.channelOffChainUpdateWithdrawal]: 0,
29
+ [TX_TYPE.channelOffChainUpdateTransfer]: 0,
30
+ [TX_TYPE.contractCreate]: 5,
31
+ [TX_TYPE.contractCall]: 12,
32
+ [TX_TYPE.gaAttach]: 5,
33
+ [TX_TYPE.gaMeta]: 5,
34
+ [TX_TYPE.payingFor]: 1 / 5
35
+ } as const
36
+ const factor = feeFactors[txType as keyof typeof feeFactors] ?? 1
37
+ return new BigNumber(factor * BASE_GAS)
38
+ }
39
+
40
+ /**
41
+ * Calculate fee for Other types of transactions
42
+ * @see {@link https://github.com/aeternity/protocol/blob/master/consensus/README.md#gas}
43
+ * @param txType - The transaction type
44
+ * @param txSize - The transaction size
45
+ * @returns parameters - The transaction parameters
46
+ * @returns parameters.relativeTtl - The relative ttl
47
+ * @returns parameters.innerTxSize - The size of the inner transaction
48
+ * @returns The Other fee
49
+ * @example
50
+ * ```js
51
+ * TX_FEE_OTHER_GAS('oracleResponse',10, { relativeTtl: 10, innerTxSize: 10 })
52
+ * => new BigNumber(10).times(20).plus(Math.ceil(32000 * 10 / Math.floor(60 * 24 * 365 / 2)))
53
+ * ```
54
+ */
55
+ const TX_FEE_OTHER_GAS = (
56
+ txType: TX_TYPE,
57
+ txSize: number,
58
+ { relativeTtl, innerTxSize }: { relativeTtl: number, innerTxSize: number }
59
+ ): BigNumber => {
60
+ switch (txType) {
61
+ case TX_TYPE.oracleRegister:
62
+ case TX_TYPE.oracleExtend:
63
+ case TX_TYPE.oracleQuery:
64
+ case TX_TYPE.oracleResponse:
65
+ return new BigNumber(txSize)
66
+ .times(GAS_PER_BYTE)
67
+ .plus(
68
+ Math.ceil(32000 * relativeTtl / Math.floor(60 * 24 * 365 / KEY_BLOCK_INTERVAL))
69
+ )
70
+ case TX_TYPE.gaMeta:
71
+ case TX_TYPE.payingFor:
72
+ return new BigNumber(txSize).minus(innerTxSize).times(GAS_PER_BYTE)
73
+ default:
74
+ return new BigNumber(txSize).times(GAS_PER_BYTE)
75
+ }
76
+ }
77
+
78
+ function getOracleRelativeTtl (params: any, txType: TX_TYPE): number {
79
+ const ttlKeys = {
80
+ [TX_TYPE.oracleRegister]: 'oracleTtlValue',
81
+ [TX_TYPE.oracleExtend]: 'oracleTtlValue',
82
+ [TX_TYPE.oracleQuery]: 'queryTtlValue',
83
+ [TX_TYPE.oracleResponse]: 'responseTtlValue'
84
+ } as const
85
+
86
+ if (!isKeyOfObject(txType, ttlKeys)) return 1
87
+ else return params[ttlKeys[txType]]
88
+ }
89
+
90
+ /**
91
+ * Calculate fee based on tx type and params
92
+ */
93
+ function buildFee (
94
+ txType: TX_TYPE,
95
+ { params, vsn, denomination }:
96
+ { params: TxParamsCommon, vsn?: number, denomination?: AE_AMOUNT_FORMATS }
97
+ ): BigNumber {
98
+ const { rlpEncoded: { length } } = buildTx(params, txType, { vsn, denomination })
99
+
100
+ return TX_FEE_BASE_GAS(txType)
101
+ .plus(TX_FEE_OTHER_GAS(txType, length, {
102
+ relativeTtl: getOracleRelativeTtl(params, txType),
103
+ innerTxSize: [TX_TYPE.gaMeta, TX_TYPE.payingFor].includes(txType)
104
+ ? params.tx.tx.encodedTx.rlpEncoded.length
105
+ : 0
106
+ }))
107
+ .times(MIN_GAS_PRICE)
108
+ }
109
+
110
+ /**
111
+ * Calculate min fee
112
+ * @param txType - Transaction type
113
+ * @param options - Options object
114
+ * @param options.params - Tx params
115
+ * @example
116
+ * ```js
117
+ * calculateMinFee('spendTx', { gasLimit, params })
118
+ * ```
119
+ */
120
+ export default function calculateMinFee (
121
+ txType: TX_TYPE, { params, vsn, denomination }: CalculateMinFeeOptions
122
+ ): BigNumber {
123
+ let fee = new BigNumber(0)
124
+ let previousFee
125
+ do {
126
+ previousFee = fee
127
+ fee = buildFee(txType, { params: { ...params, fee }, vsn, denomination })
128
+ } while (!fee.eq(previousFee))
129
+ return fee
130
+ }
131
+
132
+ interface CalculateMinFeeOptions {
133
+ params: TxParamsCommon
134
+ vsn?: number
135
+ denomination?: AE_AMOUNT_FORMATS
136
+ }
@@ -0,0 +1,226 @@
1
+ import { verify, hash } from '../utils/crypto'
2
+ import { encode, decode } from './builder/helpers'
3
+ import BigNumber from 'bignumber.js'
4
+ import {
5
+ PROTOCOL_VM_ABI, RawTxObject, TxSchema, TxParamsCommon, TX_TYPE, TxTypeSchemas, CtVersion
6
+ } from './builder/schema'
7
+ import { TxUnpacked, unpackTx } from './builder'
8
+ import calculateMinFee from './min-fee'
9
+ import { UnsupportedProtocolError } from '../utils/errors'
10
+ import { concatBuffers, isKeyOfObject } from '../utils/other'
11
+ import { EncodedData } from '../utils/encoder'
12
+ import Node from '../Node'
13
+
14
+ interface Account {
15
+ balance: bigint
16
+ id: EncodedData<'ak'>
17
+ nonce: number
18
+ }
19
+
20
+ export interface ValidatorResult {
21
+ message: string
22
+ key: string
23
+ checkedKeys: string[]
24
+ }
25
+
26
+ type Validator = (
27
+ tx: {
28
+ encodedTx: TxUnpacked<TxSchema>
29
+ signatures: Buffer[]
30
+ tx: TxUnpacked<TxSchema> & {
31
+ tx: TxTypeSchemas[TX_TYPE.signed]
32
+ }
33
+ nonce?: number
34
+ ttl?: number
35
+ amount?: number
36
+ fee?: number
37
+ nameFee?: number
38
+ ctVersion?: Partial<CtVersion>
39
+ abiVersion?: number
40
+ contractId?: EncodedData<'ct'>
41
+ },
42
+ options: {
43
+ account?: Account
44
+ nodeNetworkId: string
45
+ parentTxTypes: TX_TYPE[]
46
+ node: Node
47
+ txType: TX_TYPE
48
+ height: number
49
+ consensusProtocolVersion: number
50
+ }
51
+ ) => ValidatorResult[] | Promise<ValidatorResult[]>
52
+
53
+ const validators: Validator[] = [
54
+ ({ encodedTx, signatures }, { account, nodeNetworkId, parentTxTypes }) => {
55
+ if ((encodedTx ?? signatures) === undefined) return []
56
+ if (account == null) return []
57
+ if (signatures.length !== 1) return [] // TODO: Support multisignature?
58
+ const prefix = Buffer.from([
59
+ nodeNetworkId,
60
+ ...parentTxTypes.includes(TX_TYPE.payingFor) ? ['inner_tx'] : []
61
+ ].join('-'))
62
+ const txWithNetworkId = concatBuffers([prefix, encodedTx.rlpEncoded])
63
+ const txHashWithNetworkId = concatBuffers([prefix, hash(encodedTx.rlpEncoded)])
64
+ const decodedPub = decode(account.id)
65
+ if (verify(txWithNetworkId, signatures[0], decodedPub) ||
66
+ verify(txHashWithNetworkId, signatures[0], decodedPub)) return []
67
+ return [{
68
+ message: 'Signature cannot be verified, please ensure that you transaction have' +
69
+ ' the correct prefix and the correct private key for the sender address',
70
+ key: 'InvalidSignature',
71
+ checkedKeys: ['encodedTx', 'signatures']
72
+ }]
73
+ },
74
+ async ({ encodedTx, tx }, { node, parentTxTypes, txType }) => {
75
+ if ((encodedTx ?? tx) === undefined) return []
76
+ return await verifyTransaction(
77
+ encode((encodedTx ?? tx).rlpEncoded, 'tx'),
78
+ node,
79
+ [...parentTxTypes, txType]
80
+ )
81
+ },
82
+ (tx: any, { txType }) => {
83
+ if (tx.fee === undefined) return []
84
+ const minFee = calculateMinFee(txType, { params: tx, vsn: tx.VSN })
85
+ if (minFee.lte(tx.fee)) return []
86
+ return [{
87
+ message: `Fee ${tx.fee as string} is too low, minimum fee for this transaction is ${minFee.toString()}`,
88
+ key: 'InsufficientFee',
89
+ checkedKeys: ['fee']
90
+ }]
91
+ },
92
+ ({ ttl }, { height }) => {
93
+ if (ttl === undefined) return []
94
+ ttl = +ttl
95
+ if (ttl === 0 || ttl >= height) return []
96
+ return [{
97
+ message: `TTL ${ttl} is already expired, current height is ${height}`,
98
+ key: 'ExpiredTTL',
99
+ checkedKeys: ['ttl']
100
+ }]
101
+ },
102
+ ({ amount, fee, nameFee, tx }, { account, parentTxTypes, txType }) => {
103
+ if (account == null) return []
104
+ if ((amount ?? fee ?? nameFee) === undefined) return []
105
+ fee ??= 0
106
+ const cost = new BigNumber(fee).plus(nameFee ?? 0).plus(amount ?? 0)
107
+ .plus(txType === TX_TYPE.payingFor ? (tx.tx.encodedTx.tx).fee : 0)
108
+ .minus(parentTxTypes.includes(TX_TYPE.payingFor) ? fee : 0)
109
+ if (cost.lte(account.balance.toString())) return []
110
+ return [{
111
+ message: `Account balance ${account.balance.toString()} is not enough to execute the transaction that costs ${cost.toFixed()}`,
112
+ key: 'InsufficientBalance',
113
+ checkedKeys: ['amount', 'fee', 'nameFee']
114
+ }]
115
+ },
116
+ ({ nonce }, { account, parentTxTypes }) => {
117
+ if (nonce == null || account == null || parentTxTypes.includes(TX_TYPE.gaMeta)) return []
118
+ nonce = +nonce
119
+ const validNonce = account.nonce + 1
120
+ if (nonce === validNonce) return []
121
+ return [{
122
+ ...nonce < validNonce
123
+ ? {
124
+ message: `Nonce ${nonce} is already used, valid nonce is ${validNonce}`,
125
+ key: 'NonceAlreadyUsed'
126
+ }
127
+ : {
128
+ message: `Nonce ${nonce} is too high, valid nonce is ${validNonce}`,
129
+ key: 'NonceHigh'
130
+ },
131
+ checkedKeys: ['nonce']
132
+ }]
133
+ },
134
+ ({ ctVersion, abiVersion }, { txType, consensusProtocolVersion }) => {
135
+ if (!isKeyOfObject(consensusProtocolVersion, PROTOCOL_VM_ABI)) {
136
+ throw new UnsupportedProtocolError(`Unsupported protocol: ${consensusProtocolVersion}`)
137
+ }
138
+ const protocol = PROTOCOL_VM_ABI[consensusProtocolVersion]
139
+
140
+ // If not contract create tx
141
+ if (ctVersion == null) ctVersion = { abiVersion }
142
+ const txProtocol = protocol[txType as keyof typeof protocol]
143
+ if (txProtocol == null) return []
144
+ if (Object.entries(ctVersion).some(
145
+ ([
146
+ key,
147
+ value
148
+ ]: [
149
+ key:keyof typeof txProtocol,
150
+ value:any]) => !(txProtocol[key].includes(+value as never)))) {
151
+ return [{
152
+ message: `ABI/VM version ${JSON.stringify(ctVersion)} is wrong, supported is: ${JSON.stringify(txProtocol)}`,
153
+ key: 'VmAndAbiVersionMismatch',
154
+ checkedKeys: ['ctVersion', 'abiVersion']
155
+ }]
156
+ }
157
+ return []
158
+ },
159
+ async ({ contractId }, { txType, node }) => {
160
+ if (TX_TYPE.contractCall !== txType) return []
161
+ contractId = contractId as EncodedData<'ct'>
162
+ try {
163
+ const { active } = await node.getContract(contractId)
164
+ if (active) return []
165
+ return [{
166
+ message: `Contract ${contractId} is not active`,
167
+ key: 'ContractNotActive',
168
+ checkedKeys: ['contractId']
169
+ }]
170
+ } catch (error) {
171
+ if (error.response?.parsedBody?.reason == null) throw error
172
+ return [{
173
+ message: error.response.parsedBody.reason,
174
+ key: 'ContractNotFound',
175
+ checkedKeys: ['contractId']
176
+ }]
177
+ }
178
+ }
179
+ ]
180
+
181
+ const getSenderAddress = (
182
+ tx: TxParamsCommon | RawTxObject<TxSchema>
183
+ ): EncodedData<'ak'> | undefined => [
184
+ 'senderId', 'accountId', 'ownerId', 'callerId',
185
+ 'oracleId', 'fromId', 'initiator', 'gaId', 'payerId'
186
+ ]
187
+ .map((key: keyof TxSchema) => tx[key])
188
+ .filter(a => a)
189
+ .map((a) => a?.toString().replace(/^ok_/, 'ak_'))[0] as EncodedData<'ak'> | undefined
190
+
191
+ /**
192
+ * Transaction Validator
193
+ * This function validates some of transaction properties,
194
+ * to make sure it can be posted it to the chain
195
+ * @param transaction - Base64Check-encoded transaction
196
+ * @param node - Node to validate transaction against
197
+ * @param parentTxTypes - Types of parent transactions
198
+ * @returns Array with verification errors
199
+ * @example const errors = await verifyTransaction(transaction, node)
200
+ */
201
+ export default async function verifyTransaction (
202
+ transaction: EncodedData<'tx' | 'pi'>,
203
+ node: Node,
204
+ parentTxTypes: TX_TYPE[] = []
205
+ ): Promise<ValidatorResult[]> {
206
+ const { tx, txType } = unpackTx<TX_TYPE.signed>(transaction)
207
+ const address = getSenderAddress(tx) ??
208
+ (txType === TX_TYPE.signed ? getSenderAddress(tx.encodedTx.tx) : undefined)
209
+ const [account, { height }, { consensusProtocolVersion, nodeNetworkId }] = await Promise.all([
210
+ address == null
211
+ ? undefined
212
+ : node.getAccountByPubkey(address)
213
+ .catch(() => ({ id: address, balance: 0n, nonce: 0 }))
214
+ // TODO: remove after fixing https://github.com/aeternity/aepp-sdk-js/issues/1537
215
+ .then(acc => ({ ...acc, id: acc.id as EncodedData<'ak'> })),
216
+ node.getCurrentKeyBlockHeight(),
217
+ node.getNodeInfo()
218
+ ])
219
+
220
+ return (await Promise.all(
221
+ validators.map(v => v(
222
+ tx as any,
223
+ { txType, node, account, height, consensusProtocolVersion, nodeNetworkId, parentTxTypes }
224
+ ))
225
+ )).flat()
226
+ }
@@ -0,0 +1,3 @@
1
+ declare module '@aeternity/argon2-browser/dist/argon2-bundled.min.js' {
2
+ export * from 'argon2-browser'
3
+ }
@@ -0,0 +1,3 @@
1
+ declare module '@aeternity/uuid' {
2
+ export * from 'uuid'
3
+ }
@@ -0,0 +1,33 @@
1
+ // TODO: remove after solving https://github.com/axic/bip32-path/issues/5
2
+
3
+ declare module 'bip32-path' {
4
+ interface BipPath {
5
+ toPathArray: () => number[]
6
+ /**
7
+ * returns a text encoded path. Set to noRoot to true to omit the m/ prefix.
8
+ * Set oldStyle true to use h instead of ' for marking hardened nodes.
9
+ */
10
+ toString: (noRoot: boolean, oldStyle: boolean) => string
11
+
12
+ /**
13
+ * returns true if the input is a valid path string
14
+ */
15
+ validateString: (path: string) => boolean
16
+
17
+ /**
18
+ * returns true if the input is a valid binary path array
19
+ */
20
+ validatePathArray: (path: string) => boolean
21
+ }
22
+
23
+ /**
24
+ * creates an instance from a path written as text.
25
+ * Set reqRoot to true if the m/ prefix is mandatory.
26
+ */
27
+ export const fromString: (text: string, reqRoot?: boolean) => BipPath
28
+
29
+ /**
30
+ * creates an instance from a binary path array
31
+ */
32
+ export const fromPathArray: (path: string) => BipPath
33
+ }
@@ -0,0 +1,14 @@
1
+ // TODO: remove after solving https://github.com/dchest/tweetnacl-auth-js/issues/3
2
+
3
+ declare module 'tweetnacl-auth' {
4
+ /**
5
+ * Authenticates the given message with the secret key.
6
+ * (In other words, returns HMAC-SHA-512-256 of the message under the key.)
7
+ */
8
+ export default function (message: Uint8Array, key: Uint8Array): Uint8Array
9
+
10
+ /**
11
+ * Returns HMAC-SHA-512 (without truncation) of the message under the key
12
+ */
13
+ export const full: (message: Uint8Array, key: Uint8Array) => Uint8Array
14
+ }