@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,209 @@
1
+ import _includesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/includes";
2
+
3
+ /*
4
+ * ISC License (ISC)
5
+ * Copyright (c) 2022 aeternity developers
6
+ *
7
+ * Permission to use, copy, modify, and/or distribute this software for any
8
+ * purpose with or without fee is hereby granted, provided that the above
9
+ * copyright notice and this permission notice appear in all copies.
10
+ *
11
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
12
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
13
+ * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
14
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
15
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
16
+ * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17
+ * PERFORMANCE OF THIS SOFTWARE.
18
+ */
19
+
20
+ /**
21
+ * Transaction methods
22
+ *
23
+ * This is implementation of [Tx](api/tx.md) relays
24
+ * the creation of transactions to {@link Node}.
25
+ * These methods provide ability to create native transactions.
26
+ */
27
+ import { ABI_VERSIONS, PROTOCOL_VM_ABI, TX_TYPE, TX_TTL } from "./builder/schema.mjs";
28
+ import { ArgumentError, UnsupportedProtocolError, UnknownTxError, InvalidTxParamsError } from "../utils/errors.mjs";
29
+ import BigNumber from 'bignumber.js';
30
+ import { buildTx as syncBuildTx, unpackTx } from "./builder/index.mjs";
31
+ import calculateMinFee from "./min-fee.mjs";
32
+ import { isKeyOfObject } from "../utils/other.mjs";
33
+ // TODO: find a better name or rearrange methods
34
+ export async function _buildTx(txType, _ref) {
35
+ var _context;
36
+
37
+ let {
38
+ denomination,
39
+ absoluteTtl,
40
+ ..._params
41
+ } = _ref;
42
+ // TODO: avoid this assertion
43
+ const params = _params;
44
+ let senderKey;
45
+
46
+ switch (txType) {
47
+ case TX_TYPE.spend:
48
+ case TX_TYPE.oracleQuery:
49
+ senderKey = 'senderId';
50
+ break;
51
+
52
+ case TX_TYPE.nameClaim:
53
+ case TX_TYPE.nameUpdate:
54
+ case TX_TYPE.nameRevoke:
55
+ case TX_TYPE.nameTransfer:
56
+ case TX_TYPE.namePreClaim:
57
+ case TX_TYPE.oracleRegister:
58
+ senderKey = 'accountId';
59
+ break;
60
+
61
+ case TX_TYPE.contractCreate:
62
+ case TX_TYPE.gaAttach:
63
+ senderKey = 'ownerId';
64
+ break;
65
+
66
+ case TX_TYPE.contractCall:
67
+ case TX_TYPE.oracleExtend:
68
+ case TX_TYPE.oracleResponse:
69
+ senderKey = 'callerId';
70
+ break;
71
+
72
+ case TX_TYPE.channelCloseSolo:
73
+ case TX_TYPE.channelSlash:
74
+ case TX_TYPE.channelSettle:
75
+ case TX_TYPE.channelSnapshotSolo:
76
+ senderKey = 'fromId';
77
+ break;
78
+
79
+ case TX_TYPE.payingFor:
80
+ senderKey = 'payerId';
81
+ break;
82
+
83
+ default:
84
+ throw new ArgumentError('txType', 'valid transaction type', txType);
85
+ } // TODO: move specific cases to field-types
86
+
87
+
88
+ if (_includesInstanceProperty(_context = [TX_TYPE.contractCreate, TX_TYPE.gaAttach]).call(_context, txType)) {
89
+ params.ctVersion = await getVmVersion(TX_TYPE.contractCreate, { ...params,
90
+ ...params.ctVersion
91
+ });
92
+ }
93
+
94
+ if (txType === TX_TYPE.contractCall) {
95
+ params.abiVersion = (await getVmVersion(TX_TYPE.contractCall, params)).abiVersion;
96
+ }
97
+
98
+ if (txType === TX_TYPE.oracleRegister) {
99
+ var _params$abiVersion;
100
+
101
+ (_params$abiVersion = params.abiVersion) !== null && _params$abiVersion !== void 0 ? _params$abiVersion : params.abiVersion = ABI_VERSIONS.NO_ABI;
102
+ }
103
+
104
+ if (txType === TX_TYPE.payingFor) {
105
+ params.tx = unpackTx(params.tx);
106
+ }
107
+
108
+ const senderId = params[senderKey]; // TODO: do this check on TypeScript level
109
+
110
+ if (senderId == null) throw new InvalidTxParamsError(`Transaction field ${senderKey} is missed`);
111
+ const extraParams = await prepareTxParams(txType, { ...params,
112
+ senderId,
113
+ denomination,
114
+ absoluteTtl
115
+ });
116
+ return syncBuildTx({ ...params,
117
+ ...extraParams
118
+ }, txType, {
119
+ denomination
120
+ }).tx;
121
+ }
122
+ /**
123
+ * Validated vm/abi version or get default based on transaction type and NODE version
124
+ *
125
+ * @param txType - Type of transaction
126
+ * @param ctVersion - Object with vm and abi version fields
127
+ * @returns Object with vm/abi version
128
+ */
129
+
130
+ export async function getVmVersion(txType, _ref2) {
131
+ var _abiVersion, _vmVersion;
132
+
133
+ let {
134
+ vmVersion,
135
+ abiVersion,
136
+ onNode
137
+ } = _ref2;
138
+ const {
139
+ consensusProtocolVersion
140
+ } = await onNode.getNodeInfo();
141
+
142
+ if (!isKeyOfObject(consensusProtocolVersion, PROTOCOL_VM_ABI)) {
143
+ throw new UnsupportedProtocolError('Not supported consensus protocol version');
144
+ }
145
+
146
+ const supportedProtocol = PROTOCOL_VM_ABI[consensusProtocolVersion];
147
+
148
+ if (!isKeyOfObject(txType, supportedProtocol)) {
149
+ throw new UnknownTxError('Not supported tx type');
150
+ }
151
+
152
+ const protocolForTX = supportedProtocol[txType];
153
+ (_abiVersion = abiVersion) !== null && _abiVersion !== void 0 ? _abiVersion : abiVersion = protocolForTX.abiVersion[0];
154
+ (_vmVersion = vmVersion) !== null && _vmVersion !== void 0 ? _vmVersion : vmVersion = protocolForTX.vmVersion[0];
155
+ return {
156
+ vmVersion,
157
+ abiVersion
158
+ };
159
+ }
160
+ /**
161
+ * Calculate fee, get absolute ttl (ttl + height), get account nonce
162
+ *
163
+ * @param txType - Type of transaction
164
+ * @param params - Object which contains all tx data
165
+ * @returns Object with account nonce, absolute ttl and transaction fee
166
+ */
167
+
168
+ export async function prepareTxParams(txType, _ref3) {
169
+ var _nonce;
170
+
171
+ let {
172
+ senderId,
173
+ nonce,
174
+ ttl = TX_TTL,
175
+ fee: f,
176
+ absoluteTtl,
177
+ vsn,
178
+ strategy,
179
+ denomination,
180
+ onNode,
181
+ ...txParams
182
+ } = _ref3;
183
+ (_nonce = nonce) !== null && _nonce !== void 0 ? _nonce : nonce = (await onNode.getAccountNextNonce(senderId, {
184
+ strategy
185
+ }).catch(() => ({
186
+ nextNonce: 1
187
+ }))).nextNonce;
188
+
189
+ if (ttl !== 0) {
190
+ if (ttl < 0) throw new ArgumentError('ttl', 'greater or equal to 0', ttl);
191
+ ttl += absoluteTtl === true ? 0 : (await onNode.getCurrentKeyBlock()).height;
192
+ }
193
+
194
+ const fee = f != null ? new BigNumber(f) : calculateMinFee(txType, {
195
+ params: { ...txParams,
196
+ senderId,
197
+ nonce,
198
+ ttl
199
+ },
200
+ vsn,
201
+ denomination
202
+ });
203
+ return {
204
+ fee,
205
+ ttl,
206
+ nonce
207
+ };
208
+ }
209
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["ABI_VERSIONS","PROTOCOL_VM_ABI","TX_TYPE","TX_TTL","ArgumentError","UnsupportedProtocolError","UnknownTxError","InvalidTxParamsError","BigNumber","buildTx","syncBuildTx","unpackTx","calculateMinFee","isKeyOfObject","_buildTx","txType","denomination","absoluteTtl","_params","params","senderKey","spend","oracleQuery","nameClaim","nameUpdate","nameRevoke","nameTransfer","namePreClaim","oracleRegister","contractCreate","gaAttach","contractCall","oracleExtend","oracleResponse","channelCloseSolo","channelSlash","channelSettle","channelSnapshotSolo","payingFor","ctVersion","getVmVersion","abiVersion","NO_ABI","tx","senderId","extraParams","prepareTxParams","vmVersion","onNode","consensusProtocolVersion","getNodeInfo","supportedProtocol","protocolForTX","nonce","ttl","fee","f","vsn","strategy","txParams","getAccountNextNonce","catch","nextNonce","getCurrentKeyBlock","height"],"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 {\n ABI_VERSIONS, CtVersion, PROTOCOL_VM_ABI, TX_TYPE, TX_TTL, TxParamsCommon\n} from './builder/schema'\nimport {\n ArgumentError, UnsupportedProtocolError, UnknownTxError, InvalidTxParamsError\n} from '../utils/errors'\nimport BigNumber from 'bignumber.js'\nimport Node from '../Node'\nimport { EncodedData } from '../utils/encoder'\nimport { buildTx as syncBuildTx, unpackTx } from './builder/index'\nimport calculateMinFee from './min-fee'\nimport { isKeyOfObject } from '../utils/other'\nimport { AE_AMOUNT_FORMATS } from '../utils/amount-formatter'\n\ntype Int = number | string | BigNumber\n\n// uses a new feature, probably typescript-eslint doesn't support it yet\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport type BuildTxOptions <TxType extends TX_TYPE, OmitFields extends string> =\n Omit<Parameters<typeof _buildTx<TxType>>[1], OmitFields>\n\n// TODO: find a better name or rearrange methods\nexport async function _buildTx<TxType extends TX_TYPE> (\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 TX_TYPE.oracleExtend | TX_TYPE.oracleResponse ? { callerId: EncodedData<'ak'> } : {})\n & (TxType extends TX_TYPE.contractCreate | TX_TYPE.gaAttach ? { ctVersion?: CtVersion } : {})\n & (TxType extends TX_TYPE.contractCall | TX_TYPE.oracleRegister\n ? { abiVersion?: ABI_VERSIONS } : {})\n): Promise<EncodedData<'tx'>> {\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 TX_TYPE.spend:\n case TX_TYPE.oracleQuery:\n senderKey = 'senderId'\n break\n case TX_TYPE.nameClaim:\n case TX_TYPE.nameUpdate:\n case TX_TYPE.nameRevoke:\n case TX_TYPE.nameTransfer:\n case TX_TYPE.namePreClaim:\n case TX_TYPE.oracleRegister:\n senderKey = 'accountId'\n break\n case TX_TYPE.contractCreate:\n case TX_TYPE.gaAttach:\n senderKey = 'ownerId'\n break\n case TX_TYPE.contractCall:\n case TX_TYPE.oracleExtend:\n case TX_TYPE.oracleResponse:\n senderKey = 'callerId'\n break\n case TX_TYPE.channelCloseSolo:\n case TX_TYPE.channelSlash:\n case TX_TYPE.channelSettle:\n case TX_TYPE.channelSnapshotSolo:\n senderKey = 'fromId'\n break\n case TX_TYPE.payingFor:\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 ([TX_TYPE.contractCreate, TX_TYPE.gaAttach].includes(txType)) {\n params.ctVersion = await getVmVersion(\n TX_TYPE.contractCreate, { ...params, ...params.ctVersion }\n )\n }\n if (txType === TX_TYPE.contractCall) {\n params.abiVersion = (await getVmVersion(TX_TYPE.contractCall, params)).abiVersion\n }\n if (txType === TX_TYPE.oracleRegister) {\n params.abiVersion ??= ABI_VERSIONS.NO_ABI\n }\n if (txType === TX_TYPE.payingFor) {\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(\n txType, { ...params, senderId, denomination, absoluteTtl }\n )\n return syncBuildTx({ ...params, ...extraParams } as any, txType, { denomination }).tx\n}\n\n/**\n * Validated vm/abi version or get default based on transaction type and NODE version\n *\n * @param txType - Type of transaction\n * @param ctVersion - Object with vm and abi version fields\n * @returns Object with vm/abi version\n */\nexport async function getVmVersion (\n txType: TX_TYPE.contractCreate, ctVersion: Partial<CtVersion> & { onNode: Node }\n): Promise<CtVersion>\nexport async function getVmVersion (\n txType: TX_TYPE, ctVersion: Partial<Pick<CtVersion, 'abiVersion'>> & { onNode: Node }\n): Promise<Pick<CtVersion, 'abiVersion'>>\nexport async function getVmVersion (\n txType: TX_TYPE, { 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 *\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 */\nexport async function prepareTxParams (\n txType: TX_TYPE,\n {\n senderId,\n nonce,\n ttl = TX_TTL,\n fee: f,\n absoluteTtl,\n vsn,\n strategy,\n denomination,\n onNode,\n ...txParams\n }: PrepareTxParamsOptions\n): Promise<{ fee: BigNumber, ttl: number, nonce: number }> {\n nonce ??= (\n await onNode.getAccountNextNonce(senderId, { strategy }).catch(() => ({ nextNonce: 1 }))\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 const fee = f != null\n ? new BigNumber(f)\n : calculateMinFee(txType, { params: { ...txParams, senderId, nonce, ttl }, vsn, denomination })\n return { fee, ttl, nonce }\n}\n\ninterface PrepareTxParamsOptions extends Pick<TxParamsCommon, 'nonce' | 'ttl' | 'fee'> {\n senderId: EncodedData<'ak'>\n vsn?: number\n absoluteTtl?: boolean\n strategy?: 'continuity' | 'max'\n denomination?: AE_AMOUNT_FORMATS\n onNode: Node\n}\n"],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import BigNumber from 'bignumber.js';
2
+ import { TX_TYPE, TxParamsCommon } from './builder/schema';
3
+ import { AE_AMOUNT_FORMATS } from '../utils/amount-formatter';
4
+ /**
5
+ * Calculate min fee
6
+ * @param txType - Transaction type
7
+ * @param options - Options object
8
+ * @param options.params - Tx params
9
+ * @example
10
+ * ```js
11
+ * calculateMinFee('spendTx', { gasLimit, params })
12
+ * ```
13
+ */
14
+ export default function calculateMinFee(txType: TX_TYPE, { params, vsn, denomination }: CalculateMinFeeOptions): BigNumber;
15
+ interface CalculateMinFeeOptions {
16
+ params: TxParamsCommon;
17
+ vsn?: number;
18
+ denomination?: AE_AMOUNT_FORMATS;
19
+ }
20
+ export {};
@@ -0,0 +1,148 @@
1
+ import _includesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/includes";
2
+ import BigNumber from 'bignumber.js';
3
+ import { MIN_GAS_PRICE, TX_TYPE } from "./builder/schema.mjs";
4
+ import { buildTx } from "./builder/index.mjs";
5
+ import { isKeyOfObject } from "../utils/other.mjs";
6
+ const BASE_GAS = 15000;
7
+ const GAS_PER_BYTE = 20;
8
+ const KEY_BLOCK_INTERVAL = 3;
9
+ /**
10
+ * Calculate the Base fee gas
11
+ * @see {@link https://github.com/aeternity/protocol/blob/master/consensus/README.md#gas}
12
+ * @param txType - The transaction type
13
+ * @returns The base fee
14
+ * @example
15
+ * ```js
16
+ * TX_FEE_BASE('channelForceProgress') => new BigNumber(30 * 15000)
17
+ * ```
18
+ */
19
+
20
+ const TX_FEE_BASE_GAS = txType => {
21
+ var _feeFactors;
22
+
23
+ const feeFactors = {
24
+ [TX_TYPE.channelForceProgress]: 30,
25
+ [TX_TYPE.channelOffChain]: 0,
26
+ [TX_TYPE.channelOffChainCallContract]: 0,
27
+ [TX_TYPE.channelOffChainCreateContract]: 0,
28
+ [TX_TYPE.channelOffChainUpdateDeposit]: 0,
29
+ [TX_TYPE.channelOffChainUpdateWithdrawal]: 0,
30
+ [TX_TYPE.channelOffChainUpdateTransfer]: 0,
31
+ [TX_TYPE.contractCreate]: 5,
32
+ [TX_TYPE.contractCall]: 12,
33
+ [TX_TYPE.gaAttach]: 5,
34
+ [TX_TYPE.gaMeta]: 5,
35
+ [TX_TYPE.payingFor]: 1 / 5
36
+ };
37
+ const factor = (_feeFactors = feeFactors[txType]) !== null && _feeFactors !== void 0 ? _feeFactors : 1;
38
+ return new BigNumber(factor * BASE_GAS);
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
+
56
+
57
+ const TX_FEE_OTHER_GAS = (txType, txSize, _ref) => {
58
+ let {
59
+ relativeTtl,
60
+ innerTxSize
61
+ } = _ref;
62
+
63
+ switch (txType) {
64
+ case TX_TYPE.oracleRegister:
65
+ case TX_TYPE.oracleExtend:
66
+ case TX_TYPE.oracleQuery:
67
+ case TX_TYPE.oracleResponse:
68
+ return new BigNumber(txSize).times(GAS_PER_BYTE).plus(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
+
74
+ default:
75
+ return new BigNumber(txSize).times(GAS_PER_BYTE);
76
+ }
77
+ };
78
+
79
+ function getOracleRelativeTtl(params, txType) {
80
+ const ttlKeys = {
81
+ [TX_TYPE.oracleRegister]: 'oracleTtlValue',
82
+ [TX_TYPE.oracleExtend]: 'oracleTtlValue',
83
+ [TX_TYPE.oracleQuery]: 'queryTtlValue',
84
+ [TX_TYPE.oracleResponse]: 'responseTtlValue'
85
+ };
86
+ if (!isKeyOfObject(txType, ttlKeys)) return 1;else return params[ttlKeys[txType]];
87
+ }
88
+ /**
89
+ * Calculate fee based on tx type and params
90
+ */
91
+
92
+
93
+ function buildFee(txType, _ref2) {
94
+ var _context;
95
+
96
+ let {
97
+ params,
98
+ vsn,
99
+ denomination
100
+ } = _ref2;
101
+ const {
102
+ rlpEncoded: {
103
+ length
104
+ }
105
+ } = buildTx(params, txType, {
106
+ vsn,
107
+ denomination
108
+ });
109
+ return TX_FEE_BASE_GAS(txType).plus(TX_FEE_OTHER_GAS(txType, length, {
110
+ relativeTtl: getOracleRelativeTtl(params, txType),
111
+ innerTxSize: _includesInstanceProperty(_context = [TX_TYPE.gaMeta, TX_TYPE.payingFor]).call(_context, txType) ? params.tx.tx.encodedTx.rlpEncoded.length : 0
112
+ })).times(MIN_GAS_PRICE);
113
+ }
114
+ /**
115
+ * Calculate min fee
116
+ * @param txType - Transaction type
117
+ * @param options - Options object
118
+ * @param options.params - Tx params
119
+ * @example
120
+ * ```js
121
+ * calculateMinFee('spendTx', { gasLimit, params })
122
+ * ```
123
+ */
124
+
125
+
126
+ export default function calculateMinFee(txType, _ref3) {
127
+ let {
128
+ params,
129
+ vsn,
130
+ denomination
131
+ } = _ref3;
132
+ let fee = new BigNumber(0);
133
+ let previousFee;
134
+
135
+ do {
136
+ previousFee = fee;
137
+ fee = buildFee(txType, {
138
+ params: { ...params,
139
+ fee
140
+ },
141
+ vsn,
142
+ denomination
143
+ });
144
+ } while (!fee.eq(previousFee));
145
+
146
+ return fee;
147
+ }
148
+ //# sourceMappingURL=min-fee.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"min-fee.mjs","names":["BigNumber","MIN_GAS_PRICE","TX_TYPE","buildTx","isKeyOfObject","BASE_GAS","GAS_PER_BYTE","KEY_BLOCK_INTERVAL","TX_FEE_BASE_GAS","txType","feeFactors","channelForceProgress","channelOffChain","channelOffChainCallContract","channelOffChainCreateContract","channelOffChainUpdateDeposit","channelOffChainUpdateWithdrawal","channelOffChainUpdateTransfer","contractCreate","contractCall","gaAttach","gaMeta","payingFor","factor","TX_FEE_OTHER_GAS","txSize","relativeTtl","innerTxSize","oracleRegister","oracleExtend","oracleQuery","oracleResponse","times","plus","Math","ceil","floor","minus","getOracleRelativeTtl","params","ttlKeys","buildFee","vsn","denomination","rlpEncoded","length","tx","encodedTx","calculateMinFee","fee","previousFee","eq"],"sources":["../../src/tx/min-fee.ts"],"sourcesContent":["import BigNumber from 'bignumber.js'\nimport { MIN_GAS_PRICE, TX_TYPE, TxParamsCommon } from './builder/schema'\nimport { AE_AMOUNT_FORMATS } from '../utils/amount-formatter'\nimport { buildTx } from './builder'\nimport { isKeyOfObject } from '../utils/other'\n\nconst BASE_GAS = 15000\nconst GAS_PER_BYTE = 20\nconst KEY_BLOCK_INTERVAL = 3\n\n/**\n * Calculate the Base fee gas\n * @see {@link https://github.com/aeternity/protocol/blob/master/consensus/README.md#gas}\n * @param txType - The transaction type\n * @returns The base fee\n * @example\n * ```js\n * TX_FEE_BASE('channelForceProgress') => new BigNumber(30 * 15000)\n * ```\n */\nconst TX_FEE_BASE_GAS = (txType: TX_TYPE): BigNumber => {\n const feeFactors = {\n [TX_TYPE.channelForceProgress]: 30,\n [TX_TYPE.channelOffChain]: 0,\n [TX_TYPE.channelOffChainCallContract]: 0,\n [TX_TYPE.channelOffChainCreateContract]: 0,\n [TX_TYPE.channelOffChainUpdateDeposit]: 0,\n [TX_TYPE.channelOffChainUpdateWithdrawal]: 0,\n [TX_TYPE.channelOffChainUpdateTransfer]: 0,\n [TX_TYPE.contractCreate]: 5,\n [TX_TYPE.contractCall]: 12,\n [TX_TYPE.gaAttach]: 5,\n [TX_TYPE.gaMeta]: 5,\n [TX_TYPE.payingFor]: 1 / 5\n } as const\n const factor = feeFactors[txType as keyof typeof feeFactors] ?? 1\n return new BigNumber(factor * BASE_GAS)\n}\n\n/**\n * Calculate fee for Other types of transactions\n * @see {@link https://github.com/aeternity/protocol/blob/master/consensus/README.md#gas}\n * @param txType - The transaction type\n * @param txSize - The transaction size\n * @returns parameters - The transaction parameters\n * @returns parameters.relativeTtl - The relative ttl\n * @returns parameters.innerTxSize - The size of the inner transaction\n * @returns The Other fee\n * @example\n * ```js\n * TX_FEE_OTHER_GAS('oracleResponse',10, { relativeTtl: 10, innerTxSize: 10 })\n * => new BigNumber(10).times(20).plus(Math.ceil(32000 * 10 / Math.floor(60 * 24 * 365 / 2)))\n * ```\n */\nconst TX_FEE_OTHER_GAS = (\n txType: TX_TYPE,\n txSize: number,\n { relativeTtl, innerTxSize }: { relativeTtl: number, innerTxSize: number }\n): BigNumber => {\n switch (txType) {\n case TX_TYPE.oracleRegister:\n case TX_TYPE.oracleExtend:\n case TX_TYPE.oracleQuery:\n case TX_TYPE.oracleResponse:\n return new BigNumber(txSize)\n .times(GAS_PER_BYTE)\n .plus(\n Math.ceil(32000 * relativeTtl / Math.floor(60 * 24 * 365 / KEY_BLOCK_INTERVAL))\n )\n case TX_TYPE.gaMeta:\n case TX_TYPE.payingFor:\n return new BigNumber(txSize).minus(innerTxSize).times(GAS_PER_BYTE)\n default:\n return new BigNumber(txSize).times(GAS_PER_BYTE)\n }\n}\n\nfunction getOracleRelativeTtl (params: any, txType: TX_TYPE): number {\n const ttlKeys = {\n [TX_TYPE.oracleRegister]: 'oracleTtlValue',\n [TX_TYPE.oracleExtend]: 'oracleTtlValue',\n [TX_TYPE.oracleQuery]: 'queryTtlValue',\n [TX_TYPE.oracleResponse]: 'responseTtlValue'\n } as const\n\n if (!isKeyOfObject(txType, ttlKeys)) return 1\n else return params[ttlKeys[txType]]\n}\n\n/**\n * Calculate fee based on tx type and params\n */\nfunction buildFee (\n txType: TX_TYPE,\n { params, vsn, denomination }:\n { params: TxParamsCommon, vsn?: number, denomination?: AE_AMOUNT_FORMATS }\n): BigNumber {\n const { rlpEncoded: { length } } = buildTx(params, txType, { vsn, denomination })\n\n return TX_FEE_BASE_GAS(txType)\n .plus(TX_FEE_OTHER_GAS(txType, length, {\n relativeTtl: getOracleRelativeTtl(params, txType),\n innerTxSize: [TX_TYPE.gaMeta, TX_TYPE.payingFor].includes(txType)\n ? params.tx.tx.encodedTx.rlpEncoded.length\n : 0\n }))\n .times(MIN_GAS_PRICE)\n}\n\n/**\n * Calculate min fee\n * @param txType - Transaction type\n * @param options - Options object\n * @param options.params - Tx params\n * @example\n * ```js\n * calculateMinFee('spendTx', { gasLimit, params })\n * ```\n */\nexport default function calculateMinFee (\n txType: TX_TYPE, { params, vsn, denomination }: CalculateMinFeeOptions\n): BigNumber {\n let fee = new BigNumber(0)\n let previousFee\n do {\n previousFee = fee\n fee = buildFee(txType, { params: { ...params, fee }, vsn, denomination })\n } while (!fee.eq(previousFee))\n return fee\n}\n\ninterface CalculateMinFeeOptions {\n params: TxParamsCommon\n vsn?: number\n denomination?: AE_AMOUNT_FORMATS\n}\n"],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { TX_TYPE } from './builder/schema';
2
+ import { EncodedData } from '../utils/encoder';
3
+ import Node from '../Node';
4
+ export interface ValidatorResult {
5
+ message: string;
6
+ key: string;
7
+ checkedKeys: string[];
8
+ }
9
+ /**
10
+ * Transaction Validator
11
+ * This function validates some of transaction properties,
12
+ * to make sure it can be posted it to the chain
13
+ * @param transaction - Base64Check-encoded transaction
14
+ * @param node - Node to validate transaction against
15
+ * @param parentTxTypes - Types of parent transactions
16
+ * @returns Array with verification errors
17
+ * @example const errors = await verifyTransaction(transaction, node)
18
+ */
19
+ export default function verifyTransaction(transaction: EncodedData<'tx' | 'pi'>, node: Node, parentTxTypes?: TX_TYPE[]): Promise<ValidatorResult[]>;
@@ -0,0 +1,240 @@
1
+ import _buffer from "buffer";
2
+ const {
3
+ Buffer: _Buffer
4
+ } = _buffer;
5
+ import _includesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/includes";
6
+ import { verify, hash } from "../utils/crypto.mjs";
7
+ import { encode, decode } from "./builder/helpers.mjs";
8
+ import BigNumber from 'bignumber.js';
9
+ import { PROTOCOL_VM_ABI, TX_TYPE } from "./builder/schema.mjs";
10
+ import { unpackTx } from "./builder/index.mjs";
11
+ import calculateMinFee from "./min-fee.mjs";
12
+ import { UnsupportedProtocolError } from "../utils/errors.mjs";
13
+ import { concatBuffers, isKeyOfObject } from "../utils/other.mjs";
14
+ const validators = [(_ref, _ref2) => {
15
+ let {
16
+ encodedTx,
17
+ signatures
18
+ } = _ref;
19
+ let {
20
+ account,
21
+ nodeNetworkId,
22
+ parentTxTypes
23
+ } = _ref2;
24
+ if ((encodedTx !== null && encodedTx !== void 0 ? encodedTx : signatures) === undefined) return [];
25
+ if (account == null) return [];
26
+ if (signatures.length !== 1) return []; // TODO: Support multisignature?
27
+
28
+ const prefix = _Buffer.from([nodeNetworkId, ...(_includesInstanceProperty(parentTxTypes).call(parentTxTypes, TX_TYPE.payingFor) ? ['inner_tx'] : [])].join('-'));
29
+
30
+ const txWithNetworkId = concatBuffers([prefix, encodedTx.rlpEncoded]);
31
+ const txHashWithNetworkId = concatBuffers([prefix, hash(encodedTx.rlpEncoded)]);
32
+ const decodedPub = decode(account.id);
33
+ if (verify(txWithNetworkId, signatures[0], decodedPub) || verify(txHashWithNetworkId, signatures[0], decodedPub)) return [];
34
+ return [{
35
+ message: 'Signature cannot be verified, please ensure that you transaction have' + ' the correct prefix and the correct private key for the sender address',
36
+ key: 'InvalidSignature',
37
+ checkedKeys: ['encodedTx', 'signatures']
38
+ }];
39
+ }, async (_ref3, _ref4) => {
40
+ let {
41
+ encodedTx,
42
+ tx
43
+ } = _ref3;
44
+ let {
45
+ node,
46
+ parentTxTypes,
47
+ txType
48
+ } = _ref4;
49
+ if ((encodedTx !== null && encodedTx !== void 0 ? encodedTx : tx) === undefined) return [];
50
+ return await verifyTransaction(encode((encodedTx !== null && encodedTx !== void 0 ? encodedTx : tx).rlpEncoded, 'tx'), node, [...parentTxTypes, txType]);
51
+ }, (tx, _ref5) => {
52
+ let {
53
+ txType
54
+ } = _ref5;
55
+ if (tx.fee === undefined) return [];
56
+ const minFee = calculateMinFee(txType, {
57
+ params: tx,
58
+ vsn: tx.VSN
59
+ });
60
+ if (minFee.lte(tx.fee)) return [];
61
+ return [{
62
+ message: `Fee ${tx.fee} is too low, minimum fee for this transaction is ${minFee.toString()}`,
63
+ key: 'InsufficientFee',
64
+ checkedKeys: ['fee']
65
+ }];
66
+ }, (_ref6, _ref7) => {
67
+ let {
68
+ ttl
69
+ } = _ref6;
70
+ let {
71
+ height
72
+ } = _ref7;
73
+ if (ttl === undefined) return [];
74
+ ttl = +ttl;
75
+ if (ttl === 0 || ttl >= height) return [];
76
+ return [{
77
+ message: `TTL ${ttl} is already expired, current height is ${height}`,
78
+ key: 'ExpiredTTL',
79
+ checkedKeys: ['ttl']
80
+ }];
81
+ }, (_ref8, _ref9) => {
82
+ var _ref10, _fee;
83
+
84
+ let {
85
+ amount,
86
+ fee,
87
+ nameFee,
88
+ tx
89
+ } = _ref8;
90
+ let {
91
+ account,
92
+ parentTxTypes,
93
+ txType
94
+ } = _ref9;
95
+ if (account == null) return [];
96
+ if (((_ref10 = amount !== null && amount !== void 0 ? amount : fee) !== null && _ref10 !== void 0 ? _ref10 : nameFee) === undefined) return [];
97
+ (_fee = fee) !== null && _fee !== void 0 ? _fee : fee = 0;
98
+ const cost = new BigNumber(fee).plus(nameFee !== null && nameFee !== void 0 ? nameFee : 0).plus(amount !== null && amount !== void 0 ? amount : 0).plus(txType === TX_TYPE.payingFor ? tx.tx.encodedTx.tx.fee : 0).minus(_includesInstanceProperty(parentTxTypes).call(parentTxTypes, TX_TYPE.payingFor) ? fee : 0);
99
+ if (cost.lte(account.balance.toString())) return [];
100
+ return [{
101
+ message: `Account balance ${account.balance.toString()} is not enough to execute the transaction that costs ${cost.toFixed()}`,
102
+ key: 'InsufficientBalance',
103
+ checkedKeys: ['amount', 'fee', 'nameFee']
104
+ }];
105
+ }, (_ref11, _ref12) => {
106
+ let {
107
+ nonce
108
+ } = _ref11;
109
+ let {
110
+ account,
111
+ parentTxTypes
112
+ } = _ref12;
113
+ if (nonce == null || account == null || _includesInstanceProperty(parentTxTypes).call(parentTxTypes, TX_TYPE.gaMeta)) return [];
114
+ nonce = +nonce;
115
+ const validNonce = account.nonce + 1;
116
+ if (nonce === validNonce) return [];
117
+ return [{ ...(nonce < validNonce ? {
118
+ message: `Nonce ${nonce} is already used, valid nonce is ${validNonce}`,
119
+ key: 'NonceAlreadyUsed'
120
+ } : {
121
+ message: `Nonce ${nonce} is too high, valid nonce is ${validNonce}`,
122
+ key: 'NonceHigh'
123
+ }),
124
+ checkedKeys: ['nonce']
125
+ }];
126
+ }, (_ref13, _ref14) => {
127
+ let {
128
+ ctVersion,
129
+ abiVersion
130
+ } = _ref13;
131
+ let {
132
+ txType,
133
+ consensusProtocolVersion
134
+ } = _ref14;
135
+
136
+ if (!isKeyOfObject(consensusProtocolVersion, PROTOCOL_VM_ABI)) {
137
+ throw new UnsupportedProtocolError(`Unsupported protocol: ${consensusProtocolVersion}`);
138
+ }
139
+
140
+ const protocol = PROTOCOL_VM_ABI[consensusProtocolVersion]; // If not contract create tx
141
+
142
+ if (ctVersion == null) ctVersion = {
143
+ abiVersion
144
+ };
145
+ const txProtocol = protocol[txType];
146
+ if (txProtocol == null) return [];
147
+
148
+ if (Object.entries(ctVersion).some(_ref15 => {
149
+ var _context;
150
+
151
+ let [key, value] = _ref15;
152
+ return !_includesInstanceProperty(_context = txProtocol[key]).call(_context, +value);
153
+ })) {
154
+ return [{
155
+ message: `ABI/VM version ${JSON.stringify(ctVersion)} is wrong, supported is: ${JSON.stringify(txProtocol)}`,
156
+ key: 'VmAndAbiVersionMismatch',
157
+ checkedKeys: ['ctVersion', 'abiVersion']
158
+ }];
159
+ }
160
+
161
+ return [];
162
+ }, async (_ref16, _ref17) => {
163
+ let {
164
+ contractId
165
+ } = _ref16;
166
+ let {
167
+ txType,
168
+ node
169
+ } = _ref17;
170
+ if (TX_TYPE.contractCall !== txType) return [];
171
+ contractId = contractId;
172
+
173
+ try {
174
+ const {
175
+ active
176
+ } = await node.getContract(contractId);
177
+ if (active) return [];
178
+ return [{
179
+ message: `Contract ${contractId} is not active`,
180
+ key: 'ContractNotActive',
181
+ checkedKeys: ['contractId']
182
+ }];
183
+ } catch (error) {
184
+ var _error$response, _error$response$parse;
185
+
186
+ if (((_error$response = error.response) === null || _error$response === void 0 ? void 0 : (_error$response$parse = _error$response.parsedBody) === null || _error$response$parse === void 0 ? void 0 : _error$response$parse.reason) == null) throw error;
187
+ return [{
188
+ message: error.response.parsedBody.reason,
189
+ key: 'ContractNotFound',
190
+ checkedKeys: ['contractId']
191
+ }];
192
+ }
193
+ }];
194
+
195
+ 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];
196
+ /**
197
+ * Transaction Validator
198
+ * This function validates some of transaction properties,
199
+ * to make sure it can be posted it to the chain
200
+ * @param transaction - Base64Check-encoded transaction
201
+ * @param node - Node to validate transaction against
202
+ * @param parentTxTypes - Types of parent transactions
203
+ * @returns Array with verification errors
204
+ * @example const errors = await verifyTransaction(transaction, node)
205
+ */
206
+
207
+
208
+ export default async function verifyTransaction(transaction, node) {
209
+ var _getSenderAddress;
210
+
211
+ let parentTxTypes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
212
+ const {
213
+ tx,
214
+ txType
215
+ } = unpackTx(transaction);
216
+ const address = (_getSenderAddress = getSenderAddress(tx)) !== null && _getSenderAddress !== void 0 ? _getSenderAddress : txType === TX_TYPE.signed ? getSenderAddress(tx.encodedTx.tx) : undefined;
217
+ const [account, {
218
+ height
219
+ }, {
220
+ consensusProtocolVersion,
221
+ nodeNetworkId
222
+ }] = await Promise.all([address == null ? undefined : node.getAccountByPubkey(address).catch(() => ({
223
+ id: address,
224
+ balance: 0n,
225
+ nonce: 0
226
+ })) // TODO: remove after fixing https://github.com/aeternity/aepp-sdk-js/issues/1537
227
+ .then(acc => ({ ...acc,
228
+ id: acc.id
229
+ })), node.getCurrentKeyBlockHeight(), node.getNodeInfo()]);
230
+ return (await Promise.all(validators.map(v => v(tx, {
231
+ txType,
232
+ node,
233
+ account,
234
+ height,
235
+ consensusProtocolVersion,
236
+ nodeNetworkId,
237
+ parentTxTypes
238
+ })))).flat();
239
+ }
240
+ //# sourceMappingURL=validator.mjs.map