@aeternity/aepp-sdk 10.0.0 → 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 (424) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +15 -14
  3. package/dist/aepp-sdk.browser-script.js +1 -1
  4. package/dist/aepp-sdk.browser-script.js.LICENSE.txt +13 -40
  5. package/dist/aepp-sdk.browser-script.js.map +1 -1
  6. package/dist/aepp-sdk.browser.js +1 -1
  7. package/dist/aepp-sdk.browser.js.map +1 -1
  8. package/dist/aepp-sdk.js +1 -1
  9. package/dist/aepp-sdk.js.map +1 -1
  10. package/es/AeSdk.d.ts +37 -0
  11. package/es/AeSdk.mjs +81 -0
  12. package/es/AeSdk.mjs.map +1 -0
  13. package/es/AeSdkAepp.d.ts +69 -0
  14. package/es/AeSdkAepp.mjs +175 -0
  15. package/es/AeSdkAepp.mjs.map +1 -0
  16. package/es/AeSdkBase.d.ts +212 -0
  17. package/es/AeSdkBase.mjs +310 -0
  18. package/es/AeSdkBase.mjs.map +1 -0
  19. package/es/AeSdkWallet.d.ts +103 -0
  20. package/es/AeSdkWallet.mjs +322 -0
  21. package/es/AeSdkWallet.mjs.map +1 -0
  22. package/es/Node.d.ts +44 -0
  23. package/es/Node.mjs +141 -0
  24. package/es/Node.mjs.map +1 -0
  25. package/es/account/Base.d.ts +65 -0
  26. package/es/account/Base.mjs +123 -0
  27. package/es/account/Base.mjs.map +1 -0
  28. package/es/account/Memory.d.ts +25 -0
  29. package/es/account/Memory.mjs +81 -0
  30. package/es/account/Memory.mjs.map +1 -0
  31. package/es/account/Rpc.d.ts +27 -0
  32. package/es/account/Rpc.mjs +79 -0
  33. package/es/account/Rpc.mjs.map +1 -0
  34. package/es/aens.d.ts +209 -0
  35. package/es/aens.mjs +332 -0
  36. package/es/aens.mjs.map +1 -0
  37. package/es/aepp-wallet-communication/connection/Browser.d.ts +32 -0
  38. package/es/aepp-wallet-communication/connection/Browser.mjs +70 -0
  39. package/es/aepp-wallet-communication/connection/Browser.mjs.map +1 -0
  40. package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +17 -0
  41. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +57 -0
  42. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -0
  43. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.d.ts +35 -0
  44. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs +142 -0
  45. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs.map +1 -0
  46. package/es/aepp-wallet-communication/connection-proxy.d.ts +10 -0
  47. package/{src/utils/crypto-ts.ts → es/aepp-wallet-communication/connection-proxy.mjs} +15 -11
  48. package/es/aepp-wallet-communication/connection-proxy.mjs.map +1 -0
  49. package/es/aepp-wallet-communication/rpc/RpcClient.d.ts +33 -0
  50. package/es/aepp-wallet-communication/rpc/RpcClient.mjs +169 -0
  51. package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -0
  52. package/es/aepp-wallet-communication/rpc/types.d.ts +77 -0
  53. package/es/aepp-wallet-communication/rpc/types.mjs +3 -0
  54. package/es/aepp-wallet-communication/rpc/types.mjs.map +1 -0
  55. package/es/aepp-wallet-communication/schema.d.ts +118 -0
  56. package/es/aepp-wallet-communication/schema.mjs +214 -0
  57. package/es/aepp-wallet-communication/schema.mjs.map +1 -0
  58. package/es/aepp-wallet-communication/wallet-detector.d.ts +24 -0
  59. package/es/aepp-wallet-communication/wallet-detector.mjs +63 -0
  60. package/es/aepp-wallet-communication/wallet-detector.mjs.map +1 -0
  61. package/es/apis/compiler/compiler.d.ts +92 -0
  62. package/es/apis/compiler/compiler.mjs +576 -0
  63. package/es/apis/compiler/compiler.mjs.map +1 -0
  64. package/es/apis/compiler/index.d.ts +2 -0
  65. package/es/apis/compiler/index.mjs +3 -0
  66. package/es/apis/compiler/index.mjs.map +1 -0
  67. package/es/apis/compiler/models/index.d.ts +248 -0
  68. package/es/apis/compiler/models/index.mjs +48 -0
  69. package/es/apis/compiler/models/index.mjs.map +1 -0
  70. package/es/apis/compiler/models/mappers.d.ts +23 -0
  71. package/es/apis/compiler/models/mappers.mjs +585 -0
  72. package/es/apis/compiler/models/mappers.mjs.map +1 -0
  73. package/es/apis/compiler/models/parameters.d.ts +13 -0
  74. package/es/apis/compiler/models/parameters.mjs +71 -0
  75. package/es/apis/compiler/models/parameters.mjs.map +1 -0
  76. package/es/apis/node/index.d.ts +2 -0
  77. package/es/apis/node/index.mjs +3 -0
  78. package/es/apis/node/index.mjs.map +1 -0
  79. package/es/apis/node/models/index.d.ts +1061 -0
  80. package/es/apis/node/models/index.mjs +2 -0
  81. package/es/apis/node/models/index.mjs.map +1 -0
  82. package/es/apis/node/models/mappers.d.ts +95 -0
  83. package/es/apis/node/models/mappers.mjs +4164 -0
  84. package/es/apis/node/models/mappers.mjs.map +1 -0
  85. package/es/apis/node/models/parameters.d.ts +17 -0
  86. package/es/apis/node/models/parameters.mjs +165 -0
  87. package/es/apis/node/models/parameters.mjs.map +1 -0
  88. package/es/apis/node/node.d.ts +215 -0
  89. package/es/apis/node/node.mjs +1165 -0
  90. package/es/apis/node/node.mjs.map +1 -0
  91. package/es/chain.d.ts +220 -0
  92. package/es/chain.mjs +524 -0
  93. package/es/chain.mjs.map +1 -0
  94. package/es/channel/handlers.d.ts +34 -0
  95. package/es/channel/{handlers.js → handlers.mjs} +163 -130
  96. package/es/channel/handlers.mjs.map +1 -0
  97. package/es/channel/index.d.ts +634 -0
  98. package/es/channel/index.mjs +978 -0
  99. package/es/channel/index.mjs.map +1 -0
  100. package/es/channel/internal.d.ts +100 -0
  101. package/es/channel/internal.mjs +328 -0
  102. package/es/channel/internal.mjs.map +1 -0
  103. package/es/contract/Compiler.d.ts +17 -0
  104. package/es/contract/Compiler.mjs +67 -0
  105. package/es/contract/Compiler.mjs.map +1 -0
  106. package/es/contract/aci.d.ts +125 -0
  107. package/es/contract/aci.mjs +496 -0
  108. package/es/contract/aci.mjs.map +1 -0
  109. package/es/contract/ga.d.ts +68 -0
  110. package/es/contract/ga.mjs +190 -0
  111. package/es/contract/ga.mjs.map +1 -0
  112. package/es/contract/methods.d.ts +68 -0
  113. package/es/contract/methods.mjs +101 -0
  114. package/es/contract/methods.mjs.map +1 -0
  115. package/es/index.d.ts +32 -0
  116. package/es/index.mjs +49 -0
  117. package/es/index.mjs.map +1 -0
  118. package/es/oracle.d.ts +154 -0
  119. package/es/oracle.mjs +288 -0
  120. package/es/oracle.mjs.map +1 -0
  121. package/es/spend.d.ts +61 -0
  122. package/es/spend.mjs +122 -0
  123. package/es/spend.mjs.map +1 -0
  124. package/es/tx/builder/constants.d.ts +41 -0
  125. package/es/tx/builder/constants.mjs +100 -0
  126. package/es/tx/builder/constants.mjs.map +1 -0
  127. package/es/tx/builder/field-types.d.ts +62 -0
  128. package/es/tx/builder/field-types.mjs +126 -0
  129. package/es/tx/builder/field-types.mjs.map +1 -0
  130. package/es/tx/builder/helpers.d.ts +131 -0
  131. package/es/tx/builder/helpers.mjs +223 -0
  132. package/es/tx/builder/helpers.mjs.map +1 -0
  133. package/es/tx/builder/index.d.ts +75 -0
  134. package/es/tx/builder/index.mjs +424 -0
  135. package/es/tx/builder/index.mjs.map +1 -0
  136. package/es/tx/builder/schema.d.ts +350 -0
  137. package/es/tx/builder/schema.mjs +320 -0
  138. package/es/tx/builder/schema.mjs.map +1 -0
  139. package/es/tx/index.d.ts +63 -0
  140. package/es/tx/index.mjs +209 -0
  141. package/es/tx/index.mjs.map +1 -0
  142. package/es/tx/min-fee.d.ts +20 -0
  143. package/es/tx/min-fee.mjs +148 -0
  144. package/es/tx/min-fee.mjs.map +1 -0
  145. package/es/tx/validator.d.ts +19 -0
  146. package/es/tx/validator.mjs +240 -0
  147. package/es/tx/validator.mjs.map +1 -0
  148. package/es/typings/@aeternity__argon2-browser/index.d.mjs +2 -0
  149. package/es/typings/@aeternity__argon2-browser/index.d.mjs.map +1 -0
  150. package/es/typings/@aeternity__uuid/index.d.mjs +2 -0
  151. package/es/typings/@aeternity__uuid/index.d.mjs.map +1 -0
  152. package/es/typings/bip32-path/index.d.mjs +2 -0
  153. package/es/typings/bip32-path/index.d.mjs.map +1 -0
  154. package/es/typings/blakejs/index.d.mjs +2 -0
  155. package/es/typings/blakejs/index.d.mjs.map +1 -0
  156. package/es/typings/tweetnacl-auth/index.d.mjs +2 -0
  157. package/es/typings/tweetnacl-auth/index.d.mjs.map +1 -0
  158. package/es/utils/amount-formatter.d.ts +42 -0
  159. package/es/utils/{amount-formatter.js → amount-formatter.mjs} +38 -44
  160. package/es/utils/amount-formatter.mjs.map +1 -0
  161. package/es/utils/autorest.d.ts +6 -0
  162. package/es/utils/autorest.mjs +97 -0
  163. package/es/utils/autorest.mjs.map +1 -0
  164. package/es/utils/bignumber.d.ts +13 -0
  165. package/es/utils/bignumber.mjs +23 -0
  166. package/es/utils/bignumber.mjs.map +1 -0
  167. package/es/{bytes.d.ts → utils/bytes.d.ts} +10 -13
  168. package/es/utils/{bytes.js → bytes.mjs} +26 -22
  169. package/es/utils/bytes.mjs.map +1 -0
  170. package/es/utils/crypto.d.ts +103 -0
  171. package/es/utils/crypto.mjs +221 -0
  172. package/es/utils/crypto.mjs.map +1 -0
  173. package/es/utils/encoder.d.ts +26 -0
  174. package/es/utils/encoder.mjs +102 -0
  175. package/es/utils/encoder.mjs.map +1 -0
  176. package/es/utils/errors.d.ts +481 -0
  177. package/es/utils/errors.mjs +882 -0
  178. package/es/utils/errors.mjs.map +1 -0
  179. package/es/utils/hd-wallet.d.ts +34 -0
  180. package/es/utils/hd-wallet.mjs +122 -0
  181. package/es/utils/hd-wallet.mjs.map +1 -0
  182. package/es/utils/json-big.d.ts +5 -0
  183. package/es/utils/json-big.mjs +41 -0
  184. package/es/utils/json-big.mjs.map +1 -0
  185. package/es/utils/keystore.d.ts +51 -0
  186. package/es/utils/keystore.mjs +145 -0
  187. package/es/utils/keystore.mjs.map +1 -0
  188. package/es/{mptree.d.ts → utils/mptree.d.ts} +5 -8
  189. package/es/utils/{mptree.js → mptree.mjs} +33 -25
  190. package/es/utils/mptree.mjs.map +1 -0
  191. package/es/utils/other.d.ts +14 -0
  192. package/es/utils/other.mjs +28 -0
  193. package/es/utils/other.mjs.map +1 -0
  194. package/es/{semver-satisfies.d.ts → utils/semver-satisfies.d.ts} +0 -0
  195. package/es/utils/{semver-satisfies.js → semver-satisfies.mjs} +1 -1
  196. package/es/utils/semver-satisfies.mjs.map +1 -0
  197. package/es/utils/string.d.ts +24 -0
  198. package/es/utils/{string.js → string.mjs} +9 -11
  199. package/es/utils/string.mjs.map +1 -0
  200. package/package.json +67 -64
  201. package/src/AeSdk.ts +65 -0
  202. package/src/AeSdkAepp.ts +167 -0
  203. package/src/AeSdkBase.ts +320 -0
  204. package/src/AeSdkWallet.ts +332 -0
  205. package/src/Node.ts +167 -0
  206. package/src/account/Base.ts +114 -0
  207. package/src/account/Memory.ts +83 -0
  208. package/src/account/Rpc.ts +67 -0
  209. package/src/aens.ts +391 -0
  210. package/src/aepp-wallet-communication/connection/Browser.ts +68 -0
  211. package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +58 -0
  212. package/src/aepp-wallet-communication/connection/BrowserWindowMessage.ts +111 -0
  213. package/{es/utils/crypto-ts.js → src/aepp-wallet-communication/connection-proxy.ts} +16 -9
  214. package/src/aepp-wallet-communication/rpc/RpcClient.ts +137 -0
  215. package/src/aepp-wallet-communication/rpc/types.ts +66 -0
  216. package/src/aepp-wallet-communication/schema.ts +181 -0
  217. package/src/aepp-wallet-communication/wallet-detector.ts +71 -0
  218. package/src/apis/compiler/code-model-v4.yaml +2649 -0
  219. package/src/apis/compiler/compiler.ts +585 -0
  220. package/src/apis/compiler/index.ts +2 -0
  221. package/src/apis/compiler/models/index.ts +301 -0
  222. package/src/apis/compiler/models/mappers.ts +583 -0
  223. package/src/apis/compiler/models/parameters.ts +93 -0
  224. package/src/apis/node/code-model-v4.yaml +10046 -0
  225. package/src/apis/node/index.ts +2 -0
  226. package/src/apis/node/models/index.ts +1253 -0
  227. package/src/apis/node/models/mappers.ts +4278 -0
  228. package/src/apis/node/models/parameters.ts +188 -0
  229. package/src/apis/node/node.ts +1299 -0
  230. package/src/chain.ts +444 -0
  231. package/src/channel/{handlers.js → handlers.ts} +238 -143
  232. package/src/channel/index.ts +991 -0
  233. package/src/channel/internal.ts +345 -0
  234. package/src/contract/Compiler.ts +66 -0
  235. package/src/contract/aci.ts +529 -0
  236. package/src/contract/ga.ts +178 -0
  237. package/src/contract/methods.ts +118 -0
  238. package/src/index.ts +51 -0
  239. package/src/oracle.ts +342 -0
  240. package/src/spend.ts +152 -0
  241. package/src/tx/builder/constants.ts +96 -0
  242. package/src/tx/builder/field-types.ts +111 -0
  243. package/src/tx/builder/helpers.ts +253 -0
  244. package/src/tx/builder/index.ts +394 -0
  245. package/src/tx/builder/schema.ts +771 -0
  246. package/src/tx/index.ts +199 -0
  247. package/src/tx/min-fee.ts +136 -0
  248. package/src/tx/validator.ts +226 -0
  249. package/src/typings/@aeternity__argon2-browser/index.d.ts +3 -0
  250. package/src/typings/@aeternity__uuid/index.d.ts +3 -0
  251. package/src/typings/bip32-path/index.d.ts +33 -0
  252. package/src/typings/tweetnacl-auth/index.d.ts +14 -0
  253. package/src/utils/amount-formatter.ts +29 -41
  254. package/src/utils/autorest.ts +90 -0
  255. package/src/utils/bignumber.ts +9 -19
  256. package/src/utils/bytes.ts +15 -16
  257. package/src/utils/crypto.ts +217 -0
  258. package/src/utils/encoder.ts +98 -0
  259. package/src/utils/errors.ts +817 -0
  260. package/src/utils/hd-wallet.ts +134 -0
  261. package/src/utils/json-big.ts +26 -0
  262. package/src/utils/keystore.ts +179 -0
  263. package/src/utils/mptree.ts +26 -20
  264. package/src/utils/other.ts +28 -43
  265. package/src/utils/string.ts +8 -10
  266. package/CHANGELOG.md +0 -1603
  267. package/es/account/base.js +0 -169
  268. package/es/account/base.js.map +0 -1
  269. package/es/account/memory.js +0 -84
  270. package/es/account/memory.js.map +0 -1
  271. package/es/account/multiple.js +0 -178
  272. package/es/account/multiple.js.map +0 -1
  273. package/es/ae/aens.js +0 -408
  274. package/es/ae/aens.js.map +0 -1
  275. package/es/ae/aepp.js +0 -45
  276. package/es/ae/aepp.js.map +0 -1
  277. package/es/ae/contract.js +0 -312
  278. package/es/ae/contract.js.map +0 -1
  279. package/es/ae/index.js +0 -206
  280. package/es/ae/index.js.map +0 -1
  281. package/es/ae/oracle.js +0 -322
  282. package/es/ae/oracle.js.map +0 -1
  283. package/es/ae/universal.js +0 -45
  284. package/es/ae/universal.js.map +0 -1
  285. package/es/ae/wallet.js +0 -50
  286. package/es/ae/wallet.js.map +0 -1
  287. package/es/amount-formatter.d.ts +0 -58
  288. package/es/bignumber.d.ts +0 -24
  289. package/es/chain/index.js +0 -256
  290. package/es/chain/index.js.map +0 -1
  291. package/es/chain/node.js +0 -394
  292. package/es/chain/node.js.map +0 -1
  293. package/es/channel/handlers.js.map +0 -1
  294. package/es/channel/index.js +0 -980
  295. package/es/channel/index.js.map +0 -1
  296. package/es/channel/internal.js +0 -266
  297. package/es/channel/internal.js.map +0 -1
  298. package/es/contract/aci/helpers.js +0 -298
  299. package/es/contract/aci/helpers.js.map +0 -1
  300. package/es/contract/aci/index.js +0 -361
  301. package/es/contract/aci/index.js.map +0 -1
  302. package/es/contract/aci/transformation.js +0 -66
  303. package/es/contract/aci/transformation.js.map +0 -1
  304. package/es/contract/compiler.js +0 -244
  305. package/es/contract/compiler.js.map +0 -1
  306. package/es/contract/ga/helpers.js +0 -22
  307. package/es/contract/ga/helpers.js.map +0 -1
  308. package/es/contract/ga/index.js +0 -170
  309. package/es/contract/ga/index.js.map +0 -1
  310. package/es/contract/index.js +0 -162
  311. package/es/contract/index.js.map +0 -1
  312. package/es/crypto-ts.d.ts +0 -9
  313. package/es/index.js +0 -57
  314. package/es/index.js.map +0 -1
  315. package/es/node-pool/index.js +0 -187
  316. package/es/node-pool/index.js.map +0 -1
  317. package/es/node.js +0 -132
  318. package/es/node.js.map +0 -1
  319. package/es/other.d.ts +0 -31
  320. package/es/string.d.ts +0 -26
  321. package/es/tx/builder/helpers.js +0 -305
  322. package/es/tx/builder/helpers.js.map +0 -1
  323. package/es/tx/builder/index.js +0 -595
  324. package/es/tx/builder/index.js.map +0 -1
  325. package/es/tx/builder/schema.js +0 -814
  326. package/es/tx/builder/schema.js.map +0 -1
  327. package/es/tx/index.js +0 -300
  328. package/es/tx/index.js.map +0 -1
  329. package/es/tx/tx-object.js +0 -276
  330. package/es/tx/tx-object.js.map +0 -1
  331. package/es/tx/tx.js +0 -937
  332. package/es/tx/tx.js.map +0 -1
  333. package/es/tx/validator.js +0 -208
  334. package/es/tx/validator.js.map +0 -1
  335. package/es/typings/blakejs/index.d.js +0 -2
  336. package/es/typings/blakejs/index.d.js.map +0 -1
  337. package/es/utils/aepp-wallet-communication/connection/browser-runtime.js +0 -131
  338. package/es/utils/aepp-wallet-communication/connection/browser-runtime.js.map +0 -1
  339. package/es/utils/aepp-wallet-communication/connection/browser-window-message.js +0 -184
  340. package/es/utils/aepp-wallet-communication/connection/browser-window-message.js.map +0 -1
  341. package/es/utils/aepp-wallet-communication/connection/index.js +0 -84
  342. package/es/utils/aepp-wallet-communication/connection/index.js.map +0 -1
  343. package/es/utils/aepp-wallet-communication/content-script-bridge.js +0 -97
  344. package/es/utils/aepp-wallet-communication/content-script-bridge.js.map +0 -1
  345. package/es/utils/aepp-wallet-communication/helpers.js +0 -103
  346. package/es/utils/aepp-wallet-communication/helpers.js.map +0 -1
  347. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js +0 -329
  348. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js.map +0 -1
  349. package/es/utils/aepp-wallet-communication/rpc/rpc-client.js +0 -270
  350. package/es/utils/aepp-wallet-communication/rpc/rpc-client.js.map +0 -1
  351. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js +0 -533
  352. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js.map +0 -1
  353. package/es/utils/aepp-wallet-communication/schema.js +0 -107
  354. package/es/utils/aepp-wallet-communication/schema.js.map +0 -1
  355. package/es/utils/aepp-wallet-communication/wallet-detector.js +0 -109
  356. package/es/utils/aepp-wallet-communication/wallet-detector.js.map +0 -1
  357. package/es/utils/amount-formatter.js.map +0 -1
  358. package/es/utils/async-init.js +0 -67
  359. package/es/utils/async-init.js.map +0 -1
  360. package/es/utils/bignumber.js +0 -28
  361. package/es/utils/bignumber.js.map +0 -1
  362. package/es/utils/bytes.js.map +0 -1
  363. package/es/utils/crypto-ts.js.map +0 -1
  364. package/es/utils/crypto.js +0 -304
  365. package/es/utils/crypto.js.map +0 -1
  366. package/es/utils/hd-wallet.js +0 -112
  367. package/es/utils/hd-wallet.js.map +0 -1
  368. package/es/utils/json-big.js +0 -45
  369. package/es/utils/json-big.js.map +0 -1
  370. package/es/utils/keystore.js +0 -228
  371. package/es/utils/keystore.js.map +0 -1
  372. package/es/utils/mptree.js.map +0 -1
  373. package/es/utils/other.js +0 -43
  374. package/es/utils/other.js.map +0 -1
  375. package/es/utils/semver-satisfies.js.map +0 -1
  376. package/es/utils/string.js.map +0 -1
  377. package/es/utils/swagger.js +0 -132
  378. package/es/utils/swagger.js.map +0 -1
  379. package/src/account/base.js +0 -153
  380. package/src/account/memory.js +0 -78
  381. package/src/account/multiple.js +0 -154
  382. package/src/ae/aens.js +0 -366
  383. package/src/ae/aepp.js +0 -45
  384. package/src/ae/contract.js +0 -285
  385. package/src/ae/index.js +0 -167
  386. package/src/ae/oracle.js +0 -296
  387. package/src/ae/universal.js +0 -47
  388. package/src/ae/wallet.js +0 -50
  389. package/src/chain/index.js +0 -250
  390. package/src/chain/node.js +0 -293
  391. package/src/channel/index.js +0 -898
  392. package/src/channel/internal.js +0 -231
  393. package/src/contract/aci/index.js +0 -317
  394. package/src/contract/aci/transformation.js +0 -72
  395. package/src/contract/compiler.js +0 -195
  396. package/src/contract/ga/helpers.js +0 -17
  397. package/src/contract/ga/index.js +0 -147
  398. package/src/contract/index.js +0 -163
  399. package/src/index.js +0 -90
  400. package/src/node-pool/index.js +0 -171
  401. package/src/node.js +0 -118
  402. package/src/tx/builder/helpers.js +0 -325
  403. package/src/tx/builder/index.js +0 -460
  404. package/src/tx/builder/schema.js +0 -1211
  405. package/src/tx/index.js +0 -301
  406. package/src/tx/tx-object.js +0 -186
  407. package/src/tx/tx.js +0 -622
  408. package/src/tx/validator.js +0 -161
  409. package/src/utils/aepp-wallet-communication/connection/browser-runtime.js +0 -114
  410. package/src/utils/aepp-wallet-communication/connection/browser-window-message.js +0 -161
  411. package/src/utils/aepp-wallet-communication/connection/index.js +0 -85
  412. package/src/utils/aepp-wallet-communication/content-script-bridge.js +0 -85
  413. package/src/utils/aepp-wallet-communication/helpers.js +0 -70
  414. package/src/utils/aepp-wallet-communication/rpc/aepp-rpc.js +0 -268
  415. package/src/utils/aepp-wallet-communication/rpc/rpc-client.js +0 -223
  416. package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +0 -390
  417. package/src/utils/aepp-wallet-communication/schema.js +0 -108
  418. package/src/utils/aepp-wallet-communication/wallet-detector.js +0 -91
  419. package/src/utils/async-init.js +0 -41
  420. package/src/utils/crypto.js +0 -312
  421. package/src/utils/hd-wallet.js +0 -115
  422. package/src/utils/json-big.js +0 -26
  423. package/src/utils/keystore.js +0 -223
  424. package/src/utils/swagger.js +0 -133
@@ -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
+ }