@aeternity/aepp-sdk 11.0.1 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (376) hide show
  1. package/LICENSE +1 -1
  2. package/dist/aepp-sdk.browser-script.js +1 -1
  3. package/dist/aepp-sdk.browser-script.js.LICENSE.txt +12 -19
  4. package/dist/aepp-sdk.browser-script.js.map +1 -1
  5. package/dist/aepp-sdk.browser.js +1 -1
  6. package/dist/aepp-sdk.browser.js.map +1 -1
  7. package/dist/aepp-sdk.js +1 -1
  8. package/dist/aepp-sdk.js.map +1 -1
  9. package/es/AeSdk.d.ts +37 -0
  10. package/es/AeSdk.mjs +81 -0
  11. package/es/AeSdk.mjs.map +1 -0
  12. package/es/AeSdkAepp.d.ts +69 -0
  13. package/es/AeSdkAepp.mjs +175 -0
  14. package/es/AeSdkAepp.mjs.map +1 -0
  15. package/es/AeSdkBase.d.ts +212 -0
  16. package/es/AeSdkBase.mjs +310 -0
  17. package/es/AeSdkBase.mjs.map +1 -0
  18. package/es/AeSdkWallet.d.ts +103 -0
  19. package/es/AeSdkWallet.mjs +322 -0
  20. package/es/AeSdkWallet.mjs.map +1 -0
  21. package/es/Node.d.ts +44 -0
  22. package/es/Node.mjs +141 -0
  23. package/es/Node.mjs.map +1 -0
  24. package/es/account/Base.d.ts +65 -0
  25. package/es/account/Base.mjs +123 -0
  26. package/es/account/Base.mjs.map +1 -0
  27. package/es/account/Memory.d.ts +25 -0
  28. package/es/account/Memory.mjs +81 -0
  29. package/es/account/Memory.mjs.map +1 -0
  30. package/es/account/Rpc.d.ts +27 -0
  31. package/es/account/Rpc.mjs +79 -0
  32. package/es/account/Rpc.mjs.map +1 -0
  33. package/es/aens.d.ts +209 -0
  34. package/es/aens.mjs +332 -0
  35. package/es/aens.mjs.map +1 -0
  36. package/es/aepp-wallet-communication/connection/Browser.d.ts +32 -0
  37. package/es/aepp-wallet-communication/connection/Browser.mjs +70 -0
  38. package/es/aepp-wallet-communication/connection/Browser.mjs.map +1 -0
  39. package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +17 -0
  40. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +57 -0
  41. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -0
  42. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.d.ts +35 -0
  43. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs +142 -0
  44. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs.map +1 -0
  45. package/es/aepp-wallet-communication/connection-proxy.d.ts +10 -0
  46. package/{src/utils/crypto-ts.ts → es/aepp-wallet-communication/connection-proxy.mjs} +15 -11
  47. package/es/aepp-wallet-communication/connection-proxy.mjs.map +1 -0
  48. package/es/aepp-wallet-communication/rpc/RpcClient.d.ts +33 -0
  49. package/es/aepp-wallet-communication/rpc/RpcClient.mjs +169 -0
  50. package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -0
  51. package/es/aepp-wallet-communication/rpc/types.d.ts +77 -0
  52. package/es/aepp-wallet-communication/rpc/types.mjs +3 -0
  53. package/es/aepp-wallet-communication/rpc/types.mjs.map +1 -0
  54. package/es/aepp-wallet-communication/schema.d.ts +90 -46
  55. package/es/aepp-wallet-communication/schema.mjs +214 -0
  56. package/es/aepp-wallet-communication/schema.mjs.map +1 -0
  57. package/es/aepp-wallet-communication/wallet-detector.d.ts +24 -0
  58. package/es/aepp-wallet-communication/wallet-detector.mjs +63 -0
  59. package/es/aepp-wallet-communication/wallet-detector.mjs.map +1 -0
  60. package/es/apis/compiler/compiler.d.ts +92 -0
  61. package/es/apis/compiler/compiler.mjs +576 -0
  62. package/es/apis/compiler/compiler.mjs.map +1 -0
  63. package/es/apis/compiler/index.d.ts +2 -0
  64. package/es/apis/compiler/index.mjs +3 -0
  65. package/es/apis/compiler/index.mjs.map +1 -0
  66. package/es/apis/compiler/models/index.d.ts +248 -0
  67. package/es/apis/compiler/models/index.mjs +48 -0
  68. package/es/apis/compiler/models/index.mjs.map +1 -0
  69. package/es/apis/compiler/models/mappers.d.ts +23 -0
  70. package/es/apis/compiler/models/mappers.mjs +585 -0
  71. package/es/apis/compiler/models/mappers.mjs.map +1 -0
  72. package/es/apis/compiler/models/parameters.d.ts +13 -0
  73. package/es/apis/compiler/models/parameters.mjs +71 -0
  74. package/es/apis/compiler/models/parameters.mjs.map +1 -0
  75. package/es/apis/node/index.d.ts +2 -0
  76. package/es/apis/node/index.mjs +3 -0
  77. package/es/apis/node/index.mjs.map +1 -0
  78. package/es/apis/node/models/index.d.ts +1061 -0
  79. package/es/apis/node/models/index.mjs +2 -0
  80. package/es/apis/node/models/index.mjs.map +1 -0
  81. package/es/apis/node/models/mappers.d.ts +95 -0
  82. package/es/apis/node/models/mappers.mjs +4164 -0
  83. package/es/apis/node/models/mappers.mjs.map +1 -0
  84. package/es/apis/node/models/parameters.d.ts +17 -0
  85. package/es/apis/node/models/parameters.mjs +165 -0
  86. package/es/apis/node/models/parameters.mjs.map +1 -0
  87. package/es/apis/node/node.d.ts +215 -0
  88. package/es/apis/node/node.mjs +1165 -0
  89. package/es/apis/node/node.mjs.map +1 -0
  90. package/es/chain.d.ts +220 -0
  91. package/es/chain.mjs +524 -0
  92. package/es/chain.mjs.map +1 -0
  93. package/es/channel/handlers.d.ts +34 -0
  94. package/es/channel/handlers.mjs +147 -112
  95. package/es/channel/handlers.mjs.map +1 -1
  96. package/es/channel/index.d.ts +634 -0
  97. package/es/channel/index.mjs +898 -900
  98. package/es/channel/index.mjs.map +1 -1
  99. package/es/channel/internal.d.ts +100 -0
  100. package/es/channel/internal.mjs +97 -51
  101. package/es/channel/internal.mjs.map +1 -1
  102. package/es/contract/Compiler.d.ts +17 -0
  103. package/es/contract/Compiler.mjs +67 -0
  104. package/es/contract/Compiler.mjs.map +1 -0
  105. package/es/contract/aci.d.ts +125 -0
  106. package/es/contract/aci.mjs +199 -180
  107. package/es/contract/aci.mjs.map +1 -1
  108. package/es/contract/ga.d.ts +68 -0
  109. package/es/contract/ga.mjs +190 -0
  110. package/es/contract/ga.mjs.map +1 -0
  111. package/es/contract/methods.d.ts +68 -0
  112. package/es/contract/methods.mjs +101 -0
  113. package/es/contract/methods.mjs.map +1 -0
  114. package/es/index.d.ts +32 -0
  115. package/es/index.mjs +32 -40
  116. package/es/index.mjs.map +1 -1
  117. package/es/oracle.d.ts +154 -0
  118. package/es/oracle.mjs +288 -0
  119. package/es/oracle.mjs.map +1 -0
  120. package/es/spend.d.ts +61 -0
  121. package/es/spend.mjs +122 -0
  122. package/es/spend.mjs.map +1 -0
  123. package/es/tx/builder/constants.d.ts +41 -0
  124. package/es/tx/builder/constants.mjs +11 -19
  125. package/es/tx/builder/constants.mjs.map +1 -1
  126. package/es/tx/builder/field-types.d.ts +62 -0
  127. package/es/tx/builder/field-types.mjs +62 -10
  128. package/es/tx/builder/field-types.mjs.map +1 -1
  129. package/es/tx/builder/helpers.d.ts +131 -0
  130. package/es/tx/builder/helpers.mjs +71 -169
  131. package/es/tx/builder/helpers.mjs.map +1 -1
  132. package/es/tx/builder/index.d.ts +75 -0
  133. package/es/tx/builder/index.mjs +141 -323
  134. package/es/tx/builder/index.mjs.map +1 -1
  135. package/es/tx/builder/schema.d.ts +350 -0
  136. package/es/tx/builder/schema.mjs +173 -510
  137. package/es/tx/builder/schema.mjs.map +1 -1
  138. package/es/tx/index.d.ts +63 -0
  139. package/es/tx/index.mjs +171 -265
  140. package/es/tx/index.mjs.map +1 -1
  141. package/es/tx/min-fee.d.ts +20 -0
  142. package/es/tx/min-fee.mjs +148 -0
  143. package/es/tx/min-fee.mjs.map +1 -0
  144. package/es/tx/validator.d.ts +19 -0
  145. package/es/tx/validator.mjs +64 -71
  146. package/es/tx/validator.mjs.map +1 -1
  147. package/es/typings/@aeternity__argon2-browser/index.d.mjs +2 -0
  148. package/es/typings/@aeternity__argon2-browser/index.d.mjs.map +1 -0
  149. package/es/typings/@aeternity__uuid/index.d.mjs +2 -0
  150. package/es/typings/@aeternity__uuid/index.d.mjs.map +1 -0
  151. package/es/typings/bip32-path/index.d.mjs +2 -0
  152. package/es/typings/bip32-path/index.d.mjs.map +1 -0
  153. package/es/typings/blakejs/index.d.mjs.map +1 -1
  154. package/es/typings/tweetnacl-auth/index.d.mjs +2 -0
  155. package/es/typings/tweetnacl-auth/index.d.mjs.map +1 -0
  156. package/es/utils/amount-formatter.d.ts +42 -0
  157. package/es/utils/amount-formatter.mjs +28 -41
  158. package/es/utils/amount-formatter.mjs.map +1 -1
  159. package/es/utils/autorest.d.ts +6 -0
  160. package/es/utils/autorest.mjs +97 -0
  161. package/es/utils/autorest.mjs.map +1 -0
  162. package/es/utils/bignumber.d.ts +13 -0
  163. package/es/utils/bignumber.mjs +10 -8
  164. package/es/utils/bignumber.mjs.map +1 -1
  165. package/es/{bytes.d.ts → utils/bytes.d.ts} +10 -13
  166. package/es/utils/bytes.mjs +10 -14
  167. package/es/utils/bytes.mjs.map +1 -1
  168. package/es/utils/crypto.d.ts +103 -0
  169. package/es/utils/crypto.mjs +60 -68
  170. package/es/utils/crypto.mjs.map +1 -1
  171. package/es/utils/encoder.d.ts +26 -0
  172. package/es/utils/encoder.mjs +47 -51
  173. package/es/utils/encoder.mjs.map +1 -1
  174. package/es/{errors.d.ts → utils/errors.d.ts} +254 -57
  175. package/es/utils/errors.mjs +318 -125
  176. package/es/utils/errors.mjs.map +1 -1
  177. package/es/utils/hd-wallet.d.ts +34 -0
  178. package/es/utils/hd-wallet.mjs +27 -16
  179. package/es/utils/hd-wallet.mjs.map +1 -1
  180. package/es/utils/json-big.d.ts +5 -0
  181. package/es/utils/json-big.mjs +10 -14
  182. package/es/utils/json-big.mjs.map +1 -1
  183. package/es/utils/keystore.d.ts +51 -0
  184. package/es/utils/keystore.mjs +98 -193
  185. package/es/utils/keystore.mjs.map +1 -1
  186. package/es/{mptree.d.ts → utils/mptree.d.ts} +5 -8
  187. package/es/utils/mptree.mjs +13 -14
  188. package/es/utils/mptree.mjs.map +1 -1
  189. package/es/utils/other.d.ts +14 -0
  190. package/es/utils/other.mjs +21 -36
  191. package/es/utils/other.mjs.map +1 -1
  192. package/es/{semver-satisfies.d.ts → utils/semver-satisfies.d.ts} +0 -0
  193. package/es/utils/semver-satisfies.mjs.map +1 -1
  194. package/es/utils/string.d.ts +24 -0
  195. package/es/utils/string.mjs +8 -10
  196. package/es/utils/string.mjs.map +1 -1
  197. package/package.json +49 -39
  198. package/src/AeSdk.ts +65 -0
  199. package/src/AeSdkAepp.ts +167 -0
  200. package/src/AeSdkBase.ts +320 -0
  201. package/src/AeSdkWallet.ts +332 -0
  202. package/src/Node.ts +167 -0
  203. package/src/account/Base.ts +114 -0
  204. package/src/account/Memory.ts +83 -0
  205. package/src/account/Rpc.ts +67 -0
  206. package/src/aens.ts +391 -0
  207. package/src/aepp-wallet-communication/connection/Browser.ts +68 -0
  208. package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +58 -0
  209. package/src/aepp-wallet-communication/connection/BrowserWindowMessage.ts +111 -0
  210. package/{es/utils/crypto-ts.mjs → src/aepp-wallet-communication/connection-proxy.ts} +16 -17
  211. package/src/aepp-wallet-communication/rpc/RpcClient.ts +137 -0
  212. package/src/aepp-wallet-communication/rpc/types.ts +66 -0
  213. package/src/aepp-wallet-communication/schema.ts +181 -0
  214. package/src/aepp-wallet-communication/wallet-detector.ts +71 -0
  215. package/src/apis/compiler/code-model-v4.yaml +2649 -0
  216. package/src/apis/compiler/compiler.ts +585 -0
  217. package/src/apis/compiler/index.ts +2 -0
  218. package/src/apis/compiler/models/index.ts +301 -0
  219. package/src/apis/compiler/models/mappers.ts +583 -0
  220. package/src/apis/compiler/models/parameters.ts +93 -0
  221. package/src/apis/node/code-model-v4.yaml +10046 -0
  222. package/src/apis/node/index.ts +2 -0
  223. package/src/apis/node/models/index.ts +1253 -0
  224. package/src/apis/node/models/mappers.ts +4278 -0
  225. package/src/apis/node/models/parameters.ts +188 -0
  226. package/src/apis/node/node.ts +1299 -0
  227. package/src/chain.ts +444 -0
  228. package/src/channel/{handlers.js → handlers.ts} +220 -128
  229. package/src/channel/index.ts +991 -0
  230. package/src/channel/internal.ts +345 -0
  231. package/src/contract/Compiler.ts +66 -0
  232. package/src/contract/aci.ts +529 -0
  233. package/src/contract/ga.ts +178 -0
  234. package/src/contract/methods.ts +118 -0
  235. package/src/index.ts +51 -0
  236. package/src/oracle.ts +342 -0
  237. package/src/spend.ts +152 -0
  238. package/src/tx/builder/{constants.js → constants.ts} +12 -16
  239. package/src/tx/builder/field-types.ts +111 -0
  240. package/src/tx/builder/helpers.ts +253 -0
  241. package/src/tx/builder/index.ts +394 -0
  242. package/src/tx/builder/schema.ts +771 -0
  243. package/src/tx/index.ts +199 -0
  244. package/src/tx/min-fee.ts +136 -0
  245. package/src/tx/validator.ts +226 -0
  246. package/src/typings/@aeternity__argon2-browser/index.d.ts +3 -0
  247. package/src/typings/@aeternity__uuid/index.d.ts +3 -0
  248. package/src/typings/bip32-path/index.d.ts +33 -0
  249. package/src/typings/tweetnacl-auth/index.d.ts +14 -0
  250. package/src/utils/amount-formatter.ts +29 -42
  251. package/src/utils/autorest.ts +90 -0
  252. package/src/utils/bignumber.ts +9 -11
  253. package/src/utils/bytes.ts +12 -14
  254. package/src/utils/crypto.ts +217 -0
  255. package/src/utils/encoder.ts +52 -55
  256. package/src/utils/errors.ts +268 -134
  257. package/src/utils/hd-wallet.ts +134 -0
  258. package/src/utils/json-big.ts +26 -0
  259. package/src/utils/keystore.ts +179 -0
  260. package/src/utils/mptree.ts +14 -14
  261. package/src/utils/other.ts +28 -43
  262. package/src/utils/string.ts +8 -10
  263. package/es/account/base.mjs +0 -179
  264. package/es/account/base.mjs.map +0 -1
  265. package/es/account/memory.mjs +0 -99
  266. package/es/account/memory.mjs.map +0 -1
  267. package/es/account/multiple.mjs +0 -179
  268. package/es/account/multiple.mjs.map +0 -1
  269. package/es/ae/aens.mjs +0 -404
  270. package/es/ae/aens.mjs.map +0 -1
  271. package/es/ae/aepp.mjs +0 -45
  272. package/es/ae/aepp.mjs.map +0 -1
  273. package/es/ae/contract.mjs +0 -159
  274. package/es/ae/contract.mjs.map +0 -1
  275. package/es/ae/index.mjs +0 -207
  276. package/es/ae/index.mjs.map +0 -1
  277. package/es/ae/oracle.mjs +0 -339
  278. package/es/ae/oracle.mjs.map +0 -1
  279. package/es/ae/universal.mjs +0 -45
  280. package/es/ae/universal.mjs.map +0 -1
  281. package/es/ae/wallet.mjs +0 -50
  282. package/es/ae/wallet.mjs.map +0 -1
  283. package/es/amount-formatter.d.ts +0 -58
  284. package/es/bignumber.d.ts +0 -18
  285. package/es/chain/index.mjs +0 -272
  286. package/es/chain/index.mjs.map +0 -1
  287. package/es/chain/node.mjs +0 -442
  288. package/es/chain/node.mjs.map +0 -1
  289. package/es/contract/compiler.mjs +0 -115
  290. package/es/contract/compiler.mjs.map +0 -1
  291. package/es/contract/ga/helpers.mjs +0 -30
  292. package/es/contract/ga/helpers.mjs.map +0 -1
  293. package/es/contract/ga/index.mjs +0 -178
  294. package/es/contract/ga/index.mjs.map +0 -1
  295. package/es/crypto-ts.d.ts +0 -9
  296. package/es/encoder.d.ts +0 -26
  297. package/es/node-pool/index.mjs +0 -188
  298. package/es/node-pool/index.mjs.map +0 -1
  299. package/es/node.mjs +0 -133
  300. package/es/node.mjs.map +0 -1
  301. package/es/other.d.ts +0 -31
  302. package/es/string.d.ts +0 -26
  303. package/es/tx/tx-object.mjs +0 -283
  304. package/es/tx/tx-object.mjs.map +0 -1
  305. package/es/tx/tx.mjs +0 -938
  306. package/es/tx/tx.mjs.map +0 -1
  307. package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs +0 -132
  308. package/es/utils/aepp-wallet-communication/connection/browser-runtime.mjs.map +0 -1
  309. package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs +0 -183
  310. package/es/utils/aepp-wallet-communication/connection/browser-window-message.mjs.map +0 -1
  311. package/es/utils/aepp-wallet-communication/connection/index.mjs +0 -87
  312. package/es/utils/aepp-wallet-communication/connection/index.mjs.map +0 -1
  313. package/es/utils/aepp-wallet-communication/content-script-bridge.mjs +0 -98
  314. package/es/utils/aepp-wallet-communication/content-script-bridge.mjs.map +0 -1
  315. package/es/utils/aepp-wallet-communication/helpers.mjs +0 -92
  316. package/es/utils/aepp-wallet-communication/helpers.mjs.map +0 -1
  317. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs +0 -375
  318. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.mjs.map +0 -1
  319. package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs +0 -275
  320. package/es/utils/aepp-wallet-communication/rpc/rpc-client.mjs.map +0 -1
  321. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs +0 -541
  322. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.mjs.map +0 -1
  323. package/es/utils/aepp-wallet-communication/schema.mjs +0 -102
  324. package/es/utils/aepp-wallet-communication/schema.mjs.map +0 -1
  325. package/es/utils/aepp-wallet-communication/wallet-detector.mjs +0 -110
  326. package/es/utils/aepp-wallet-communication/wallet-detector.mjs.map +0 -1
  327. package/es/utils/async-init.mjs +0 -64
  328. package/es/utils/async-init.mjs.map +0 -1
  329. package/es/utils/crypto-ts.mjs.map +0 -1
  330. package/es/utils/swagger.mjs +0 -164
  331. package/es/utils/swagger.mjs.map +0 -1
  332. package/src/account/base.js +0 -153
  333. package/src/account/memory.js +0 -83
  334. package/src/account/multiple.js +0 -162
  335. package/src/ae/aens.js +0 -361
  336. package/src/ae/aepp.js +0 -45
  337. package/src/ae/contract.js +0 -148
  338. package/src/ae/index.js +0 -168
  339. package/src/ae/oracle.js +0 -311
  340. package/src/ae/universal.js +0 -47
  341. package/src/ae/wallet.js +0 -50
  342. package/src/chain/index.js +0 -269
  343. package/src/chain/node.js +0 -320
  344. package/src/channel/index.js +0 -903
  345. package/src/channel/internal.js +0 -236
  346. package/src/contract/aci.js +0 -376
  347. package/src/contract/compiler.js +0 -100
  348. package/src/contract/ga/helpers.js +0 -19
  349. package/src/contract/ga/index.js +0 -150
  350. package/src/index.js +0 -89
  351. package/src/node-pool/index.js +0 -172
  352. package/src/node.js +0 -116
  353. package/src/tx/builder/field-types.js +0 -61
  354. package/src/tx/builder/helpers.js +0 -334
  355. package/src/tx/builder/index.js +0 -465
  356. package/src/tx/builder/schema.js +0 -1100
  357. package/src/tx/index.js +0 -301
  358. package/src/tx/tx-object.js +0 -187
  359. package/src/tx/tx.js +0 -631
  360. package/src/tx/validator.js +0 -181
  361. package/src/utils/aepp-wallet-communication/connection/browser-runtime.js +0 -119
  362. package/src/utils/aepp-wallet-communication/connection/browser-window-message.js +0 -165
  363. package/src/utils/aepp-wallet-communication/connection/index.js +0 -85
  364. package/src/utils/aepp-wallet-communication/content-script-bridge.js +0 -86
  365. package/src/utils/aepp-wallet-communication/helpers.js +0 -60
  366. package/src/utils/aepp-wallet-communication/rpc/aepp-rpc.js +0 -294
  367. package/src/utils/aepp-wallet-communication/rpc/rpc-client.js +0 -232
  368. package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +0 -401
  369. package/src/utils/aepp-wallet-communication/schema.ts +0 -80
  370. package/src/utils/aepp-wallet-communication/wallet-detector.js +0 -92
  371. package/src/utils/async-init.js +0 -45
  372. package/src/utils/crypto.js +0 -219
  373. package/src/utils/hd-wallet.js +0 -100
  374. package/src/utils/json-big.js +0 -26
  375. package/src/utils/keystore.js +0 -219
  376. package/src/utils/swagger.js +0 -156
@@ -0,0 +1 @@
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[]>;
@@ -2,19 +2,15 @@ import _buffer from "buffer";
2
2
  const {
3
3
  Buffer: _Buffer
4
4
  } = _buffer;
5
+ import _includesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/includes";
5
6
  import { verify, hash } from "../utils/crypto.mjs";
6
7
  import { encode, decode } from "./builder/helpers.mjs";
7
8
  import BigNumber from 'bignumber.js';
8
- import { MIN_GAS_PRICE, PROTOCOL_VM_ABI, TX_TYPE } from "./builder/schema.mjs";
9
- import { calculateFee, unpackTx } from "./builder/index.mjs";
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";
10
12
  import { UnsupportedProtocolError } from "../utils/errors.mjs";
11
- /**
12
- * Transaction validator
13
- * @module @aeternity/aepp-sdk/es/tx/validator
14
- * @export verifyTransaction
15
- * @example import { verifyTransaction } from '@aeternity/aepp-sdk'
16
- */
17
-
13
+ import { concatBuffers, isKeyOfObject } from "../utils/other.mjs";
18
14
  const validators = [(_ref, _ref2) => {
19
15
  let {
20
16
  encodedTx,
@@ -22,26 +18,25 @@ const validators = [(_ref, _ref2) => {
22
18
  } = _ref;
23
19
  let {
24
20
  account,
25
- node,
21
+ nodeNetworkId,
26
22
  parentTxTypes
27
23
  } = _ref2;
28
24
  if ((encodedTx !== null && encodedTx !== void 0 ? encodedTx : signatures) === undefined) return [];
25
+ if (account == null) return [];
29
26
  if (signatures.length !== 1) return []; // TODO: Support multisignature?
30
27
 
31
- const prefix = _Buffer.from([node.nodeNetworkId, ...(parentTxTypes.includes(TX_TYPE.payingFor) ? ['inner_tx'] : [])].join('-'));
32
-
33
- const txWithNetworkId = _Buffer.concat([prefix, encodedTx.rlpEncoded]);
34
-
35
- const txHashWithNetworkId = _Buffer.concat([prefix, hash(encodedTx.rlpEncoded)]);
28
+ const prefix = _Buffer.from([nodeNetworkId, ...(_includesInstanceProperty(parentTxTypes).call(parentTxTypes, TX_TYPE.payingFor) ? ['inner_tx'] : [])].join('-'));
36
29
 
37
- const decodedPub = decode(account.id, 'ak');
30
+ const txWithNetworkId = concatBuffers([prefix, encodedTx.rlpEncoded]);
31
+ const txHashWithNetworkId = concatBuffers([prefix, hash(encodedTx.rlpEncoded)]);
32
+ const decodedPub = decode(account.id);
38
33
  if (verify(txWithNetworkId, signatures[0], decodedPub) || verify(txHashWithNetworkId, signatures[0], decodedPub)) return [];
39
34
  return [{
40
35
  message: 'Signature cannot be verified, please ensure that you transaction have' + ' the correct prefix and the correct private key for the sender address',
41
36
  key: 'InvalidSignature',
42
37
  checkedKeys: ['encodedTx', 'signatures']
43
38
  }];
44
- }, (_ref3, _ref4) => {
39
+ }, async (_ref3, _ref4) => {
45
40
  let {
46
41
  encodedTx,
47
42
  tx
@@ -52,21 +47,19 @@ const validators = [(_ref, _ref2) => {
52
47
  txType
53
48
  } = _ref4;
54
49
  if ((encodedTx !== null && encodedTx !== void 0 ? encodedTx : tx) === undefined) return [];
55
- return verifyTransaction(encode((encodedTx !== null && encodedTx !== void 0 ? encodedTx : tx).rlpEncoded, 'tx'), node, [...parentTxTypes, txType]);
50
+ return await verifyTransaction(encode((encodedTx !== null && encodedTx !== void 0 ? encodedTx : tx).rlpEncoded, 'tx'), node, [...parentTxTypes, txType]);
56
51
  }, (tx, _ref5) => {
57
52
  let {
58
53
  txType
59
54
  } = _ref5;
60
55
  if (tx.fee === undefined) return [];
61
- const minFee = calculateFee(0, txType, {
62
- gas: +tx.gas || 0,
56
+ const minFee = calculateMinFee(txType, {
63
57
  params: tx,
64
- showWarning: false,
65
58
  vsn: tx.VSN
66
59
  });
67
- if (new BigNumber(minFee).lte(tx.fee)) return [];
60
+ if (minFee.lte(tx.fee)) return [];
68
61
  return [{
69
- message: `Fee ${tx.fee} is too low, minimum fee for this transaction is ${minFee}`,
62
+ message: `Fee ${tx.fee} is too low, minimum fee for this transaction is ${minFee.toString()}`,
70
63
  key: 'InsufficientFee',
71
64
  checkedKeys: ['fee']
72
65
  }];
@@ -86,7 +79,7 @@ const validators = [(_ref, _ref2) => {
86
79
  checkedKeys: ['ttl']
87
80
  }];
88
81
  }, (_ref8, _ref9) => {
89
- var _ref10;
82
+ var _ref10, _fee;
90
83
 
91
84
  let {
92
85
  amount,
@@ -99,11 +92,13 @@ const validators = [(_ref, _ref2) => {
99
92
  parentTxTypes,
100
93
  txType
101
94
  } = _ref9;
95
+ if (account == null) return [];
102
96
  if (((_ref10 = amount !== null && amount !== void 0 ? amount : fee) !== null && _ref10 !== void 0 ? _ref10 : nameFee) === undefined) return [];
103
- const cost = new BigNumber(fee).plus(nameFee || 0).plus(amount || 0).plus(txType === TX_TYPE.payingFor ? tx.tx.encodedTx.tx.fee : 0).minus(parentTxTypes.includes(TX_TYPE.payingFor) ? fee : 0);
104
- if (cost.lte(account.balance)) 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 [];
105
100
  return [{
106
- message: `Account balance ${account.balance} is not enough to execute the transaction that costs ${cost.toFixed()}`,
101
+ message: `Account balance ${account.balance.toString()} is not enough to execute the transaction that costs ${cost.toFixed()}`,
107
102
  key: 'InsufficientBalance',
108
103
  checkedKeys: ['amount', 'fee', 'nameFee']
109
104
  }];
@@ -115,7 +110,7 @@ const validators = [(_ref, _ref2) => {
115
110
  account,
116
111
  parentTxTypes
117
112
  } = _ref12;
118
- if (nonce === undefined || parentTxTypes.includes(TX_TYPE.gaMeta)) return [];
113
+ if (nonce == null || account == null || _includesInstanceProperty(parentTxTypes).call(parentTxTypes, TX_TYPE.gaMeta)) return [];
119
114
  nonce = +nonce;
120
115
  const validNonce = account.nonce + 1;
121
116
  if (nonce === validNonce) return [];
@@ -128,41 +123,33 @@ const validators = [(_ref, _ref2) => {
128
123
  }),
129
124
  checkedKeys: ['nonce']
130
125
  }];
131
- }, _ref13 => {
132
- let {
133
- gasPrice
134
- } = _ref13;
135
- if (gasPrice === undefined) return [];
136
- if (gasPrice >= MIN_GAS_PRICE) return [];
137
- return [{
138
- message: `Gas price ${gasPrice} must be bigger then ${MIN_GAS_PRICE}`,
139
- key: 'MinGasPrice',
140
- checkedKeys: ['gasPrice']
141
- }];
142
- }, (_ref14, _ref15) => {
126
+ }, (_ref13, _ref14) => {
143
127
  let {
144
128
  ctVersion,
145
129
  abiVersion
146
- } = _ref14;
130
+ } = _ref13;
147
131
  let {
148
132
  txType,
149
- node
150
- } = _ref15;
151
- const {
152
133
  consensusProtocolVersion
153
- } = node.getNodeInfo();
154
- const protocol = PROTOCOL_VM_ABI[consensusProtocolVersion];
155
- if (!protocol) throw new UnsupportedProtocolError(`Unsupported protocol: ${consensusProtocolVersion}`); // If not contract create tx
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
156
141
 
157
- if (!ctVersion) ctVersion = {
142
+ if (ctVersion == null) ctVersion = {
158
143
  abiVersion
159
144
  };
160
145
  const txProtocol = protocol[txType];
161
- if (!txProtocol) return [];
146
+ if (txProtocol == null) return [];
147
+
148
+ if (Object.entries(ctVersion).some(_ref15 => {
149
+ var _context;
162
150
 
163
- if (Object.entries(ctVersion).some(_ref16 => {
164
- let [key, value] = _ref16;
165
- return !txProtocol[key].includes(+value);
151
+ let [key, value] = _ref15;
152
+ return !_includesInstanceProperty(_context = txProtocol[key]).call(_context, +value);
166
153
  })) {
167
154
  return [{
168
155
  message: `ABI/VM version ${JSON.stringify(ctVersion)} is wrong, supported is: ${JSON.stringify(txProtocol)}`,
@@ -172,20 +159,21 @@ const validators = [(_ref, _ref2) => {
172
159
  }
173
160
 
174
161
  return [];
175
- }, async (_ref17, _ref18) => {
162
+ }, async (_ref16, _ref17) => {
176
163
  let {
177
164
  contractId
178
- } = _ref17;
165
+ } = _ref16;
179
166
  let {
180
167
  txType,
181
168
  node
182
- } = _ref18;
169
+ } = _ref17;
183
170
  if (TX_TYPE.contractCall !== txType) return [];
171
+ contractId = contractId;
184
172
 
185
173
  try {
186
174
  const {
187
175
  active
188
- } = await node.api.getContract(contractId);
176
+ } = await node.getContract(contractId);
189
177
  if (active) return [];
190
178
  return [{
191
179
  message: `Contract ${contractId} is not active`,
@@ -193,29 +181,26 @@ const validators = [(_ref, _ref2) => {
193
181
  checkedKeys: ['contractId']
194
182
  }];
195
183
  } catch (error) {
196
- var _error$response, _error$response$body;
184
+ var _error$response, _error$response$parse;
197
185
 
198
- if (!((_error$response = error.response) !== null && _error$response !== void 0 && (_error$response$body = _error$response.body) !== null && _error$response$body !== void 0 && _error$response$body.reason)) throw error;
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;
199
187
  return [{
200
- message: error.response.body.reason,
188
+ message: error.response.parsedBody.reason,
201
189
  key: 'ContractNotFound',
202
190
  checkedKeys: ['contractId']
203
191
  }];
204
192
  }
205
193
  }];
206
194
 
207
- const getSenderAddress = tx => ['senderId', 'accountId', 'ownerId', 'callerId', 'oracleId', 'fromId', 'initiator', 'gaId', 'payerId'].map(key => tx[key]).filter(a => a).map(a => a.replace(/^ok_/, 'ak_'))[0];
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];
208
196
  /**
209
197
  * Transaction Validator
210
198
  * This function validates some of transaction properties,
211
199
  * to make sure it can be posted it to the chain
212
- * @function
213
- * @alias module:@aeternity/aepp-sdk/es/tx/validator
214
- * @rtype (tx: String, node) => void
215
- * @param {String} transaction Base64Check-encoded transaction
216
- * @param {Object} node Node to validate transaction against
217
- * @param {String[]} [parentTxTypes] Types of parent transactions
218
- * @return {Promise<Object[]>} Array with verification errors
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
219
204
  * @example const errors = await verifyTransaction(transaction, node)
220
205
  */
221
206
 
@@ -228,19 +213,27 @@ export default async function verifyTransaction(transaction, node) {
228
213
  tx,
229
214
  txType
230
215
  } = unpackTx(transaction);
231
- const address = (_getSenderAddress = getSenderAddress(tx)) !== null && _getSenderAddress !== void 0 ? _getSenderAddress : txType === TX_TYPE.signed ? getSenderAddress(tx.encodedTx.tx) : null;
216
+ const address = (_getSenderAddress = getSenderAddress(tx)) !== null && _getSenderAddress !== void 0 ? _getSenderAddress : txType === TX_TYPE.signed ? getSenderAddress(tx.encodedTx.tx) : undefined;
232
217
  const [account, {
233
218
  height
234
- }] = await Promise.all([address && node.api.getAccountByPubkey(address).catch(() => ({
219
+ }, {
220
+ consensusProtocolVersion,
221
+ nodeNetworkId
222
+ }] = await Promise.all([address == null ? undefined : node.getAccountByPubkey(address).catch(() => ({
235
223
  id: address,
236
- balance: new BigNumber(0),
224
+ balance: 0n,
237
225
  nonce: 0
238
- })), node.api.getCurrentKeyBlockHeight()]);
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()]);
239
230
  return (await Promise.all(validators.map(v => v(tx, {
240
231
  txType,
241
232
  node,
242
233
  account,
243
234
  height,
235
+ consensusProtocolVersion,
236
+ nodeNetworkId,
244
237
  parentTxTypes
245
238
  })))).flat();
246
239
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/tx/validator.js"],"names":["verify","hash","encode","decode","BigNumber","MIN_GAS_PRICE","PROTOCOL_VM_ABI","TX_TYPE","calculateFee","unpackTx","UnsupportedProtocolError","validators","encodedTx","signatures","account","node","parentTxTypes","undefined","length","prefix","from","nodeNetworkId","includes","payingFor","join","txWithNetworkId","concat","rlpEncoded","txHashWithNetworkId","decodedPub","id","message","key","checkedKeys","tx","txType","verifyTransaction","fee","minFee","gas","params","showWarning","vsn","VSN","lte","ttl","height","amount","nameFee","cost","plus","minus","balance","toFixed","nonce","gaMeta","validNonce","gasPrice","ctVersion","abiVersion","consensusProtocolVersion","getNodeInfo","protocol","txProtocol","Object","entries","some","value","JSON","stringify","contractId","contractCall","active","api","getContract","error","response","body","reason","getSenderAddress","map","filter","a","replace","transaction","address","signed","Promise","all","getAccountByPubkey","catch","getCurrentKeyBlockHeight","v","flat"],"mappings":"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","sourcesContent":["import { verify, hash } from '../utils/crypto'\nimport { encode, decode } from './builder/helpers'\n\nimport BigNumber from 'bignumber.js'\nimport { MIN_GAS_PRICE, PROTOCOL_VM_ABI, TX_TYPE } from './builder/schema'\nimport { calculateFee, unpackTx } from './builder'\nimport { UnsupportedProtocolError } from '../utils/errors'\n\n/**\n * Transaction validator\n * @module @aeternity/aepp-sdk/es/tx/validator\n * @export verifyTransaction\n * @example import { verifyTransaction } from '@aeternity/aepp-sdk'\n */\n\nconst validators = [\n ({ encodedTx, signatures }, { account, node, parentTxTypes }) => {\n if ((encodedTx ?? signatures) === undefined) return []\n if (signatures.length !== 1) return [] // TODO: Support multisignature?\n const prefix = Buffer.from([\n node.nodeNetworkId,\n ...parentTxTypes.includes(TX_TYPE.payingFor) ? ['inner_tx'] : []\n ].join('-'))\n const txWithNetworkId = Buffer.concat([prefix, encodedTx.rlpEncoded])\n const txHashWithNetworkId = Buffer.concat([prefix, hash(encodedTx.rlpEncoded)])\n const decodedPub = decode(account.id, 'ak')\n if (verify(txWithNetworkId, signatures[0], decodedPub) ||\n verify(txHashWithNetworkId, signatures[0], decodedPub)) return []\n return [{\n message: 'Signature cannot be verified, please ensure that you transaction have' +\n ' the correct prefix and the correct private key for the sender address',\n key: 'InvalidSignature',\n checkedKeys: ['encodedTx', 'signatures']\n }]\n },\n ({ encodedTx, tx }, { node, parentTxTypes, txType }) => {\n if ((encodedTx ?? tx) === undefined) return []\n return verifyTransaction(\n encode((encodedTx ?? tx).rlpEncoded, 'tx'),\n node,\n [...parentTxTypes, txType]\n )\n },\n (tx, { txType }) => {\n if (tx.fee === undefined) return []\n const minFee = calculateFee(0, txType, {\n gas: +tx.gas || 0, params: tx, showWarning: false, vsn: tx.VSN\n })\n if (new BigNumber(minFee).lte(tx.fee)) return []\n return [{\n message: `Fee ${tx.fee} is too low, minimum fee for this transaction is ${minFee}`,\n key: 'InsufficientFee',\n checkedKeys: ['fee']\n }]\n },\n ({ ttl }, { height }) => {\n if (ttl === undefined) return []\n ttl = +ttl\n if (ttl === 0 || ttl >= height) return []\n return [{\n message: `TTL ${ttl} is already expired, current height is ${height}`,\n key: 'ExpiredTTL',\n checkedKeys: ['ttl']\n }]\n },\n ({ amount, fee, nameFee, tx }, { account, parentTxTypes, txType }) => {\n if ((amount ?? fee ?? nameFee) === undefined) return []\n const cost = new BigNumber(fee).plus(nameFee || 0).plus(amount || 0)\n .plus(txType === TX_TYPE.payingFor ? tx.tx.encodedTx.tx.fee : 0)\n .minus(parentTxTypes.includes(TX_TYPE.payingFor) ? fee : 0)\n if (cost.lte(account.balance)) return []\n return [{\n message: `Account balance ${account.balance} is not enough to execute the transaction that costs ${cost.toFixed()}`,\n key: 'InsufficientBalance',\n checkedKeys: ['amount', 'fee', 'nameFee']\n }]\n },\n ({ nonce }, { account, parentTxTypes }) => {\n if (nonce === undefined || parentTxTypes.includes(TX_TYPE.gaMeta)) return []\n nonce = +nonce\n const validNonce = account.nonce + 1\n if (nonce === validNonce) return []\n return [{\n ...nonce < validNonce\n ? {\n message: `Nonce ${nonce} is already used, valid nonce is ${validNonce}`,\n key: 'NonceAlreadyUsed'\n }\n : {\n message: `Nonce ${nonce} is too high, valid nonce is ${validNonce}`,\n key: 'NonceHigh'\n },\n checkedKeys: ['nonce']\n }]\n },\n ({ gasPrice }) => {\n if (gasPrice === undefined) return []\n if (gasPrice >= MIN_GAS_PRICE) return []\n return [{\n message: `Gas price ${gasPrice} must be bigger then ${MIN_GAS_PRICE}`,\n key: 'MinGasPrice',\n checkedKeys: ['gasPrice']\n }]\n },\n ({ ctVersion, abiVersion }, { txType, node }) => {\n const { consensusProtocolVersion } = node.getNodeInfo()\n const protocol = PROTOCOL_VM_ABI[consensusProtocolVersion]\n if (!protocol) throw new UnsupportedProtocolError(`Unsupported protocol: ${consensusProtocolVersion}`)\n // If not contract create tx\n if (!ctVersion) ctVersion = { abiVersion }\n const txProtocol = protocol[txType]\n if (!txProtocol) return []\n if (Object.entries(ctVersion).some(([key, value]) => !txProtocol[key].includes(+value))) {\n return [{\n message: `ABI/VM version ${JSON.stringify(ctVersion)} is wrong, supported is: ${JSON.stringify(txProtocol)}`,\n key: 'VmAndAbiVersionMismatch',\n checkedKeys: ['ctVersion', 'abiVersion']\n }]\n }\n return []\n },\n async ({ contractId }, { txType, node }) => {\n if (TX_TYPE.contractCall !== txType) return []\n try {\n const { active } = await node.api.getContract(contractId)\n if (active) return []\n return [{\n message: `Contract ${contractId} is not active`,\n key: 'ContractNotActive',\n checkedKeys: ['contractId']\n }]\n } catch (error) {\n if (!error.response?.body?.reason) throw error\n return [{\n message: error.response.body.reason,\n key: 'ContractNotFound',\n checkedKeys: ['contractId']\n }]\n }\n }\n]\n\nconst getSenderAddress = tx => [\n 'senderId', 'accountId', 'ownerId', 'callerId',\n 'oracleId', 'fromId', 'initiator', 'gaId', 'payerId'\n]\n .map(key => tx[key])\n .filter(a => a)\n .map(a => a.replace(/^ok_/, 'ak_'))[0]\n\n/**\n * Transaction Validator\n * This function validates some of transaction properties,\n * to make sure it can be posted it to the chain\n * @function\n * @alias module:@aeternity/aepp-sdk/es/tx/validator\n * @rtype (tx: String, node) => void\n * @param {String} transaction Base64Check-encoded transaction\n * @param {Object} node Node to validate transaction against\n * @param {String[]} [parentTxTypes] Types of parent transactions\n * @return {Promise<Object[]>} Array with verification errors\n * @example const errors = await verifyTransaction(transaction, node)\n */\nexport default async function verifyTransaction (transaction, node, parentTxTypes = []) {\n const { tx, txType } = unpackTx(transaction)\n\n const address = getSenderAddress(tx) ??\n (txType === TX_TYPE.signed ? getSenderAddress(tx.encodedTx.tx) : null)\n const [account, { height }] = await Promise.all([\n address && node.api.getAccountByPubkey(address).catch(() => ({\n id: address,\n balance: new BigNumber(0),\n nonce: 0\n })),\n node.api.getCurrentKeyBlockHeight()\n ])\n\n return (await Promise.all(\n validators.map(v => v(tx, { txType, node, account, height, parentTxTypes })))\n ).flat()\n}\n"],"file":"validator.mjs"}
1
+ {"version":3,"file":"validator.mjs","names":["verify","hash","encode","decode","BigNumber","PROTOCOL_VM_ABI","TX_TYPE","unpackTx","calculateMinFee","UnsupportedProtocolError","concatBuffers","isKeyOfObject","validators","encodedTx","signatures","account","nodeNetworkId","parentTxTypes","undefined","length","prefix","from","payingFor","join","txWithNetworkId","rlpEncoded","txHashWithNetworkId","decodedPub","id","message","key","checkedKeys","tx","node","txType","verifyTransaction","fee","minFee","params","vsn","VSN","lte","toString","ttl","height","amount","nameFee","cost","plus","minus","balance","toFixed","nonce","gaMeta","validNonce","ctVersion","abiVersion","consensusProtocolVersion","protocol","txProtocol","Object","entries","some","value","JSON","stringify","contractId","contractCall","active","getContract","error","response","parsedBody","reason","getSenderAddress","map","filter","a","replace","transaction","address","signed","Promise","all","getAccountByPubkey","catch","then","acc","getCurrentKeyBlockHeight","getNodeInfo","v","flat"],"sources":["../../src/tx/validator.ts"],"sourcesContent":["import { verify, hash } from '../utils/crypto'\nimport { encode, decode } from './builder/helpers'\nimport BigNumber from 'bignumber.js'\nimport {\n PROTOCOL_VM_ABI, RawTxObject, TxSchema, TxParamsCommon, TX_TYPE, TxTypeSchemas, CtVersion\n} from './builder/schema'\nimport { TxUnpacked, unpackTx } from './builder'\nimport calculateMinFee from './min-fee'\nimport { UnsupportedProtocolError } from '../utils/errors'\nimport { concatBuffers, isKeyOfObject } from '../utils/other'\nimport { EncodedData } from '../utils/encoder'\nimport Node from '../Node'\n\ninterface Account {\n balance: bigint\n id: EncodedData<'ak'>\n nonce: number\n}\n\nexport interface ValidatorResult {\n message: string\n key: string\n checkedKeys: string[]\n}\n\ntype Validator = (\n tx: {\n encodedTx: TxUnpacked<TxSchema>\n signatures: Buffer[]\n tx: TxUnpacked<TxSchema> & {\n tx: TxTypeSchemas[TX_TYPE.signed]\n }\n nonce?: number\n ttl?: number\n amount?: number\n fee?: number\n nameFee?: number\n ctVersion?: Partial<CtVersion>\n abiVersion?: number\n contractId?: EncodedData<'ct'>\n },\n options: {\n account?: Account\n nodeNetworkId: string\n parentTxTypes: TX_TYPE[]\n node: Node\n txType: TX_TYPE\n height: number\n consensusProtocolVersion: number\n }\n) => ValidatorResult[] | Promise<ValidatorResult[]>\n\nconst validators: Validator[] = [\n ({ encodedTx, signatures }, { account, nodeNetworkId, parentTxTypes }) => {\n if ((encodedTx ?? signatures) === undefined) return []\n if (account == null) return []\n if (signatures.length !== 1) return [] // TODO: Support multisignature?\n const prefix = Buffer.from([\n nodeNetworkId,\n ...parentTxTypes.includes(TX_TYPE.payingFor) ? ['inner_tx'] : []\n ].join('-'))\n const txWithNetworkId = concatBuffers([prefix, encodedTx.rlpEncoded])\n const txHashWithNetworkId = concatBuffers([prefix, hash(encodedTx.rlpEncoded)])\n const decodedPub = decode(account.id)\n if (verify(txWithNetworkId, signatures[0], decodedPub) ||\n verify(txHashWithNetworkId, signatures[0], decodedPub)) return []\n return [{\n message: 'Signature cannot be verified, please ensure that you transaction have' +\n ' the correct prefix and the correct private key for the sender address',\n key: 'InvalidSignature',\n checkedKeys: ['encodedTx', 'signatures']\n }]\n },\n async ({ encodedTx, tx }, { node, parentTxTypes, txType }) => {\n if ((encodedTx ?? tx) === undefined) return []\n return await verifyTransaction(\n encode((encodedTx ?? tx).rlpEncoded, 'tx'),\n node,\n [...parentTxTypes, txType]\n )\n },\n (tx: any, { txType }) => {\n if (tx.fee === undefined) return []\n const minFee = calculateMinFee(txType, { params: tx, vsn: tx.VSN })\n if (minFee.lte(tx.fee)) return []\n return [{\n message: `Fee ${tx.fee as string} is too low, minimum fee for this transaction is ${minFee.toString()}`,\n key: 'InsufficientFee',\n checkedKeys: ['fee']\n }]\n },\n ({ ttl }, { height }) => {\n if (ttl === undefined) return []\n ttl = +ttl\n if (ttl === 0 || ttl >= height) return []\n return [{\n message: `TTL ${ttl} is already expired, current height is ${height}`,\n key: 'ExpiredTTL',\n checkedKeys: ['ttl']\n }]\n },\n ({ amount, fee, nameFee, tx }, { account, parentTxTypes, txType }) => {\n if (account == null) return []\n if ((amount ?? fee ?? nameFee) === undefined) return []\n fee ??= 0\n const cost = new BigNumber(fee).plus(nameFee ?? 0).plus(amount ?? 0)\n .plus(txType === TX_TYPE.payingFor ? (tx.tx.encodedTx.tx).fee : 0)\n .minus(parentTxTypes.includes(TX_TYPE.payingFor) ? fee : 0)\n if (cost.lte(account.balance.toString())) return []\n return [{\n message: `Account balance ${account.balance.toString()} is not enough to execute the transaction that costs ${cost.toFixed()}`,\n key: 'InsufficientBalance',\n checkedKeys: ['amount', 'fee', 'nameFee']\n }]\n },\n ({ nonce }, { account, parentTxTypes }) => {\n if (nonce == null || account == null || parentTxTypes.includes(TX_TYPE.gaMeta)) return []\n nonce = +nonce\n const validNonce = account.nonce + 1\n if (nonce === validNonce) return []\n return [{\n ...nonce < validNonce\n ? {\n message: `Nonce ${nonce} is already used, valid nonce is ${validNonce}`,\n key: 'NonceAlreadyUsed'\n }\n : {\n message: `Nonce ${nonce} is too high, valid nonce is ${validNonce}`,\n key: 'NonceHigh'\n },\n checkedKeys: ['nonce']\n }]\n },\n ({ ctVersion, abiVersion }, { txType, consensusProtocolVersion }) => {\n if (!isKeyOfObject(consensusProtocolVersion, PROTOCOL_VM_ABI)) {\n throw new UnsupportedProtocolError(`Unsupported protocol: ${consensusProtocolVersion}`)\n }\n const protocol = PROTOCOL_VM_ABI[consensusProtocolVersion]\n\n // If not contract create tx\n if (ctVersion == null) ctVersion = { abiVersion }\n const txProtocol = protocol[txType as keyof typeof protocol]\n if (txProtocol == null) return []\n if (Object.entries(ctVersion).some(\n ([\n key,\n value\n ]: [\n key:keyof typeof txProtocol,\n value:any]) => !(txProtocol[key].includes(+value as never)))) {\n return [{\n message: `ABI/VM version ${JSON.stringify(ctVersion)} is wrong, supported is: ${JSON.stringify(txProtocol)}`,\n key: 'VmAndAbiVersionMismatch',\n checkedKeys: ['ctVersion', 'abiVersion']\n }]\n }\n return []\n },\n async ({ contractId }, { txType, node }) => {\n if (TX_TYPE.contractCall !== txType) return []\n contractId = contractId as EncodedData<'ct'>\n try {\n const { active } = await node.getContract(contractId)\n if (active) return []\n return [{\n message: `Contract ${contractId} is not active`,\n key: 'ContractNotActive',\n checkedKeys: ['contractId']\n }]\n } catch (error) {\n if (error.response?.parsedBody?.reason == null) throw error\n return [{\n message: error.response.parsedBody.reason,\n key: 'ContractNotFound',\n checkedKeys: ['contractId']\n }]\n }\n }\n]\n\nconst getSenderAddress = (\n tx: TxParamsCommon | RawTxObject<TxSchema>\n): EncodedData<'ak'> | undefined => [\n 'senderId', 'accountId', 'ownerId', 'callerId',\n 'oracleId', 'fromId', 'initiator', 'gaId', 'payerId'\n]\n .map((key: keyof TxSchema) => tx[key])\n .filter(a => a)\n .map((a) => a?.toString().replace(/^ok_/, 'ak_'))[0] as EncodedData<'ak'> | undefined\n\n/**\n * Transaction Validator\n * This function validates some of transaction properties,\n * to make sure it can be posted it to the chain\n * @param transaction - Base64Check-encoded transaction\n * @param node - Node to validate transaction against\n * @param parentTxTypes - Types of parent transactions\n * @returns Array with verification errors\n * @example const errors = await verifyTransaction(transaction, node)\n */\nexport default async function verifyTransaction (\n transaction: EncodedData<'tx' | 'pi'>,\n node: Node,\n parentTxTypes: TX_TYPE[] = []\n): Promise<ValidatorResult[]> {\n const { tx, txType } = unpackTx<TX_TYPE.signed>(transaction)\n const address = getSenderAddress(tx) ??\n (txType === TX_TYPE.signed ? getSenderAddress(tx.encodedTx.tx) : undefined)\n const [account, { height }, { consensusProtocolVersion, nodeNetworkId }] = await Promise.all([\n address == null\n ? undefined\n : node.getAccountByPubkey(address)\n .catch(() => ({ id: address, balance: 0n, nonce: 0 }))\n // TODO: remove after fixing https://github.com/aeternity/aepp-sdk-js/issues/1537\n .then(acc => ({ ...acc, id: acc.id as EncodedData<'ak'> })),\n node.getCurrentKeyBlockHeight(),\n node.getNodeInfo()\n ])\n\n return (await Promise.all(\n validators.map(v => v(\n tx as any,\n { txType, node, account, height, consensusProtocolVersion, nodeNetworkId, parentTxTypes }\n ))\n )).flat()\n}\n"],"mappings":";;;;;SAASA,M,EAAQC,I;SACRC,M,EAAQC,M;AACjB,OAAOC,SAAP,MAAsB,cAAtB;SAEEC,e,EAAwDC,O;SAErCC,Q;OACdC,e;SACEC,wB;SACAC,a,EAAeC,a;AA2CxB,MAAMC,UAAuB,GAAG,CAC9B,iBAA0E;EAAA,IAAzE;IAAEC,SAAF;IAAaC;EAAb,CAAyE;EAAA,IAA9C;IAAEC,OAAF;IAAWC,aAAX;IAA0BC;EAA1B,CAA8C;EACxE,IAAI,CAACJ,SAAD,aAACA,SAAD,cAACA,SAAD,GAAcC,UAAd,MAA8BI,SAAlC,EAA6C,OAAO,EAAP;EAC7C,IAAIH,OAAO,IAAI,IAAf,EAAqB,OAAO,EAAP;EACrB,IAAID,UAAU,CAACK,MAAX,KAAsB,CAA1B,EAA6B,OAAO,EAAP,CAH2C,CAGjC;;EACvC,MAAMC,MAAM,GAAG,QAAOC,IAAP,CAAY,CACzBL,aADyB,EAEzB,IAAG,0BAAAC,aAAa,MAAb,CAAAA,aAAa,EAAUX,OAAO,CAACgB,SAAlB,CAAb,GAA4C,CAAC,UAAD,CAA5C,GAA2D,EAA9D,CAFyB,EAGzBC,IAHyB,CAGpB,GAHoB,CAAZ,CAAf;;EAIA,MAAMC,eAAe,GAAGd,aAAa,CAAC,CAACU,MAAD,EAASP,SAAS,CAACY,UAAnB,CAAD,CAArC;EACA,MAAMC,mBAAmB,GAAGhB,aAAa,CAAC,CAACU,MAAD,EAASnB,IAAI,CAACY,SAAS,CAACY,UAAX,CAAb,CAAD,CAAzC;EACA,MAAME,UAAU,GAAGxB,MAAM,CAACY,OAAO,CAACa,EAAT,CAAzB;EACA,IAAI5B,MAAM,CAACwB,eAAD,EAAkBV,UAAU,CAAC,CAAD,CAA5B,EAAiCa,UAAjC,CAAN,IACF3B,MAAM,CAAC0B,mBAAD,EAAsBZ,UAAU,CAAC,CAAD,CAAhC,EAAqCa,UAArC,CADR,EAC0D,OAAO,EAAP;EAC1D,OAAO,CAAC;IACNE,OAAO,EAAE,0EACP,wEAFI;IAGNC,GAAG,EAAE,kBAHC;IAINC,WAAW,EAAE,CAAC,WAAD,EAAc,YAAd;EAJP,CAAD,CAAP;AAMD,CApB6B,EAqB9B,wBAA8D;EAAA,IAAvD;IAAElB,SAAF;IAAamB;EAAb,CAAuD;EAAA,IAApC;IAAEC,IAAF;IAAQhB,aAAR;IAAuBiB;EAAvB,CAAoC;EAC5D,IAAI,CAACrB,SAAD,aAACA,SAAD,cAACA,SAAD,GAAcmB,EAAd,MAAsBd,SAA1B,EAAqC,OAAO,EAAP;EACrC,OAAO,MAAMiB,iBAAiB,CAC5BjC,MAAM,CAAC,CAACW,SAAD,aAACA,SAAD,cAACA,SAAD,GAAcmB,EAAd,EAAkBP,UAAnB,EAA+B,IAA/B,CADsB,EAE5BQ,IAF4B,EAG5B,CAAC,GAAGhB,aAAJ,EAAmBiB,MAAnB,CAH4B,CAA9B;AAKD,CA5B6B,EA6B9B,CAACF,EAAD,YAAyB;EAAA,IAAf;IAAEE;EAAF,CAAe;EACvB,IAAIF,EAAE,CAACI,GAAH,KAAWlB,SAAf,EAA0B,OAAO,EAAP;EAC1B,MAAMmB,MAAM,GAAG7B,eAAe,CAAC0B,MAAD,EAAS;IAAEI,MAAM,EAAEN,EAAV;IAAcO,GAAG,EAAEP,EAAE,CAACQ;EAAtB,CAAT,CAA9B;EACA,IAAIH,MAAM,CAACI,GAAP,CAAWT,EAAE,CAACI,GAAd,CAAJ,EAAwB,OAAO,EAAP;EACxB,OAAO,CAAC;IACNP,OAAO,EAAG,OAAMG,EAAE,CAACI,GAAc,oDAAmDC,MAAM,CAACK,QAAP,EAAkB,EADhG;IAENZ,GAAG,EAAE,iBAFC;IAGNC,WAAW,EAAE,CAAC,KAAD;EAHP,CAAD,CAAP;AAKD,CAtC6B,EAuC9B,kBAAyB;EAAA,IAAxB;IAAEY;EAAF,CAAwB;EAAA,IAAf;IAAEC;EAAF,CAAe;EACvB,IAAID,GAAG,KAAKzB,SAAZ,EAAuB,OAAO,EAAP;EACvByB,GAAG,GAAG,CAACA,GAAP;EACA,IAAIA,GAAG,KAAK,CAAR,IAAaA,GAAG,IAAIC,MAAxB,EAAgC,OAAO,EAAP;EAChC,OAAO,CAAC;IACNf,OAAO,EAAG,OAAMc,GAAI,0CAAyCC,MAAO,EAD9D;IAENd,GAAG,EAAE,YAFC;IAGNC,WAAW,EAAE,CAAC,KAAD;EAHP,CAAD,CAAP;AAKD,CAhD6B,EAiD9B,kBAAsE;EAAA;;EAAA,IAArE;IAAEc,MAAF;IAAUT,GAAV;IAAeU,OAAf;IAAwBd;EAAxB,CAAqE;EAAA,IAAvC;IAAEjB,OAAF;IAAWE,aAAX;IAA0BiB;EAA1B,CAAuC;EACpE,IAAInB,OAAO,IAAI,IAAf,EAAqB,OAAO,EAAP;EACrB,IAAI,WAAC8B,MAAD,aAACA,MAAD,cAACA,MAAD,GAAWT,GAAX,2CAAkBU,OAAlB,MAA+B5B,SAAnC,EAA8C,OAAO,EAAP;EAC9C,QAAAkB,GAAG,UAAH,6BAAAA,GAAG,GAAK,CAAR;EACA,MAAMW,IAAI,GAAG,IAAI3C,SAAJ,CAAcgC,GAAd,EAAmBY,IAAnB,CAAwBF,OAAxB,aAAwBA,OAAxB,cAAwBA,OAAxB,GAAmC,CAAnC,EAAsCE,IAAtC,CAA2CH,MAA3C,aAA2CA,MAA3C,cAA2CA,MAA3C,GAAqD,CAArD,EACVG,IADU,CACLd,MAAM,KAAK5B,OAAO,CAACgB,SAAnB,GAAgCU,EAAE,CAACA,EAAH,CAAMnB,SAAN,CAAgBmB,EAAjB,CAAqBI,GAApD,GAA0D,CADrD,EAEVa,KAFU,CAEJ,0BAAAhC,aAAa,MAAb,CAAAA,aAAa,EAAUX,OAAO,CAACgB,SAAlB,CAAb,GAA4Cc,GAA5C,GAAkD,CAF9C,CAAb;EAGA,IAAIW,IAAI,CAACN,GAAL,CAAS1B,OAAO,CAACmC,OAAR,CAAgBR,QAAhB,EAAT,CAAJ,EAA0C,OAAO,EAAP;EAC1C,OAAO,CAAC;IACNb,OAAO,EAAG,mBAAkBd,OAAO,CAACmC,OAAR,CAAgBR,QAAhB,EAA2B,wDAAuDK,IAAI,CAACI,OAAL,EAAe,EADvH;IAENrB,GAAG,EAAE,qBAFC;IAGNC,WAAW,EAAE,CAAC,QAAD,EAAW,KAAX,EAAkB,SAAlB;EAHP,CAAD,CAAP;AAKD,CA9D6B,EA+D9B,oBAA2C;EAAA,IAA1C;IAAEqB;EAAF,CAA0C;EAAA,IAA/B;IAAErC,OAAF;IAAWE;EAAX,CAA+B;EACzC,IAAImC,KAAK,IAAI,IAAT,IAAiBrC,OAAO,IAAI,IAA5B,IAAoC,0BAAAE,aAAa,MAAb,CAAAA,aAAa,EAAUX,OAAO,CAAC+C,MAAlB,CAArD,EAAgF,OAAO,EAAP;EAChFD,KAAK,GAAG,CAACA,KAAT;EACA,MAAME,UAAU,GAAGvC,OAAO,CAACqC,KAAR,GAAgB,CAAnC;EACA,IAAIA,KAAK,KAAKE,UAAd,EAA0B,OAAO,EAAP;EAC1B,OAAO,CAAC,EACN,IAAGF,KAAK,GAAGE,UAAR,GACC;MACEzB,OAAO,EAAG,SAAQuB,KAAM,oCAAmCE,UAAW,EADxE;MAEExB,GAAG,EAAE;IAFP,CADD,GAKC;MACED,OAAO,EAAG,SAAQuB,KAAM,gCAA+BE,UAAW,EADpE;MAEExB,GAAG,EAAE;IAFP,CALJ,CADM;IAUNC,WAAW,EAAE,CAAC,OAAD;EAVP,CAAD,CAAP;AAYD,CAhF6B,EAiF9B,oBAAqE;EAAA,IAApE;IAAEwB,SAAF;IAAaC;EAAb,CAAoE;EAAA,IAAzC;IAAEtB,MAAF;IAAUuB;EAAV,CAAyC;;EACnE,IAAI,CAAC9C,aAAa,CAAC8C,wBAAD,EAA2BpD,eAA3B,CAAlB,EAA+D;IAC7D,MAAM,IAAII,wBAAJ,CAA8B,yBAAwBgD,wBAAyB,EAA/E,CAAN;EACD;;EACD,MAAMC,QAAQ,GAAGrD,eAAe,CAACoD,wBAAD,CAAhC,CAJmE,CAMnE;;EACA,IAAIF,SAAS,IAAI,IAAjB,EAAuBA,SAAS,GAAG;IAAEC;EAAF,CAAZ;EACvB,MAAMG,UAAU,GAAGD,QAAQ,CAACxB,MAAD,CAA3B;EACA,IAAIyB,UAAU,IAAI,IAAlB,EAAwB,OAAO,EAAP;;EACxB,IAAIC,MAAM,CAACC,OAAP,CAAeN,SAAf,EAA0BO,IAA1B,CACF;IAAA;;IAAA,IAAC,CACChC,GADD,EAECiC,KAFD,CAAD;IAAA,OAKiB,CAAE,qCAAAJ,UAAU,CAAC7B,GAAD,CAAV,iBAAyB,CAACiC,KAA1B,CALnB;EAAA,CADE,CAAJ,EAMkE;IAChE,OAAO,CAAC;MACNlC,OAAO,EAAG,kBAAiBmC,IAAI,CAACC,SAAL,CAAeV,SAAf,CAA0B,4BAA2BS,IAAI,CAACC,SAAL,CAAeN,UAAf,CAA2B,EADrG;MAEN7B,GAAG,EAAE,yBAFC;MAGNC,WAAW,EAAE,CAAC,WAAD,EAAc,YAAd;IAHP,CAAD,CAAP;EAKD;;EACD,OAAO,EAAP;AACD,CAzG6B,EA0G9B,0BAA4C;EAAA,IAArC;IAAEmC;EAAF,CAAqC;EAAA,IAArB;IAAEhC,MAAF;IAAUD;EAAV,CAAqB;EAC1C,IAAI3B,OAAO,CAAC6D,YAAR,KAAyBjC,MAA7B,EAAqC,OAAO,EAAP;EACrCgC,UAAU,GAAGA,UAAb;;EACA,IAAI;IACF,MAAM;MAAEE;IAAF,IAAa,MAAMnC,IAAI,CAACoC,WAAL,CAAiBH,UAAjB,CAAzB;IACA,IAAIE,MAAJ,EAAY,OAAO,EAAP;IACZ,OAAO,CAAC;MACNvC,OAAO,EAAG,YAAWqC,UAAW,gBAD1B;MAENpC,GAAG,EAAE,mBAFC;MAGNC,WAAW,EAAE,CAAC,YAAD;IAHP,CAAD,CAAP;EAKD,CARD,CAQE,OAAOuC,KAAP,EAAc;IAAA;;IACd,IAAI,oBAAAA,KAAK,CAACC,QAAN,6FAAgBC,UAAhB,gFAA4BC,MAA5B,KAAsC,IAA1C,EAAgD,MAAMH,KAAN;IAChD,OAAO,CAAC;MACNzC,OAAO,EAAEyC,KAAK,CAACC,QAAN,CAAeC,UAAf,CAA0BC,MAD7B;MAEN3C,GAAG,EAAE,kBAFC;MAGNC,WAAW,EAAE,CAAC,YAAD;IAHP,CAAD,CAAP;EAKD;AACF,CA7H6B,CAAhC;;AAgIA,MAAM2C,gBAAgB,GACpB1C,EADuB,IAEW,CAClC,UADkC,EACtB,WADsB,EACT,SADS,EACE,UADF,EAElC,UAFkC,EAEtB,QAFsB,EAEZ,WAFY,EAEC,MAFD,EAES,SAFT,EAIjC2C,GAJiC,CAI5B7C,GAAD,IAAyBE,EAAE,CAACF,GAAD,CAJE,EAKjC8C,MALiC,CAK1BC,CAAC,IAAIA,CALqB,EAMjCF,GANiC,CAM5BE,CAAD,IAAOA,CAAP,aAAOA,CAAP,uBAAOA,CAAC,CAAEnC,QAAH,GAAcoC,OAAd,CAAsB,MAAtB,EAA8B,KAA9B,CANsB,EAMgB,CANhB,CAFpC;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,eAAe,eAAe3C,iBAAf,CACb4C,WADa,EAEb9C,IAFa,EAIe;EAAA;;EAAA,IAD5BhB,aAC4B,uEADD,EACC;EAC5B,MAAM;IAAEe,EAAF;IAAME;EAAN,IAAiB3B,QAAQ,CAAiBwE,WAAjB,CAA/B;EACA,MAAMC,OAAO,wBAAGN,gBAAgB,CAAC1C,EAAD,CAAnB,iEACVE,MAAM,KAAK5B,OAAO,CAAC2E,MAAnB,GAA4BP,gBAAgB,CAAC1C,EAAE,CAACnB,SAAH,CAAamB,EAAd,CAA5C,GAAgEd,SADnE;EAEA,MAAM,CAACH,OAAD,EAAU;IAAE6B;EAAF,CAAV,EAAsB;IAAEa,wBAAF;IAA4BzC;EAA5B,CAAtB,IAAqE,MAAMkE,OAAO,CAACC,GAAR,CAAY,CAC3FH,OAAO,IAAI,IAAX,GACI9D,SADJ,GAEIe,IAAI,CAACmD,kBAAL,CAAwBJ,OAAxB,EACCK,KADD,CACO,OAAO;IAAEzD,EAAE,EAAEoD,OAAN;IAAe9B,OAAO,EAAE,EAAxB;IAA4BE,KAAK,EAAE;EAAnC,CAAP,CADP,EAEA;EAFA,CAGCkC,IAHD,CAGMC,GAAG,KAAK,EAAE,GAAGA,GAAL;IAAU3D,EAAE,EAAE2D,GAAG,CAAC3D;EAAlB,CAAL,CAHT,CAHuF,EAO3FK,IAAI,CAACuD,wBAAL,EAP2F,EAQ3FvD,IAAI,CAACwD,WAAL,EAR2F,CAAZ,CAAjF;EAWA,OAAO,CAAC,MAAMP,OAAO,CAACC,GAAR,CACZvE,UAAU,CAAC+D,GAAX,CAAee,CAAC,IAAIA,CAAC,CACnB1D,EADmB,EAEnB;IAAEE,MAAF;IAAUD,IAAV;IAAgBlB,OAAhB;IAAyB6B,MAAzB;IAAiCa,wBAAjC;IAA2DzC,aAA3D;IAA0EC;EAA1E,CAFmB,CAArB,CADY,CAAP,EAKJ0E,IALI,EAAP;AAMD"}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=index.d.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mjs","names":[],"sources":["../../../src/typings/@aeternity__argon2-browser/index.d.ts"],"sourcesContent":["declare module '@aeternity/argon2-browser/dist/argon2-bundled.min.js' {\n export * from 'argon2-browser'\n}\n"],"mappings":""}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=index.d.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mjs","names":[],"sources":["../../../src/typings/@aeternity__uuid/index.d.ts"],"sourcesContent":["declare module '@aeternity/uuid' {\n export * from 'uuid'\n}\n"],"mappings":""}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=index.d.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mjs","names":[],"sources":["../../../src/typings/bip32-path/index.d.ts"],"sourcesContent":["// TODO: remove after solving https://github.com/axic/bip32-path/issues/5\n\ndeclare module 'bip32-path' {\n interface BipPath {\n toPathArray: () => number[]\n /**\n * returns a text encoded path. Set to noRoot to true to omit the m/ prefix.\n * Set oldStyle true to use h instead of ' for marking hardened nodes.\n */\n toString: (noRoot: boolean, oldStyle: boolean) => string\n\n /**\n * returns true if the input is a valid path string\n */\n validateString: (path: string) => boolean\n\n /**\n * returns true if the input is a valid binary path array\n */\n validatePathArray: (path: string) => boolean\n }\n\n /**\n * creates an instance from a path written as text.\n * Set reqRoot to true if the m/ prefix is mandatory.\n */\n export const fromString: (text: string, reqRoot?: boolean) => BipPath\n\n /**\n * creates an instance from a binary path array\n */\n export const fromPathArray: (path: string) => BipPath\n}\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"index.d.mjs"}
1
+ {"version":3,"file":"index.d.mjs","names":[],"sources":["../../../src/typings/blakejs/index.d.ts"],"sourcesContent":["declare module 'blakejs' {\n interface Context {\n b: Uint8Array\n h: Uint32Array\n t: number\n c: number\n outlen: number\n }\n\n export type Data = Buffer | Uint8Array | string\n\n type Key = Uint8Array | null\n\n export const blake2b: (data: Data, key?: Key, outlen?: number) => Uint8Array\n\n export const blake2bFinal: (context: Context) => Uint8Array\n\n export const blake2bHex: (data: Data, key?: Key, outlen?: number) => string\n\n export const blake2bInit: (outlen?: number, key?: Key) => Context\n\n export const blake2bUpdate: (context: Context, data: Data) => void\n\n export const blake2s: (data: Data, key?: Key, outlen?: number) => Uint8Array\n\n export const blake2sFinal: (context: Context) => Uint8Array\n\n export const blake2sHex: (data: Data, key?: Key, outlen?: number) => string\n\n export const blake2sInit: (outlen?: number, key?: Key) => Context\n\n export const blake2sUpdate: (context: Context, data: Data) => void\n}\n"],"mappings":""}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=index.d.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mjs","names":[],"sources":["../../../src/typings/tweetnacl-auth/index.d.ts"],"sourcesContent":["// TODO: remove after solving https://github.com/dchest/tweetnacl-auth-js/issues/3\n\ndeclare module 'tweetnacl-auth' {\n /**\n * Authenticates the given message with the secret key.\n * (In other words, returns HMAC-SHA-512-256 of the message under the key.)\n */\n export default function (message: Uint8Array, key: Uint8Array): Uint8Array\n\n /**\n * Returns HMAC-SHA-512 (without truncation) of the message under the key\n */\n export const full: (message: Uint8Array, key: Uint8Array) => Uint8Array\n}\n"],"mappings":""}
@@ -0,0 +1,42 @@
1
+ import BigNumber from 'bignumber.js';
2
+ export declare enum AE_AMOUNT_FORMATS {
3
+ AE = "ae",
4
+ MILI_AE = "miliAE",
5
+ MICRO_AE = "microAE",
6
+ NANO_AE = "nanoAE",
7
+ PICO_AE = "picoAE",
8
+ FEMTO_AE = "femtoAE",
9
+ AETTOS = "aettos"
10
+ }
11
+ /**
12
+ * Convert amount to AE
13
+ * @param value - amount to convert
14
+ * @param options - options
15
+ * @param options.denomination - denomination of amount, can be ['ae', 'aettos']
16
+ */
17
+ export declare const toAe: (value: string | number | BigNumber, { denomination }?: {
18
+ denomination?: AE_AMOUNT_FORMATS | undefined;
19
+ }) => string;
20
+ /**
21
+ * Convert amount to aettos
22
+ * @param value - amount to convert
23
+ * @param options - options
24
+ * @param options.denomination - denomination of amount, can be ['ae', 'aettos']
25
+ */
26
+ export declare const toAettos: (value: string | number | BigNumber, { denomination }?: {
27
+ denomination?: AE_AMOUNT_FORMATS | undefined;
28
+ }) => string;
29
+ /**
30
+ * Convert amount from one to other denomination
31
+ * @param value - amount to convert
32
+ * @param options - options
33
+ * @param options.denomination - denomination of amount, can be ['ae', 'aettos']
34
+ * @param options.targetDenomination - target denomination,
35
+ * can be ['ae', 'aettos']
36
+ */
37
+ export declare const formatAmount: (value: string | number | bigint | BigNumber, { denomination, targetDenomination }: {
38
+ denomination?: AE_AMOUNT_FORMATS | undefined;
39
+ targetDenomination?: AE_AMOUNT_FORMATS | undefined;
40
+ }) => string;
41
+ declare const _default: (rawValue: string | number | BigNumber) => string;
42
+ export default _default;
@@ -14,33 +14,25 @@
14
14
  * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15
15
  * PERFORMANCE OF THIS SOFTWARE.
16
16
  */
17
-
18
- /**
19
- * Amount Formatter
20
- * @module @aeternity/aepp-sdk/es/utils/amount-formatter
21
- * @example import { AmountFormatter } from '@aeternity/aepp-sdk'
22
- */
23
17
  import BigNumber from 'bignumber.js';
24
18
  import { isBigNumber } from "./bignumber.mjs";
25
- import { ArgumentError, InvalidDenominationError } from "./errors.mjs";
26
- /**
27
- * AE amount formats
28
- */
29
-
30
- export const AE_AMOUNT_FORMATS = {
31
- AE: 'ae',
32
- MILI_AE: 'miliAE',
33
- MICRO_AE: 'microAE',
34
- NANO_AE: 'nanoAE',
35
- PICO_AE: 'picoAE',
36
- FEMTO_AE: 'femtoAE',
37
- AETTOS: 'aettos'
38
- };
19
+ import { ArgumentError } from "./errors.mjs";
20
+ export let AE_AMOUNT_FORMATS;
39
21
  /**
40
22
  * DENOMINATION_MAGNITUDE
41
23
  */
42
24
 
43
- export const DENOMINATION_MAGNITUDE = {
25
+ (function (AE_AMOUNT_FORMATS) {
26
+ AE_AMOUNT_FORMATS["AE"] = "ae";
27
+ AE_AMOUNT_FORMATS["MILI_AE"] = "miliAE";
28
+ AE_AMOUNT_FORMATS["MICRO_AE"] = "microAE";
29
+ AE_AMOUNT_FORMATS["NANO_AE"] = "nanoAE";
30
+ AE_AMOUNT_FORMATS["PICO_AE"] = "picoAE";
31
+ AE_AMOUNT_FORMATS["FEMTO_AE"] = "femtoAE";
32
+ AE_AMOUNT_FORMATS["AETTOS"] = "aettos";
33
+ })(AE_AMOUNT_FORMATS || (AE_AMOUNT_FORMATS = {}));
34
+
35
+ const DENOMINATION_MAGNITUDE = {
44
36
  [AE_AMOUNT_FORMATS.AE]: 0,
45
37
  [AE_AMOUNT_FORMATS.MILI_AE]: -3,
46
38
  [AE_AMOUNT_FORMATS.MICRO_AE]: -6,
@@ -51,10 +43,9 @@ export const DENOMINATION_MAGNITUDE = {
51
43
  };
52
44
  /**
53
45
  * Convert amount to AE
54
- * @param {String|Number|BigNumber} value amount to convert
55
- * @param {Object} [options={}] options
56
- * @param {String} [options.denomination='aettos'] denomination of amount, can be ['ae', 'aettos']
57
- * @return {String}
46
+ * @param value - amount to convert
47
+ * @param options - options
48
+ * @param options.denomination - denomination of amount, can be ['ae', 'aettos']
58
49
  */
59
50
 
60
51
  export const toAe = function (value) {
@@ -68,10 +59,9 @@ export const toAe = function (value) {
68
59
  };
69
60
  /**
70
61
  * Convert amount to aettos
71
- * @param {String|Number|BigNumber} value amount to convert
72
- * @param {Object} [options={}] options
73
- * @param {String} [options.denomination='ae'] denomination of amount, can be ['ae', 'aettos']
74
- * @return {String}
62
+ * @param value - amount to convert
63
+ * @param options - options
64
+ * @param options.denomination - denomination of amount, can be ['ae', 'aettos']
75
65
  */
76
66
 
77
67
  export const toAettos = function (value) {
@@ -84,23 +74,20 @@ export const toAettos = function (value) {
84
74
  };
85
75
  /**
86
76
  * Convert amount from one to other denomination
87
- * @param {String|Number|BigNumber} value amount to convert
88
- * @param {Object} [options={}] options
89
- * @param {String} [options.denomination='aettos'] denomination of amount, can be ['ae', 'aettos']
90
- * @param {String} [options.targetDenomination='aettos'] target denomination, can be ['ae', 'aettos']
91
- * @return {String}
77
+ * @param value - amount to convert
78
+ * @param options - options
79
+ * @param options.denomination - denomination of amount, can be ['ae', 'aettos']
80
+ * @param options.targetDenomination - target denomination,
81
+ * can be ['ae', 'aettos']
92
82
  */
93
83
 
94
- export const formatAmount = function (value) {
84
+ export const formatAmount = (value, _ref) => {
95
85
  let {
96
86
  denomination = AE_AMOUNT_FORMATS.AETTOS,
97
87
  targetDenomination = AE_AMOUNT_FORMATS.AETTOS
98
- } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
99
- const denominations = Object.values(AE_AMOUNT_FORMATS);
100
- if (!denominations.includes(denomination)) throw new InvalidDenominationError(`Invalid denomination: ${denomination}`);
101
- if (!denominations.includes(targetDenomination)) throw new InvalidDenominationError(`Invalid target denomination: ${targetDenomination}`);
102
- if (!isBigNumber(value)) throw new ArgumentError('value', `a number`, value);
103
- return new BigNumber(value).shiftedBy(DENOMINATION_MAGNITUDE[denomination] - DENOMINATION_MAGNITUDE[targetDenomination]).toFixed();
88
+ } = _ref;
89
+ if (!isBigNumber(value)) throw new ArgumentError('value', 'a number', value);
90
+ return new BigNumber(typeof value === 'bigint' ? value.toString() : value).shiftedBy(DENOMINATION_MAGNITUDE[denomination] - DENOMINATION_MAGNITUDE[targetDenomination]).toFixed();
104
91
  };
105
92
  const prefixes = [{
106
93
  name: 'exa',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/amount-formatter.ts"],"names":["BigNumber","isBigNumber","ArgumentError","InvalidDenominationError","AE_AMOUNT_FORMATS","AE","MILI_AE","MICRO_AE","NANO_AE","PICO_AE","FEMTO_AE","AETTOS","DENOMINATION_MAGNITUDE","toAe","value","denomination","formatAmount","targetDenomination","toAettos","denominations","Object","values","includes","shiftedBy","toFixed","prefixes","name","magnitude","getNearestPrefix","exponent","reduce","p","n","Math","abs","getLowerBoundPrefix","find","length","rawValue","exp","e","v","precision","min"],"mappings":"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","sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2018 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 * Amount Formatter\n * @module @aeternity/aepp-sdk/es/utils/amount-formatter\n * @example import { AmountFormatter } from '@aeternity/aepp-sdk'\n */\nimport BigNumber from 'bignumber.js'\nimport { isBigNumber } from './bignumber'\nimport { ArgumentError, InvalidDenominationError } from './errors'\n\n/**\n * AE amount formats\n */\nexport const AE_AMOUNT_FORMATS = {\n AE: 'ae',\n MILI_AE: 'miliAE',\n MICRO_AE: 'microAE',\n NANO_AE: 'nanoAE',\n PICO_AE: 'picoAE',\n FEMTO_AE: 'femtoAE',\n AETTOS: 'aettos'\n}\n\n/**\n * DENOMINATION_MAGNITUDE\n */\nexport const DENOMINATION_MAGNITUDE = {\n [AE_AMOUNT_FORMATS.AE]: 0,\n [AE_AMOUNT_FORMATS.MILI_AE]: -3,\n [AE_AMOUNT_FORMATS.MICRO_AE]: -6,\n [AE_AMOUNT_FORMATS.NANO_AE]: -9,\n [AE_AMOUNT_FORMATS.PICO_AE]: -12,\n [AE_AMOUNT_FORMATS.FEMTO_AE]: -15,\n [AE_AMOUNT_FORMATS.AETTOS]: -18\n}\n\n/**\n * Convert amount to AE\n * @param {String|Number|BigNumber} value amount to convert\n * @param {Object} [options={}] options\n * @param {String} [options.denomination='aettos'] denomination of amount, can be ['ae', 'aettos']\n * @return {String}\n */\nexport const toAe = (\n value: string | number | BigNumber,\n { denomination = AE_AMOUNT_FORMATS.AETTOS } = {}\n): string => formatAmount(value, { denomination, targetDenomination: AE_AMOUNT_FORMATS.AE })\n\n/**\n * Convert amount to aettos\n * @param {String|Number|BigNumber} value amount to convert\n * @param {Object} [options={}] options\n * @param {String} [options.denomination='ae'] denomination of amount, can be ['ae', 'aettos']\n * @return {String}\n */\nexport const toAettos = (\n value: string | number | BigNumber,\n { denomination = AE_AMOUNT_FORMATS.AE } = {}\n): string => formatAmount(value, { denomination })\n\n/**\n * Convert amount from one to other denomination\n * @param {String|Number|BigNumber} value amount to convert\n * @param {Object} [options={}] options\n * @param {String} [options.denomination='aettos'] denomination of amount, can be ['ae', 'aettos']\n * @param {String} [options.targetDenomination='aettos'] target denomination, can be ['ae', 'aettos']\n * @return {String}\n */\nexport const formatAmount = (\n value: string | number | BigNumber,\n { denomination = AE_AMOUNT_FORMATS.AETTOS, targetDenomination = AE_AMOUNT_FORMATS.AETTOS } = {}\n): string => {\n const denominations = Object.values(AE_AMOUNT_FORMATS)\n if (!denominations.includes(denomination)) throw new InvalidDenominationError(`Invalid denomination: ${denomination}`)\n if (!denominations.includes(targetDenomination)) throw new InvalidDenominationError(`Invalid target denomination: ${targetDenomination}`)\n if (!isBigNumber(value)) throw new ArgumentError('value', `a number`, value)\n\n return new BigNumber(value)\n .shiftedBy(DENOMINATION_MAGNITUDE[denomination] - DENOMINATION_MAGNITUDE[targetDenomination])\n .toFixed()\n}\n\ninterface Prefix {\n name: string\n magnitude: number\n}\n\nconst prefixes: Prefix[] = [\n { name: 'exa', magnitude: 18 },\n { name: 'giga', magnitude: 9 },\n { name: '', magnitude: 0 },\n { name: 'pico', magnitude: -12 }\n]\n\nconst getNearestPrefix = (exponent: number): Prefix => prefixes.reduce((p, n) => (\n Math.abs(n.magnitude - exponent) < Math.abs(p.magnitude - exponent) ? n : p))\n\nconst getLowerBoundPrefix = (exponent: number): Prefix => prefixes\n .find(p => p.magnitude <= exponent) ?? prefixes[prefixes.length - 1]\n\nexport default (rawValue: string | number | BigNumber): string => {\n const value: BigNumber = new BigNumber(rawValue)\n\n const exp = value.e ?? 0\n const { name, magnitude } = (exp < 0 ? getNearestPrefix : getLowerBoundPrefix)(exp)\n const v = value\n .shiftedBy(-magnitude)\n .precision(9 + Math.min(exp - magnitude, 0))\n .toFixed()\n return `${v}${name !== '' ? ' ' : ''}${name}`\n}\n"],"file":"amount-formatter.mjs"}
1
+ {"version":3,"file":"amount-formatter.mjs","names":["BigNumber","isBigNumber","ArgumentError","AE_AMOUNT_FORMATS","DENOMINATION_MAGNITUDE","AE","MILI_AE","MICRO_AE","NANO_AE","PICO_AE","FEMTO_AE","AETTOS","toAe","value","denomination","formatAmount","targetDenomination","toAettos","toString","shiftedBy","toFixed","prefixes","name","magnitude","getNearestPrefix","exponent","reduce","p","n","Math","abs","getLowerBoundPrefix","find","length","rawValue","exp","e","v","precision","min"],"sources":["../../src/utils/amount-formatter.ts"],"sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2018 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 */\nimport BigNumber from 'bignumber.js'\nimport { isBigNumber } from './bignumber'\nimport { ArgumentError } from './errors'\n\nexport enum AE_AMOUNT_FORMATS {\n AE = 'ae',\n MILI_AE = 'miliAE',\n MICRO_AE = 'microAE',\n NANO_AE = 'nanoAE',\n PICO_AE = 'picoAE',\n FEMTO_AE = 'femtoAE',\n AETTOS = 'aettos'\n}\n\n/**\n * DENOMINATION_MAGNITUDE\n */\nconst DENOMINATION_MAGNITUDE = {\n [AE_AMOUNT_FORMATS.AE]: 0,\n [AE_AMOUNT_FORMATS.MILI_AE]: -3,\n [AE_AMOUNT_FORMATS.MICRO_AE]: -6,\n [AE_AMOUNT_FORMATS.NANO_AE]: -9,\n [AE_AMOUNT_FORMATS.PICO_AE]: -12,\n [AE_AMOUNT_FORMATS.FEMTO_AE]: -15,\n [AE_AMOUNT_FORMATS.AETTOS]: -18\n} as const\n\n/**\n * Convert amount to AE\n * @param value - amount to convert\n * @param options - options\n * @param options.denomination - denomination of amount, can be ['ae', 'aettos']\n */\nexport const toAe = (\n value: string | number | BigNumber,\n { denomination = AE_AMOUNT_FORMATS.AETTOS }: { denomination?: AE_AMOUNT_FORMATS } = {}\n): string => formatAmount(value, { denomination, targetDenomination: AE_AMOUNT_FORMATS.AE })\n\n/**\n * Convert amount to aettos\n * @param value - amount to convert\n * @param options - options\n * @param options.denomination - denomination of amount, can be ['ae', 'aettos']\n */\nexport const toAettos = (\n value: string | number | BigNumber,\n { denomination = AE_AMOUNT_FORMATS.AE }: { denomination?: AE_AMOUNT_FORMATS } = {}\n): string => formatAmount(value, { denomination })\n\n/**\n * Convert amount from one to other denomination\n * @param value - amount to convert\n * @param options - options\n * @param options.denomination - denomination of amount, can be ['ae', 'aettos']\n * @param options.targetDenomination - target denomination,\n * can be ['ae', 'aettos']\n */\nexport const formatAmount = (\n value: string | number | bigint | BigNumber,\n { denomination = AE_AMOUNT_FORMATS.AETTOS, targetDenomination = AE_AMOUNT_FORMATS.AETTOS }:\n { denomination?: AE_AMOUNT_FORMATS, targetDenomination?: AE_AMOUNT_FORMATS }\n): string => {\n if (!isBigNumber(value)) throw new ArgumentError('value', 'a number', value)\n\n return new BigNumber(typeof value === 'bigint' ? value.toString() : value)\n .shiftedBy(DENOMINATION_MAGNITUDE[denomination] - DENOMINATION_MAGNITUDE[targetDenomination])\n .toFixed()\n}\n\ninterface Prefix {\n name: string\n magnitude: number\n}\n\nconst prefixes: Prefix[] = [\n { name: 'exa', magnitude: 18 },\n { name: 'giga', magnitude: 9 },\n { name: '', magnitude: 0 },\n { name: 'pico', magnitude: -12 }\n]\n\nconst getNearestPrefix = (exponent: number): Prefix => prefixes.reduce((p, n) => (\n Math.abs(n.magnitude - exponent) < Math.abs(p.magnitude - exponent) ? n : p))\n\nconst getLowerBoundPrefix = (exponent: number): Prefix => prefixes\n .find(p => p.magnitude <= exponent) ?? prefixes[prefixes.length - 1]\n\nexport default (rawValue: string | number | BigNumber): string => {\n const value: BigNumber = new BigNumber(rawValue)\n\n const exp = value.e ?? 0\n const { name, magnitude } = (exp < 0 ? getNearestPrefix : getLowerBoundPrefix)(exp)\n const v = value\n .shiftedBy(-magnitude)\n .precision(9 + Math.min(exp - magnitude, 0))\n .toFixed()\n return `${v}${name !== '' ? ' ' : ''}${name}`\n}\n"],"mappings":"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"}