@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
package/src/chain.ts ADDED
@@ -0,0 +1,444 @@
1
+ /*
2
+ * ISC License (ISC)
3
+ * Copyright (c) 2022 aeternity developers
4
+ *
5
+ * Permission to use, copy, modify, and/or distribute this software for any
6
+ * purpose with or without fee is hereby granted, provided that the above
7
+ * copyright notice and this permission notice appear in all copies.
8
+ *
9
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
10
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11
+ * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
12
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
14
+ * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15
+ * PERFORMANCE OF THIS SOFTWARE.
16
+ */
17
+ import { AE_AMOUNT_FORMATS, formatAmount } from './utils/amount-formatter'
18
+ import verifyTransaction from './tx/validator'
19
+ import { pause } from './utils/other'
20
+ import { isNameValid, produceNameId, decode } from './tx/builder/helpers'
21
+ import { DRY_RUN_ACCOUNT, AensName } from './tx/builder/schema'
22
+ import {
23
+ AensPointerContextError, DryRunError, InvalidAensNameError, InvalidTxError,
24
+ RequestTimedOutError, TxTimedOutError, TxNotInChainError, InternalError
25
+ } from './utils/errors'
26
+ import Node, { TransformNodeType } from './Node'
27
+ import {
28
+ Account as AccountNode, ByteCode, ContractObject, DryRunResult, DryRunResults,
29
+ Generation, KeyBlock, MicroBlockHeader, NameEntry, SignedTx
30
+ } from './apis/node'
31
+ import { EncodedData } from './utils/encoder'
32
+ import AccountBase from './account/Base'
33
+
34
+ export function _getPollInterval (
35
+ type: 'block' | 'microblock',
36
+ { _expectedMineRate = 180000, _microBlockCycle = 3000, _maxPollInterval = 5000 }:
37
+ { _expectedMineRate?: number, _microBlockCycle?: number, _maxPollInterval?: number }
38
+ ): number {
39
+ const base = {
40
+ block: _expectedMineRate,
41
+ microblock: _microBlockCycle
42
+ }[type]
43
+ return Math.min(base / 3, _maxPollInterval)
44
+ }
45
+
46
+ /**
47
+ * Submit a signed transaction for mining
48
+ * @param tx - Transaction to submit
49
+ * @param options - Options
50
+ * @param options.onNode - Node to use
51
+ * @param options.onAccount - Account to use
52
+ * @param options.verify - Verify transaction before sending
53
+ * @param options.waitMined - Ensure that transaction get into block
54
+ * @param options.confirm - Number of micro blocks that should be mined after tx get included
55
+ * @returns Transaction details
56
+ */
57
+ export async function sendTransaction (
58
+ tx: EncodedData<'tx'>,
59
+ { onNode, onAccount, verify = true, waitMined = true, confirm, ...options }:
60
+ SendTransactionOptions
61
+ ): Promise<SendTransactionReturnType> {
62
+ if (verify) {
63
+ const validation = await verifyTransaction(tx, onNode)
64
+ if (validation.length > 0) {
65
+ const message = 'Transaction verification errors: ' +
66
+ validation.map((v: { message: string }) => v.message).join(', ')
67
+ throw new InvalidTxError(message, validation, tx)
68
+ }
69
+ }
70
+
71
+ try {
72
+ const { txHash } = await onNode.postTransaction({ tx }, {
73
+ requestOptions: {
74
+ customHeaders: {
75
+ __queue: `tx-${await onAccount?.address(options).catch(() => '') ?? ''}`
76
+ }
77
+ }
78
+ })
79
+
80
+ if (waitMined) {
81
+ const pollResult = await poll(txHash, { onNode, ...options })
82
+ const txData = {
83
+ ...pollResult,
84
+ hash: pollResult.hash as EncodedData<'th'>,
85
+ rawTx: tx
86
+ }
87
+ // wait for transaction confirmation
88
+ if (confirm != null && (confirm === true || confirm > 0)) {
89
+ const c = typeof confirm === 'boolean' ? undefined : confirm
90
+ return {
91
+ ...txData,
92
+ confirmationHeight: await waitForTxConfirm(txHash, { onNode, confirm: c, ...options })
93
+ }
94
+ }
95
+ return txData
96
+ }
97
+ return { hash: txHash, rawTx: tx }
98
+ } catch (error) {
99
+ throw Object.assign(error, {
100
+ rawTx: tx,
101
+ verifyTx: async () => await verifyTransaction(tx, onNode)
102
+ })
103
+ }
104
+ }
105
+
106
+ type SendTransactionOptionsType = {
107
+ onNode: Node
108
+ onAccount?: AccountBase
109
+ verify?: boolean
110
+ waitMined?: boolean
111
+ confirm?: boolean | number
112
+ } & Parameters<typeof poll>[1] & Omit<Parameters<typeof waitForTxConfirm>[1], 'confirm'>
113
+ interface SendTransactionOptions extends SendTransactionOptionsType {}
114
+ interface SendTransactionReturnType extends Partial<TransformNodeType<SignedTx>> {
115
+ hash: EncodedData<'th'>
116
+ rawTx: EncodedData<'tx'>
117
+ confirmationHeight?: number
118
+ }
119
+
120
+ /**
121
+ * Wait for transaction confirmation
122
+ * @param txHash - Transaction hash
123
+ * @param options - Options
124
+ * @param options.confirm - Number of micro blocks to wait for transaction confirmation
125
+ * @param options.onNode - Node to use
126
+ * @returns Current Height
127
+ */
128
+ export async function waitForTxConfirm (
129
+ txHash: EncodedData<'th'>,
130
+ { confirm = 3, onNode, ...options }:
131
+ { confirm?: number, onNode: Node } & Parameters<typeof awaitHeight>[1]
132
+ ): Promise<number> {
133
+ const { blockHeight } = await onNode.getTransactionByHash(txHash)
134
+ const height = await awaitHeight(blockHeight + confirm, { onNode, ...options })
135
+ const { blockHeight: newBlockHeight } = await onNode.getTransactionByHash(txHash)
136
+ switch (newBlockHeight) {
137
+ case -1:
138
+ throw new TxNotInChainError(txHash)
139
+ case blockHeight:
140
+ return height
141
+ default:
142
+ return await waitForTxConfirm(txHash, { onNode, confirm, ...options })
143
+ }
144
+ }
145
+
146
+ /**
147
+ * Get account by account public key
148
+ * @param address - Account address (public key)
149
+ * @param options - Options
150
+ * @param options.height - Get account on specific block by block height
151
+ * @param options.hash - Get account on specific block by micro block hash or key block hash
152
+ * @param options.onNode - Node to use
153
+ */
154
+ export async function getAccount (
155
+ address: EncodedData<'ak' | 'ct'>,
156
+ { height, hash, onNode }:
157
+ { height?: number, hash?: EncodedData<'kh' | 'mh'>, onNode: Node }
158
+ ): Promise<TransformNodeType<AccountNode>> {
159
+ if (height != null) return await onNode.getAccountByPubkeyAndHeight(address, height)
160
+ if (hash != null) return await onNode.getAccountByPubkeyAndHash(address, hash)
161
+ return await onNode.getAccountByPubkey(address)
162
+ }
163
+
164
+ /**
165
+ * Request the balance of specified account
166
+ * @param address - The public account address to obtain the balance for
167
+ * @param options - Options
168
+ * @param options.format
169
+ * @param options.height - The chain height at which to obtain the balance for
170
+ * (default: top of chain)
171
+ * @param options.hash - The block hash on which to obtain the balance for (default: top of chain)
172
+ */
173
+ export async function getBalance (
174
+ address: EncodedData<'ak' | 'ct'>,
175
+ { format = AE_AMOUNT_FORMATS.AETTOS, ...options }:
176
+ { format?: AE_AMOUNT_FORMATS } & Parameters<typeof getAccount>[1]
177
+ ): Promise<string> {
178
+ const { balance } = await getAccount(address, options).catch(() => ({ balance: 0n }))
179
+
180
+ return formatAmount(balance, { targetDenomination: format })
181
+ }
182
+
183
+ /**
184
+ * Obtain current height of the chain
185
+ * @returns Current chain height
186
+ */
187
+ export async function height ({ onNode }: { onNode: Node }): Promise<number> {
188
+ return (await onNode.getCurrentKeyBlockHeight()).height
189
+ }
190
+
191
+ /**
192
+ * Wait for the chain to reach a specific height
193
+ * @param height - Height to wait for
194
+ * @param options - Options
195
+ * @param options.interval - Interval (in ms) at which to poll the chain
196
+ * @param options.attempts - Number of polling attempts after which to fail
197
+ * @param options.onNode - Node to use
198
+ * @returns Current chain height
199
+ */
200
+ export async function awaitHeight (
201
+ height: number,
202
+ { interval, attempts = 20, onNode, ...options }:
203
+ { interval?: number, attempts?: number, onNode: Node }
204
+ & Parameters<typeof _getPollInterval>[1]
205
+ ): Promise<number> {
206
+ interval ??= _getPollInterval('block', options)
207
+ let currentHeight
208
+ for (let i = 0; i < attempts; i++) {
209
+ if (i !== 0) await pause(interval)
210
+ currentHeight = (await onNode.getCurrentKeyBlockHeight()).height
211
+ if (currentHeight >= height) return currentHeight
212
+ }
213
+ throw new RequestTimedOutError((attempts - 1) * interval, currentHeight, height)
214
+ }
215
+
216
+ /**
217
+ * Wait for a transaction to be mined
218
+ * @param th - The hash of transaction to poll
219
+ * @param options - Options
220
+ * @param options.interval - Interval (in ms) at which to poll the chain
221
+ * @param options.blocks - Number of blocks mined after which to fail
222
+ * @param options.onNode - Node to use
223
+ * @returns The transaction as it was mined
224
+ */
225
+ export async function poll (
226
+ th: EncodedData<'th'>,
227
+ { blocks = 10, interval, onNode, ...options }:
228
+ { blocks?: number, interval?: number, onNode: Node } & Parameters<typeof _getPollInterval>[1]
229
+ ): Promise<TransformNodeType<SignedTx>> {
230
+ interval ??= _getPollInterval('microblock', options)
231
+ const max = await height({ onNode }) + blocks
232
+ do {
233
+ const tx = await onNode.getTransactionByHash(th)
234
+ if (tx.blockHeight !== -1) return tx
235
+ await pause(interval)
236
+ } while (await height({ onNode }) < max)
237
+ throw new TxTimedOutError(blocks, th)
238
+ }
239
+
240
+ /**
241
+ * Obtain current generation
242
+ * @param options - Options
243
+ * @param options.onNode - Node to use
244
+ * @returns Current Generation
245
+ */
246
+ export async function getCurrentGeneration (
247
+ { onNode }: { onNode: Node }
248
+ ): Promise<TransformNodeType<Generation>> {
249
+ return await onNode.getCurrentGeneration()
250
+ }
251
+
252
+ /**
253
+ * Get generation by hash or height
254
+ * @param hashOrHeight - Generation hash or height
255
+ * @param options - Options
256
+ * @param options.onNode - Node to use
257
+ * @returns Generation
258
+ */
259
+ export async function getGeneration (
260
+ hashOrHeight: EncodedData<'kh'> | number, { onNode }: { onNode: Node }
261
+ ): Promise<TransformNodeType<Generation>> {
262
+ if (typeof hashOrHeight === 'number') return await onNode.getGenerationByHeight(hashOrHeight)
263
+ return await onNode.getGenerationByHash(hashOrHeight)
264
+ }
265
+
266
+ /**
267
+ * Get micro block transactions
268
+ * @param hash - Micro block hash
269
+ * @param options - Options
270
+ * @param options.onNode - Node to use
271
+ * @returns Transactions
272
+ */
273
+ export async function getMicroBlockTransactions (
274
+ hash: EncodedData<'mh'>, { onNode }: { onNode: Node }
275
+ ): Promise<TransformNodeType<SignedTx[]>> {
276
+ return (await onNode.getMicroBlockTransactionsByHash(hash)).transactions
277
+ }
278
+
279
+ /**
280
+ * Get key block
281
+ * @param hashOrHeight - Key block hash or height
282
+ * @param options - Options
283
+ * @param options.onNode - Node to use
284
+ * @returns Key Block
285
+ */
286
+ export async function getKeyBlock (
287
+ hashOrHeight: EncodedData<'kh'> | number, { onNode }: { onNode: Node }
288
+ ): Promise<TransformNodeType<KeyBlock>> {
289
+ if (typeof hashOrHeight === 'number') return await onNode.getKeyBlockByHeight(hashOrHeight)
290
+ return await onNode.getKeyBlockByHash(hashOrHeight)
291
+ }
292
+
293
+ /**
294
+ * Get micro block header
295
+ * @param hash - Micro block hash
296
+ * @param options - Options
297
+ * @param options.onNode - Node to use
298
+ * @returns Micro block header
299
+ */
300
+ export async function getMicroBlockHeader (
301
+ hash: EncodedData<'mh'>, { onNode }: { onNode: Node }
302
+ ): Promise<TransformNodeType<MicroBlockHeader>> {
303
+ return await onNode.getMicroBlockHeaderByHash(hash)
304
+ }
305
+
306
+ interface TxDryRunArguments {
307
+ tx: EncodedData<'tx'>
308
+ accountAddress: EncodedData<'ak'>
309
+ top?: number
310
+ txEvents?: any
311
+ resolve: Function
312
+ reject: Function
313
+ }
314
+ const txDryRunRequests: Map<string, TxDryRunArguments[] & { timeout?: NodeJS.Timeout }> = new Map()
315
+
316
+ async function txDryRunHandler (key: string, onNode: Node): Promise<void> {
317
+ const rs = txDryRunRequests.get(key)
318
+ txDryRunRequests.delete(key)
319
+ if (rs == null) throw new InternalError('Can\'t get dry-run request')
320
+
321
+ let dryRunRes
322
+ try {
323
+ dryRunRes = await onNode.protectedDryRunTxs({
324
+ top: rs[0].top,
325
+ txEvents: rs[0].txEvents,
326
+ txs: rs.map(req => ({ tx: req.tx })),
327
+ accounts: Array.from(new Set(rs.map(req => req.accountAddress)))
328
+ .map(pubKey => ({ pubKey, amount: DRY_RUN_ACCOUNT.amount }))
329
+ })
330
+ } catch (error) {
331
+ rs.forEach(({ reject }) => reject(error))
332
+ return
333
+ }
334
+
335
+ const { results, txEvents } = dryRunRes
336
+ results.forEach(({ result, reason, ...resultPayload }, idx) => {
337
+ const { resolve, reject, tx, accountAddress } = rs[idx]
338
+ if (result === 'ok') return resolve({ ...resultPayload, txEvents })
339
+ reject(Object.assign(
340
+ new DryRunError(reason as string), { tx, accountAddress }
341
+ ))
342
+ })
343
+ }
344
+
345
+ /**
346
+ * Transaction dry-run
347
+ * @param tx - transaction to execute
348
+ * @param accountAddress - address that will be used to execute transaction
349
+ * @param options - Options
350
+ * @param options.top - hash of block on which to make dry-run
351
+ * @param options.txEvents - collect and return on-chain tx events that would result from the call
352
+ * @param options.combine - Enables combining of similar requests to a single dry-run call
353
+ * @param options.onNode - Node to use
354
+ */
355
+ export async function txDryRun (
356
+ tx: EncodedData<'tx'>,
357
+ accountAddress: EncodedData<'ak'>,
358
+ { top, txEvents, combine, onNode }:
359
+ { top?: number, txEvents?: boolean, combine?: boolean, onNode: Node }
360
+ ): Promise<{
361
+ txEvents?: TransformNodeType<DryRunResults['txEvents']>
362
+ } & TransformNodeType<DryRunResult>> {
363
+ const key = combine === true ? [top, txEvents].join() : 'immediate'
364
+ const requests = txDryRunRequests.get(key) ?? []
365
+ txDryRunRequests.set(key, requests)
366
+ return await new Promise((resolve, reject) => {
367
+ requests.push({ tx, accountAddress, top, txEvents, resolve, reject })
368
+ if (combine !== true) {
369
+ void txDryRunHandler(key, onNode)
370
+ return
371
+ }
372
+ requests.timeout ??= setTimeout(() => { void txDryRunHandler(key, onNode) })
373
+ })
374
+ }
375
+
376
+ /**
377
+ * Get contract byte code
378
+ * @param contractId - Contract address
379
+ * @param options - Options
380
+ * @param options.onNode - Node to use
381
+ */
382
+ export async function getContractByteCode (
383
+ contractId: EncodedData<'ct'>, { onNode }: { onNode: Node }
384
+ ): Promise<TransformNodeType<ByteCode>> {
385
+ return await onNode.getContractCode(contractId)
386
+ }
387
+
388
+ /**
389
+ * Get contract entry
390
+ * @param contractId - Contract address
391
+ * @param options - Options
392
+ * @param options.onNode - Node to use
393
+ */
394
+ export async function getContract (
395
+ contractId: EncodedData<'ct'>, { onNode }: { onNode: Node }
396
+ ): Promise<TransformNodeType<ContractObject>> {
397
+ return await onNode.getContract(contractId)
398
+ }
399
+
400
+ /**
401
+ * Get name entry
402
+ * @param name - AENS name
403
+ * @param options - Options
404
+ * @param options.onNode - Node to use
405
+ */
406
+ export async function getName (
407
+ name: AensName, { onNode }: { onNode: Node }
408
+ ): Promise<TransformNodeType<NameEntry>> {
409
+ return await onNode.getNameEntryByName(name)
410
+ }
411
+
412
+ /**
413
+ * Resolve AENS name and return name hash
414
+ * @param nameOrId - AENS name or address
415
+ * @param key - in AENS pointers record
416
+ * @param options - Options
417
+ * @param options.verify - To ensure that name exist and have a corresponding pointer
418
+ * // TODO: avoid that to don't trust to current api gateway
419
+ * @param options.resolveByNode - Enables pointer resolving using node
420
+ * @param options.onNode - Node to use
421
+ * @returns Address or AENS name hash
422
+ */
423
+ export async function resolveName <Type extends 'ak' | 'ct'> (
424
+ nameOrId: AensName | EncodedData<Type>,
425
+ key: string,
426
+ { verify = true, resolveByNode = false, onNode }:
427
+ { verify?: boolean, resolveByNode?: boolean, onNode: Node }
428
+ ): Promise<EncodedData<Type | 'nm'>> {
429
+ try {
430
+ const id = nameOrId as EncodedData<Type>
431
+ decode(id)
432
+ return id
433
+ } catch (error) {}
434
+ if (isNameValid(nameOrId)) {
435
+ if (verify || resolveByNode) {
436
+ const name = await onNode.getNameEntryByName(nameOrId)
437
+ const pointer = name.pointers.find(pointer => pointer.key === key)
438
+ if (pointer == null) throw new AensPointerContextError(nameOrId, key)
439
+ if (resolveByNode) return pointer.id as EncodedData<Type>
440
+ }
441
+ return produceNameId(nameOrId)
442
+ }
443
+ throw new InvalidAensNameError(`Invalid name or address: ${nameOrId}`)
444
+ }