@aeternity/aepp-sdk 11.0.1 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (376) hide show
  1. package/LICENSE +1 -1
  2. package/dist/aepp-sdk.browser-script.js +1 -1
  3. package/dist/aepp-sdk.browser-script.js.LICENSE.txt +12 -19
  4. package/dist/aepp-sdk.browser-script.js.map +1 -1
  5. package/dist/aepp-sdk.browser.js +1 -1
  6. package/dist/aepp-sdk.browser.js.map +1 -1
  7. package/dist/aepp-sdk.js +1 -1
  8. package/dist/aepp-sdk.js.map +1 -1
  9. package/es/AeSdk.d.ts +37 -0
  10. package/es/AeSdk.mjs +81 -0
  11. package/es/AeSdk.mjs.map +1 -0
  12. package/es/AeSdkAepp.d.ts +69 -0
  13. package/es/AeSdkAepp.mjs +175 -0
  14. package/es/AeSdkAepp.mjs.map +1 -0
  15. package/es/AeSdkBase.d.ts +212 -0
  16. package/es/AeSdkBase.mjs +310 -0
  17. package/es/AeSdkBase.mjs.map +1 -0
  18. package/es/AeSdkWallet.d.ts +103 -0
  19. package/es/AeSdkWallet.mjs +322 -0
  20. package/es/AeSdkWallet.mjs.map +1 -0
  21. package/es/Node.d.ts +44 -0
  22. package/es/Node.mjs +141 -0
  23. package/es/Node.mjs.map +1 -0
  24. package/es/account/Base.d.ts +65 -0
  25. package/es/account/Base.mjs +123 -0
  26. package/es/account/Base.mjs.map +1 -0
  27. package/es/account/Memory.d.ts +25 -0
  28. package/es/account/Memory.mjs +81 -0
  29. package/es/account/Memory.mjs.map +1 -0
  30. package/es/account/Rpc.d.ts +27 -0
  31. package/es/account/Rpc.mjs +79 -0
  32. package/es/account/Rpc.mjs.map +1 -0
  33. package/es/aens.d.ts +209 -0
  34. package/es/aens.mjs +332 -0
  35. package/es/aens.mjs.map +1 -0
  36. package/es/aepp-wallet-communication/connection/Browser.d.ts +32 -0
  37. package/es/aepp-wallet-communication/connection/Browser.mjs +70 -0
  38. package/es/aepp-wallet-communication/connection/Browser.mjs.map +1 -0
  39. package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +17 -0
  40. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +57 -0
  41. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -0
  42. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.d.ts +35 -0
  43. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs +142 -0
  44. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs.map +1 -0
  45. package/es/aepp-wallet-communication/connection-proxy.d.ts +10 -0
  46. package/{src/utils/crypto-ts.ts → es/aepp-wallet-communication/connection-proxy.mjs} +15 -11
  47. package/es/aepp-wallet-communication/connection-proxy.mjs.map +1 -0
  48. package/es/aepp-wallet-communication/rpc/RpcClient.d.ts +33 -0
  49. package/es/aepp-wallet-communication/rpc/RpcClient.mjs +169 -0
  50. package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -0
  51. package/es/aepp-wallet-communication/rpc/types.d.ts +77 -0
  52. package/es/aepp-wallet-communication/rpc/types.mjs +3 -0
  53. package/es/aepp-wallet-communication/rpc/types.mjs.map +1 -0
  54. package/es/aepp-wallet-communication/schema.d.ts +90 -46
  55. package/es/aepp-wallet-communication/schema.mjs +214 -0
  56. package/es/aepp-wallet-communication/schema.mjs.map +1 -0
  57. package/es/aepp-wallet-communication/wallet-detector.d.ts +24 -0
  58. package/es/aepp-wallet-communication/wallet-detector.mjs +63 -0
  59. package/es/aepp-wallet-communication/wallet-detector.mjs.map +1 -0
  60. package/es/apis/compiler/compiler.d.ts +92 -0
  61. package/es/apis/compiler/compiler.mjs +576 -0
  62. package/es/apis/compiler/compiler.mjs.map +1 -0
  63. package/es/apis/compiler/index.d.ts +2 -0
  64. package/es/apis/compiler/index.mjs +3 -0
  65. package/es/apis/compiler/index.mjs.map +1 -0
  66. package/es/apis/compiler/models/index.d.ts +248 -0
  67. package/es/apis/compiler/models/index.mjs +48 -0
  68. package/es/apis/compiler/models/index.mjs.map +1 -0
  69. package/es/apis/compiler/models/mappers.d.ts +23 -0
  70. package/es/apis/compiler/models/mappers.mjs +585 -0
  71. package/es/apis/compiler/models/mappers.mjs.map +1 -0
  72. package/es/apis/compiler/models/parameters.d.ts +13 -0
  73. package/es/apis/compiler/models/parameters.mjs +71 -0
  74. package/es/apis/compiler/models/parameters.mjs.map +1 -0
  75. package/es/apis/node/index.d.ts +2 -0
  76. package/es/apis/node/index.mjs +3 -0
  77. package/es/apis/node/index.mjs.map +1 -0
  78. package/es/apis/node/models/index.d.ts +1061 -0
  79. package/es/apis/node/models/index.mjs +2 -0
  80. package/es/apis/node/models/index.mjs.map +1 -0
  81. package/es/apis/node/models/mappers.d.ts +95 -0
  82. package/es/apis/node/models/mappers.mjs +4164 -0
  83. package/es/apis/node/models/mappers.mjs.map +1 -0
  84. package/es/apis/node/models/parameters.d.ts +17 -0
  85. package/es/apis/node/models/parameters.mjs +165 -0
  86. package/es/apis/node/models/parameters.mjs.map +1 -0
  87. package/es/apis/node/node.d.ts +215 -0
  88. package/es/apis/node/node.mjs +1165 -0
  89. package/es/apis/node/node.mjs.map +1 -0
  90. package/es/chain.d.ts +220 -0
  91. package/es/chain.mjs +524 -0
  92. package/es/chain.mjs.map +1 -0
  93. package/es/channel/handlers.d.ts +34 -0
  94. package/es/channel/handlers.mjs +147 -112
  95. package/es/channel/handlers.mjs.map +1 -1
  96. package/es/channel/index.d.ts +634 -0
  97. package/es/channel/index.mjs +898 -900
  98. package/es/channel/index.mjs.map +1 -1
  99. package/es/channel/internal.d.ts +100 -0
  100. package/es/channel/internal.mjs +97 -51
  101. package/es/channel/internal.mjs.map +1 -1
  102. package/es/contract/Compiler.d.ts +17 -0
  103. package/es/contract/Compiler.mjs +67 -0
  104. package/es/contract/Compiler.mjs.map +1 -0
  105. package/es/contract/aci.d.ts +125 -0
  106. package/es/contract/aci.mjs +199 -180
  107. package/es/contract/aci.mjs.map +1 -1
  108. package/es/contract/ga.d.ts +68 -0
  109. package/es/contract/ga.mjs +190 -0
  110. package/es/contract/ga.mjs.map +1 -0
  111. package/es/contract/methods.d.ts +68 -0
  112. package/es/contract/methods.mjs +101 -0
  113. package/es/contract/methods.mjs.map +1 -0
  114. package/es/index.d.ts +32 -0
  115. package/es/index.mjs +32 -40
  116. package/es/index.mjs.map +1 -1
  117. package/es/oracle.d.ts +154 -0
  118. package/es/oracle.mjs +288 -0
  119. package/es/oracle.mjs.map +1 -0
  120. package/es/spend.d.ts +61 -0
  121. package/es/spend.mjs +122 -0
  122. package/es/spend.mjs.map +1 -0
  123. package/es/tx/builder/constants.d.ts +41 -0
  124. package/es/tx/builder/constants.mjs +11 -19
  125. package/es/tx/builder/constants.mjs.map +1 -1
  126. package/es/tx/builder/field-types.d.ts +62 -0
  127. package/es/tx/builder/field-types.mjs +62 -10
  128. package/es/tx/builder/field-types.mjs.map +1 -1
  129. package/es/tx/builder/helpers.d.ts +131 -0
  130. package/es/tx/builder/helpers.mjs +71 -169
  131. package/es/tx/builder/helpers.mjs.map +1 -1
  132. package/es/tx/builder/index.d.ts +75 -0
  133. package/es/tx/builder/index.mjs +141 -323
  134. package/es/tx/builder/index.mjs.map +1 -1
  135. package/es/tx/builder/schema.d.ts +350 -0
  136. package/es/tx/builder/schema.mjs +173 -510
  137. package/es/tx/builder/schema.mjs.map +1 -1
  138. package/es/tx/index.d.ts +63 -0
  139. package/es/tx/index.mjs +171 -265
  140. package/es/tx/index.mjs.map +1 -1
  141. package/es/tx/min-fee.d.ts +20 -0
  142. package/es/tx/min-fee.mjs +148 -0
  143. package/es/tx/min-fee.mjs.map +1 -0
  144. package/es/tx/validator.d.ts +19 -0
  145. package/es/tx/validator.mjs +64 -71
  146. package/es/tx/validator.mjs.map +1 -1
  147. package/es/typings/@aeternity__argon2-browser/index.d.mjs +2 -0
  148. package/es/typings/@aeternity__argon2-browser/index.d.mjs.map +1 -0
  149. package/es/typings/@aeternity__uuid/index.d.mjs +2 -0
  150. package/es/typings/@aeternity__uuid/index.d.mjs.map +1 -0
  151. package/es/typings/bip32-path/index.d.mjs +2 -0
  152. package/es/typings/bip32-path/index.d.mjs.map +1 -0
  153. package/es/typings/blakejs/index.d.mjs.map +1 -1
  154. package/es/typings/tweetnacl-auth/index.d.mjs +2 -0
  155. package/es/typings/tweetnacl-auth/index.d.mjs.map +1 -0
  156. package/es/utils/amount-formatter.d.ts +42 -0
  157. package/es/utils/amount-formatter.mjs +28 -41
  158. package/es/utils/amount-formatter.mjs.map +1 -1
  159. package/es/utils/autorest.d.ts +6 -0
  160. package/es/utils/autorest.mjs +97 -0
  161. package/es/utils/autorest.mjs.map +1 -0
  162. package/es/utils/bignumber.d.ts +13 -0
  163. package/es/utils/bignumber.mjs +10 -8
  164. package/es/utils/bignumber.mjs.map +1 -1
  165. package/es/{bytes.d.ts → utils/bytes.d.ts} +10 -13
  166. package/es/utils/bytes.mjs +10 -14
  167. package/es/utils/bytes.mjs.map +1 -1
  168. package/es/utils/crypto.d.ts +103 -0
  169. package/es/utils/crypto.mjs +60 -68
  170. package/es/utils/crypto.mjs.map +1 -1
  171. package/es/utils/encoder.d.ts +26 -0
  172. package/es/utils/encoder.mjs +47 -51
  173. package/es/utils/encoder.mjs.map +1 -1
  174. package/es/{errors.d.ts → utils/errors.d.ts} +254 -57
  175. package/es/utils/errors.mjs +318 -125
  176. package/es/utils/errors.mjs.map +1 -1
  177. package/es/utils/hd-wallet.d.ts +34 -0
  178. package/es/utils/hd-wallet.mjs +27 -16
  179. package/es/utils/hd-wallet.mjs.map +1 -1
  180. package/es/utils/json-big.d.ts +5 -0
  181. package/es/utils/json-big.mjs +10 -14
  182. package/es/utils/json-big.mjs.map +1 -1
  183. package/es/utils/keystore.d.ts +51 -0
  184. package/es/utils/keystore.mjs +98 -193
  185. package/es/utils/keystore.mjs.map +1 -1
  186. package/es/{mptree.d.ts → utils/mptree.d.ts} +5 -8
  187. package/es/utils/mptree.mjs +13 -14
  188. package/es/utils/mptree.mjs.map +1 -1
  189. package/es/utils/other.d.ts +14 -0
  190. package/es/utils/other.mjs +21 -36
  191. package/es/utils/other.mjs.map +1 -1
  192. package/es/{semver-satisfies.d.ts → utils/semver-satisfies.d.ts} +0 -0
  193. package/es/utils/semver-satisfies.mjs.map +1 -1
  194. package/es/utils/string.d.ts +24 -0
  195. package/es/utils/string.mjs +8 -10
  196. package/es/utils/string.mjs.map +1 -1
  197. package/package.json +49 -39
  198. package/src/AeSdk.ts +65 -0
  199. package/src/AeSdkAepp.ts +167 -0
  200. package/src/AeSdkBase.ts +320 -0
  201. package/src/AeSdkWallet.ts +332 -0
  202. package/src/Node.ts +167 -0
  203. package/src/account/Base.ts +114 -0
  204. package/src/account/Memory.ts +83 -0
  205. package/src/account/Rpc.ts +67 -0
  206. package/src/aens.ts +391 -0
  207. package/src/aepp-wallet-communication/connection/Browser.ts +68 -0
  208. package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +58 -0
  209. package/src/aepp-wallet-communication/connection/BrowserWindowMessage.ts +111 -0
  210. package/{es/utils/crypto-ts.mjs → src/aepp-wallet-communication/connection-proxy.ts} +16 -17
  211. package/src/aepp-wallet-communication/rpc/RpcClient.ts +137 -0
  212. package/src/aepp-wallet-communication/rpc/types.ts +66 -0
  213. package/src/aepp-wallet-communication/schema.ts +181 -0
  214. package/src/aepp-wallet-communication/wallet-detector.ts +71 -0
  215. package/src/apis/compiler/code-model-v4.yaml +2649 -0
  216. package/src/apis/compiler/compiler.ts +585 -0
  217. package/src/apis/compiler/index.ts +2 -0
  218. package/src/apis/compiler/models/index.ts +301 -0
  219. package/src/apis/compiler/models/mappers.ts +583 -0
  220. package/src/apis/compiler/models/parameters.ts +93 -0
  221. package/src/apis/node/code-model-v4.yaml +10046 -0
  222. package/src/apis/node/index.ts +2 -0
  223. package/src/apis/node/models/index.ts +1253 -0
  224. package/src/apis/node/models/mappers.ts +4278 -0
  225. package/src/apis/node/models/parameters.ts +188 -0
  226. package/src/apis/node/node.ts +1299 -0
  227. package/src/chain.ts +444 -0
  228. package/src/channel/{handlers.js → handlers.ts} +220 -128
  229. package/src/channel/index.ts +991 -0
  230. package/src/channel/internal.ts +345 -0
  231. package/src/contract/Compiler.ts +66 -0
  232. package/src/contract/aci.ts +529 -0
  233. package/src/contract/ga.ts +178 -0
  234. package/src/contract/methods.ts +118 -0
  235. package/src/index.ts +51 -0
  236. package/src/oracle.ts +342 -0
  237. package/src/spend.ts +152 -0
  238. package/src/tx/builder/{constants.js → constants.ts} +12 -16
  239. package/src/tx/builder/field-types.ts +111 -0
  240. package/src/tx/builder/helpers.ts +253 -0
  241. package/src/tx/builder/index.ts +394 -0
  242. package/src/tx/builder/schema.ts +771 -0
  243. package/src/tx/index.ts +199 -0
  244. package/src/tx/min-fee.ts +136 -0
  245. package/src/tx/validator.ts +226 -0
  246. package/src/typings/@aeternity__argon2-browser/index.d.ts +3 -0
  247. package/src/typings/@aeternity__uuid/index.d.ts +3 -0
  248. package/src/typings/bip32-path/index.d.ts +33 -0
  249. package/src/typings/tweetnacl-auth/index.d.ts +14 -0
  250. package/src/utils/amount-formatter.ts +29 -42
  251. package/src/utils/autorest.ts +90 -0
  252. package/src/utils/bignumber.ts +9 -11
  253. package/src/utils/bytes.ts +12 -14
  254. package/src/utils/crypto.ts +217 -0
  255. package/src/utils/encoder.ts +52 -55
  256. package/src/utils/errors.ts +268 -134
  257. package/src/utils/hd-wallet.ts +134 -0
  258. package/src/utils/json-big.ts +26 -0
  259. package/src/utils/keystore.ts +179 -0
  260. package/src/utils/mptree.ts +14 -14
  261. package/src/utils/other.ts +28 -43
  262. package/src/utils/string.ts +8 -10
  263. package/es/account/base.mjs +0 -179
  264. package/es/account/base.mjs.map +0 -1
  265. package/es/account/memory.mjs +0 -99
  266. package/es/account/memory.mjs.map +0 -1
  267. package/es/account/multiple.mjs +0 -179
  268. package/es/account/multiple.mjs.map +0 -1
  269. package/es/ae/aens.mjs +0 -404
  270. package/es/ae/aens.mjs.map +0 -1
  271. package/es/ae/aepp.mjs +0 -45
  272. package/es/ae/aepp.mjs.map +0 -1
  273. package/es/ae/contract.mjs +0 -159
  274. package/es/ae/contract.mjs.map +0 -1
  275. package/es/ae/index.mjs +0 -207
  276. package/es/ae/index.mjs.map +0 -1
  277. package/es/ae/oracle.mjs +0 -339
  278. package/es/ae/oracle.mjs.map +0 -1
  279. package/es/ae/universal.mjs +0 -45
  280. package/es/ae/universal.mjs.map +0 -1
  281. package/es/ae/wallet.mjs +0 -50
  282. package/es/ae/wallet.mjs.map +0 -1
  283. package/es/amount-formatter.d.ts +0 -58
  284. package/es/bignumber.d.ts +0 -18
  285. package/es/chain/index.mjs +0 -272
  286. package/es/chain/index.mjs.map +0 -1
  287. package/es/chain/node.mjs +0 -442
  288. package/es/chain/node.mjs.map +0 -1
  289. package/es/contract/compiler.mjs +0 -115
  290. package/es/contract/compiler.mjs.map +0 -1
  291. package/es/contract/ga/helpers.mjs +0 -30
  292. package/es/contract/ga/helpers.mjs.map +0 -1
  293. package/es/contract/ga/index.mjs +0 -178
  294. package/es/contract/ga/index.mjs.map +0 -1
  295. package/es/crypto-ts.d.ts +0 -9
  296. package/es/encoder.d.ts +0 -26
  297. package/es/node-pool/index.mjs +0 -188
  298. package/es/node-pool/index.mjs.map +0 -1
  299. package/es/node.mjs +0 -133
  300. package/es/node.mjs.map +0 -1
  301. package/es/other.d.ts +0 -31
  302. package/es/string.d.ts +0 -26
  303. package/es/tx/tx-object.mjs +0 -283
  304. package/es/tx/tx-object.mjs.map +0 -1
  305. package/es/tx/tx.mjs +0 -938
  306. package/es/tx/tx.mjs.map +0 -1
  307. package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs +0 -132
  308. package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs.map +0 -1
  309. package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs +0 -183
  310. package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs.map +0 -1
  311. package/es/utils/aepp-wallet-communication/connection/index.mjs +0 -87
  312. package/es/utils/aepp-wallet-communication/connection/index.mjs.map +0 -1
  313. package/es/utils/aepp-wallet-communication/content-script-bridge.mjs +0 -98
  314. package/es/utils/aepp-wallet-communication/content-script-bridge.mjs.map +0 -1
  315. package/es/utils/aepp-wallet-communication/helpers.mjs +0 -92
  316. package/es/utils/aepp-wallet-communication/helpers.mjs.map +0 -1
  317. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs +0 -375
  318. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs.map +0 -1
  319. package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs +0 -275
  320. package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs.map +0 -1
  321. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs +0 -541
  322. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs.map +0 -1
  323. package/es/utils/aepp-wallet-communication/schema.mjs +0 -102
  324. package/es/utils/aepp-wallet-communication/schema.mjs.map +0 -1
  325. package/es/utils/aepp-wallet-communication/wallet-detector.mjs +0 -110
  326. package/es/utils/aepp-wallet-communication/wallet-detector.mjs.map +0 -1
  327. package/es/utils/async-init.mjs +0 -64
  328. package/es/utils/async-init.mjs.map +0 -1
  329. package/es/utils/crypto-ts.mjs.map +0 -1
  330. package/es/utils/swagger.mjs +0 -164
  331. package/es/utils/swagger.mjs.map +0 -1
  332. package/src/account/base.js +0 -153
  333. package/src/account/memory.js +0 -83
  334. package/src/account/multiple.js +0 -162
  335. package/src/ae/aens.js +0 -361
  336. package/src/ae/aepp.js +0 -45
  337. package/src/ae/contract.js +0 -148
  338. package/src/ae/index.js +0 -168
  339. package/src/ae/oracle.js +0 -311
  340. package/src/ae/universal.js +0 -47
  341. package/src/ae/wallet.js +0 -50
  342. package/src/chain/index.js +0 -269
  343. package/src/chain/node.js +0 -320
  344. package/src/channel/index.js +0 -903
  345. package/src/channel/internal.js +0 -236
  346. package/src/contract/aci.js +0 -376
  347. package/src/contract/compiler.js +0 -100
  348. package/src/contract/ga/helpers.js +0 -19
  349. package/src/contract/ga/index.js +0 -150
  350. package/src/index.js +0 -89
  351. package/src/node-pool/index.js +0 -172
  352. package/src/node.js +0 -116
  353. package/src/tx/builder/field-types.js +0 -61
  354. package/src/tx/builder/helpers.js +0 -334
  355. package/src/tx/builder/index.js +0 -465
  356. package/src/tx/builder/schema.js +0 -1100
  357. package/src/tx/index.js +0 -301
  358. package/src/tx/tx-object.js +0 -187
  359. package/src/tx/tx.js +0 -631
  360. package/src/tx/validator.js +0 -181
  361. package/src/utils/aepp-wallet-communication/connection/browser-runtime.js +0 -119
  362. package/src/utils/aepp-wallet-communication/connection/browser-window-message.js +0 -165
  363. package/src/utils/aepp-wallet-communication/connection/index.js +0 -85
  364. package/src/utils/aepp-wallet-communication/content-script-bridge.js +0 -86
  365. package/src/utils/aepp-wallet-communication/helpers.js +0 -60
  366. package/src/utils/aepp-wallet-communication/rpc/aepp-rpc.js +0 -294
  367. package/src/utils/aepp-wallet-communication/rpc/rpc-client.js +0 -232
  368. package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +0 -401
  369. package/src/utils/aepp-wallet-communication/schema.ts +0 -80
  370. package/src/utils/aepp-wallet-communication/wallet-detector.js +0 -92
  371. package/src/utils/async-init.js +0 -45
  372. package/src/utils/crypto.js +0 -219
  373. package/src/utils/hd-wallet.js +0 -100
  374. package/src/utils/json-big.js +0 -26
  375. package/src/utils/keystore.js +0 -219
  376. package/src/utils/swagger.js +0 -156
@@ -1,465 +0,0 @@
1
- import BigNumber from 'bignumber.js'
2
- import { decode as rlpDecode, encode as rlpEncode } from 'rlp'
3
- import { AE_AMOUNT_FORMATS, formatAmount } from '../../utils/amount-formatter'
4
- import { hash } from '../../utils/crypto'
5
- import { Field } from './field-types'
6
-
7
- import {
8
- DEFAULT_FEE,
9
- FIELD_TYPES,
10
- OBJECT_ID_TX_TYPE,
11
- TX_DESERIALIZATION_SCHEMA,
12
- TX_FEE_BASE_GAS,
13
- TX_FEE_OTHER_GAS,
14
- TX_SERIALIZATION_SCHEMA,
15
- TX_TYPE,
16
- VSN
17
- } from './schema'
18
- import {
19
- readInt,
20
- readId,
21
- readPointers,
22
- writeId,
23
- writeInt,
24
- buildPointers,
25
- encode,
26
- decode
27
- } from './helpers'
28
- import { toBytes } from '../../utils/bytes'
29
- import MPTree from '../../utils/mptree'
30
- import { InvalidTxParamsError, SchemaNotFoundError } from '../../utils/errors'
31
-
32
- /**
33
- * JavaScript-based Transaction builder
34
- * @module @aeternity/aepp-sdk/es/tx/builder
35
- * @export TxBuilder
36
- * @example import { TxBuilder } from '@aeternity/aepp-sdk'
37
- */
38
-
39
- const ORACLE_TTL_TYPES = {
40
- delta: 'delta',
41
- block: 'block'
42
- }
43
-
44
- // SERIALIZE AND DESERIALIZE PART
45
- function deserializeField (value, type, prefix) {
46
- if (!value) return ''
47
- switch (type) {
48
- case FIELD_TYPES.ctVersion: {
49
- const [vm, , abi] = value
50
- return { vmVersion: readInt(Buffer.from([vm])), abiVersion: readInt(Buffer.from([abi])) }
51
- }
52
- case FIELD_TYPES.amount:
53
- case FIELD_TYPES.int:
54
- return readInt(value)
55
- case FIELD_TYPES.id:
56
- return readId(value)
57
- case FIELD_TYPES.ids:
58
- return value.map(readId)
59
- case FIELD_TYPES.bool:
60
- return value[0] === 1
61
- case FIELD_TYPES.binary:
62
- return encode(value, prefix)
63
- case FIELD_TYPES.stateTree:
64
- return encode(value, 'ss')
65
- case FIELD_TYPES.string:
66
- return value.toString()
67
- case FIELD_TYPES.payload:
68
- return encode(value, 'ba')
69
- case FIELD_TYPES.pointers:
70
- return readPointers(value)
71
- case FIELD_TYPES.rlpBinary:
72
- return unpackTx(value, true)
73
- case FIELD_TYPES.rlpBinaries:
74
- return value.map(v => unpackTx(v, true))
75
- case FIELD_TYPES.rawBinary:
76
- return value
77
- case FIELD_TYPES.hex:
78
- return value.toString('hex')
79
- case FIELD_TYPES.offChainUpdates:
80
- return value.map(v => unpackTx(v, true))
81
- case FIELD_TYPES.callStack:
82
- // TODO: fix this
83
- return [readInt(value)]
84
- case FIELD_TYPES.mptrees:
85
- return value.map(t => new MPTree(t))
86
- case FIELD_TYPES.callReturnType:
87
- switch (readInt(value)) {
88
- case '0': return 'ok'
89
- case '1': return 'error'
90
- case '2': return 'revert'
91
- default: return value
92
- }
93
- case FIELD_TYPES.sophiaCodeTypeInfo:
94
- return value
95
- .reduce(
96
- (acc, [funHash, fnName, argType, outType]) =>
97
- ({ ...acc, [fnName.toString()]: { funHash, argType, outType } }),
98
- {}
99
- )
100
- default:
101
- if (type.prototype instanceof Field) return type.deserialize(value)
102
- return value
103
- }
104
- }
105
-
106
- function serializeField (value, type, prefix, params) {
107
- switch (type) {
108
- case FIELD_TYPES.amount:
109
- case FIELD_TYPES.int:
110
- return writeInt(value)
111
- case FIELD_TYPES.id:
112
- return writeId(value)
113
- case FIELD_TYPES.ids:
114
- return value.map(writeId)
115
- case FIELD_TYPES.bool:
116
- return Buffer.from([value ? 1 : 0])
117
- case FIELD_TYPES.binary:
118
- return decode(value, prefix)
119
- case FIELD_TYPES.stateTree:
120
- return decode(value, 'ss')
121
- case FIELD_TYPES.hex:
122
- return Buffer.from(value, 'hex')
123
- case FIELD_TYPES.signatures:
124
- return value.map(Buffer.from)
125
- case FIELD_TYPES.payload:
126
- return typeof value === 'string' && value.split('_')[0] === 'ba'
127
- ? decode(value, 'ba')
128
- : toBytes(value)
129
- case FIELD_TYPES.string:
130
- return toBytes(value)
131
- case FIELD_TYPES.pointers:
132
- return buildPointers(value)
133
- case FIELD_TYPES.rlpBinary:
134
- return value.rlpEncoded ?? value
135
- case FIELD_TYPES.mptrees:
136
- return value.map(t => t.serialize())
137
- case FIELD_TYPES.ctVersion:
138
- return Buffer.from([...toBytes(value.vmVersion), 0, ...toBytes(value.abiVersion)])
139
- case FIELD_TYPES.callReturnType:
140
- switch (value) {
141
- case 'ok': return writeInt(0)
142
- case 'error': return writeInt(1)
143
- case 'revert': return writeInt(2)
144
- default: return value
145
- }
146
- default:
147
- if (type.prototype instanceof Field) return type.serialize(value, params)
148
- return value
149
- }
150
- }
151
-
152
- function validateField (value, type, prefix) {
153
- // All fields are required
154
- if (value === undefined || value === null) return 'Field is required'
155
-
156
- // Validate type of value
157
- switch (type) {
158
- case FIELD_TYPES.amount:
159
- case FIELD_TYPES.int: {
160
- if (isNaN(value) && !BigNumber.isBigNumber(value)) {
161
- return `${value} is not of type Number or BigNumber`
162
- }
163
- if (new BigNumber(value).lt(0)) return `${value} must be >= 0`
164
- return
165
- }
166
- case FIELD_TYPES.id: {
167
- const prefixes = Array.isArray(prefix) ? prefix : [prefix]
168
- if (!prefixes.includes(value.split('_')[0])) {
169
- return `'${value}' prefix doesn't match expected prefix '${prefix}'`
170
- }
171
- return
172
- }
173
- case FIELD_TYPES.ctVersion:
174
- if (!value?.abiVersion || !value?.vmVersion) {
175
- return 'Value must be an object with "vmVersion" and "abiVersion" fields'
176
- }
177
- return
178
- case FIELD_TYPES.pointers:
179
- if (!Array.isArray(value)) return 'Value must be of type Array'
180
- if (value.some(p => !p?.key || !p?.id)) {
181
- return 'Value must contains only object\'s like \'{key: "account_pubkey", id: "ak_lkamsflkalsdalksdlasdlasdlamd"}\''
182
- }
183
- if (value.length > 32) {
184
- return `Expected 32 pointers or less, got ${value.length} instead`
185
- }
186
- }
187
- }
188
-
189
- function transformParams (params, schema, { denomination } = {}) {
190
- params = schema
191
- .filter(([_, t]) => t === FIELD_TYPES.amount)
192
- .reduce(
193
- (acc, [key]) => ({ ...params, [key]: formatAmount(params[key], { denomination }) }),
194
- params
195
- )
196
- const schemaKeys = schema.map(([k]) => k)
197
- return Object
198
- .entries(params)
199
- .reduce(
200
- (acc, [key, value]) => {
201
- if (schemaKeys.includes(key)) acc[key] = value
202
- if (['oracleTtl', 'queryTtl', 'responseTtl'].includes(key)) {
203
- acc[`${key}Type`] = value.type === ORACLE_TTL_TYPES.delta ? 0 : 1
204
- acc[`${key}Value`] = value.value
205
- }
206
- return acc
207
- },
208
- {}
209
- )
210
- }
211
-
212
- // INTERFACE
213
-
214
- function getOracleRelativeTtl (params, txType) {
215
- const ttlKey = {
216
- [TX_TYPE.oracleRegister]: 'oracleTtl',
217
- [TX_TYPE.oracleExtend]: 'oracleTtl',
218
- [TX_TYPE.oracleQuery]: 'queryTtl',
219
- [TX_TYPE.oracleResponse]: 'responseTtl'
220
- }[txType]
221
-
222
- if (params[ttlKey] || params[`${ttlKey}Value`]) {
223
- return params[`${ttlKey}Value`] || params[ttlKey].value
224
- }
225
- return 1
226
- }
227
-
228
- /**
229
- * Calculate min fee
230
- * @function
231
- * @alias module:@aeternity/aepp-sdk/es/tx/builder/index
232
- * @rtype (txType, { gas = 0, params }) => String
233
- * @param {String} txType - Transaction type
234
- * @param {Options} options - Options object
235
- * @param {String|Number} options.gas - Gas amount
236
- * @param {Object} options.params - Tx params
237
- * @return {String|Number}
238
- * @example calculateMinFee('spendTx', { gas, params })
239
- */
240
- export function calculateMinFee (txType, { gas = 0, params, vsn }) {
241
- const multiplier = BigNumber(1e9) // 10^9 GAS_PRICE
242
- if (!params) return BigNumber(DEFAULT_FEE).times(multiplier).toString(10)
243
-
244
- let actualFee = buildFee(txType, { params: { ...params, fee: 0 }, multiplier, gas, vsn })
245
- let expected = BigNumber(0)
246
-
247
- while (!actualFee.eq(expected)) {
248
- actualFee = buildFee(txType, { params: { ...params, fee: actualFee }, multiplier, gas, vsn })
249
- expected = actualFee
250
- }
251
- return expected.toString(10)
252
- }
253
-
254
- /**
255
- * Calculate fee based on tx type and params
256
- * @param txType
257
- * @param params
258
- * @param gas
259
- * @param multiplier
260
- * @param vsn
261
- * @return {BigNumber}
262
- */
263
- function buildFee (txType, { params, gas = 0, multiplier, vsn }) {
264
- const { rlpEncoded: txWithOutFee } = buildTx({ ...params }, txType, { vsn })
265
- const txSize = txWithOutFee.length
266
- return TX_FEE_BASE_GAS(txType)
267
- .plus(TX_FEE_OTHER_GAS(txType, txSize, {
268
- relativeTtl: getOracleRelativeTtl(params, txType),
269
- innerTxSize: [TX_TYPE.gaMeta, TX_TYPE.payingFor].includes(txType)
270
- ? params.tx.tx.encodedTx.rlpEncoded.length
271
- : 0
272
- }))
273
- .times(multiplier)
274
- }
275
-
276
- /**
277
- * Calculate fee
278
- * @function
279
- * @alias module:@aeternity/aepp-sdk/es/tx/builder
280
- * @rtype (fee, txType, gas = 0) => String
281
- * @param {String|Number} fee - fee
282
- * @param {String} txType - Transaction type
283
- * @param {Options} options - Options object
284
- * @param {String|Number} options.gas - Gas amount
285
- * @param {Object} options.params - Tx params
286
- * @return {String|Number}
287
- * @example calculateFee(null, 'spendTx', { gas, params })
288
- */
289
- export function calculateFee (fee = 0, txType, { gas = 0, params, showWarning = true, vsn } = {}) {
290
- if (!params && showWarning) console.warn(`Can't build transaction fee, we will use DEFAULT_FEE(${DEFAULT_FEE})`)
291
-
292
- return fee || calculateMinFee(txType, { params, gas, vsn })
293
- }
294
-
295
- /**
296
- * Validate transaction params
297
- * @function
298
- * @alias module:@aeternity/aepp-sdk/es/tx/builder
299
- * @param {Object} params Object with tx params
300
- * @param {Array} schema Transaction schema
301
- * @param {Array} excludeKeys Array of keys to exclude for validation
302
- * @return {Object} Object with validation errors
303
- */
304
- export function validateParams (params, schema, { excludeKeys = [] }) {
305
- return Object.fromEntries(
306
- schema
307
- // TODO: allow optional keys in schema
308
- .filter(([key]) => !excludeKeys.includes(key) &&
309
- !['payload', 'nameFee', 'deposit'].includes(key))
310
- .map(([key, type, prefix]) => [key, validateField(params[key], type, prefix)])
311
- .filter(([, message]) => message)
312
- )
313
- }
314
-
315
- /**
316
- * Build binary transaction
317
- * @function
318
- * @alias module:@aeternity/aepp-sdk/es/tx/builder
319
- * @param {Object} params Object with tx params
320
- * @param {Array} schema Transaction schema
321
- * @param {Object} [options={}] options
322
- * @param {String[]} [options.excludeKeys=[]] Array of keys to exclude for validation and build
323
- * @param {String} [options.denomination='aettos'] Denomination of amounts
324
- * @throws {Error} Validation error
325
- * @return {Array} Array with binary fields of transaction
326
- */
327
- export function buildRawTx (
328
- params,
329
- schema,
330
- { excludeKeys = [], denomination = AE_AMOUNT_FORMATS.AETTOS } = {}
331
- ) {
332
- const filteredSchema = schema.filter(([key]) => !excludeKeys.includes(key))
333
-
334
- // Transform `amount` type fields to `aettos`
335
- params = transformParams(params, filteredSchema, { denomination })
336
- // Validation
337
- const valid = validateParams(params, schema, { excludeKeys })
338
- if (Object.keys(valid).length) {
339
- throw new InvalidTxParamsError('Transaction build error. ' + JSON.stringify(valid))
340
- }
341
-
342
- return filteredSchema
343
- .map(([key, fieldType, prefix]) => serializeField(params[key], fieldType, prefix, params))
344
- }
345
-
346
- /**
347
- * Unpack binary transaction
348
- * @function
349
- * @alias module:@aeternity/aepp-sdk/es/tx/builder
350
- * @param {Array} binary Array with binary transaction field's
351
- * @param {Array} schema Transaction schema
352
- * @return {Object} Object with transaction field's
353
- */
354
- export function unpackRawTx (binary, schema) {
355
- return schema
356
- .reduce(
357
- (
358
- acc,
359
- [key, fieldType, prefix],
360
- index
361
- ) => Object.assign(acc, { [key]: deserializeField(binary[index], fieldType, prefix) }),
362
- {}
363
- )
364
- }
365
-
366
- /**
367
- * Get transaction serialization/deserialization schema
368
- * @alias module:@aeternity/aepp-sdk/es/tx/builder
369
- * @param {{ vsn: String, objId: Number, type: String }}
370
- * @throws {Error} Schema not found error
371
- * @return {Object} Schema
372
- */
373
- const getSchema = ({ vsn, objId, type }) => {
374
- const isDeserialize = !!objId
375
- const firstKey = isDeserialize ? objId : type
376
- const schema = isDeserialize ? TX_DESERIALIZATION_SCHEMA : TX_SERIALIZATION_SCHEMA
377
-
378
- if (!schema[firstKey]) {
379
- throw new SchemaNotFoundError(`Transaction ${isDeserialize ? 'deserialization' : 'serialization'} not implemented for ${isDeserialize ? 'tag ' + objId : type}`)
380
- }
381
- if (!schema[firstKey][vsn]) {
382
- throw new SchemaNotFoundError(`Transaction ${isDeserialize ? 'deserialization' : 'serialization'} not implemented for ${isDeserialize ? 'tag ' + objId : type} version ${vsn}`)
383
- }
384
- return schema[firstKey][vsn]
385
- }
386
-
387
- /**
388
- * Build transaction hash
389
- * @function
390
- * @alias module:@aeternity/aepp-sdk/es/tx/builder
391
- * @param {Object} params Object with tx params
392
- * @param {String} type Transaction type
393
- * @param {Object} [options={}] options
394
- * @param {String[]} [options.excludeKeys] Array of keys to exclude for validation and build
395
- * @param {String} [options.prefix] Prefix of transaction
396
- * @throws {Error} Validation error
397
- * @returns {Object} object
398
- * @returns {String} object.tx Base64Check transaction hash with 'tx_' prefix
399
- * @returns {Buffer} object.rlpEncoded rlp encoded transaction
400
- * @returns {Array<Buffer>} object.binary binary transaction
401
- */
402
- export function buildTx (
403
- params,
404
- type,
405
- { excludeKeys = [], prefix = 'tx', vsn = VSN, denomination = AE_AMOUNT_FORMATS.AETTOS } = {}
406
- ) {
407
- const [schema, tag] = getSchema({ type, vsn })
408
- const binary = buildRawTx(
409
- { ...params, VSN: vsn, tag },
410
- schema,
411
- { excludeKeys, denomination: params.denomination || denomination }
412
- ).filter(e => e !== undefined)
413
-
414
- const rlpEncoded = rlpEncode(binary)
415
- const tx = encode(rlpEncoded, prefix)
416
-
417
- return { tx, rlpEncoded, binary, txObject: unpackRawTx(binary, schema) }
418
- }
419
-
420
- /**
421
- * Unpack transaction hash
422
- * @function
423
- * @alias module:@aeternity/aepp-sdk/es/tx/builder
424
- * @param {String|Buffer} encodedTx String or RLP encoded transaction array
425
- * (if fromRlpBinary flag is true)
426
- * @param {Boolean} fromRlpBinary Unpack from RLP encoded transaction (default: false)
427
- * @param {String} prefix - Prefix of data
428
- * @returns {Object} object
429
- * @returns {Object} object.tx Object with transaction param's
430
- * @returns {Buffer} object.rlpEncoded rlp encoded transaction
431
- * @returns {Array<Buffer>} object.binary binary transaction
432
- */
433
- export function unpackTx (encodedTx, fromRlpBinary = false, prefix = 'tx') {
434
- const rlpEncoded = fromRlpBinary ? encodedTx : decode(encodedTx, prefix)
435
- const binary = rlpDecode(rlpEncoded)
436
-
437
- const objId = readInt(binary[0])
438
- const vsn = readInt(binary[1])
439
- const [schema] = getSchema({ objId, vsn })
440
-
441
- return { txType: OBJECT_ID_TX_TYPE[objId], tx: unpackRawTx(binary, schema), rlpEncoded, binary }
442
- }
443
-
444
- /**
445
- * Build a transaction hash
446
- * @function
447
- * @alias module:@aeternity/aepp-sdk/es/tx/builder
448
- * @param {String | Buffer} rawTx base64 or rlp encoded transaction
449
- * @return {String} Transaction hash
450
- */
451
- export function buildTxHash (rawTx) {
452
- const data = typeof rawTx === 'string' && rawTx.startsWith('tx_') ? decode(rawTx, 'tx') : rawTx
453
- return encode(hash(data), 'th')
454
- }
455
-
456
- export default {
457
- calculateMinFee,
458
- calculateFee,
459
- unpackTx,
460
- unpackRawTx,
461
- buildTx,
462
- buildRawTx,
463
- validateParams,
464
- buildTxHash
465
- }