@aeternity/aepp-sdk 10.0.0 → 12.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (424) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +15 -14
  3. package/dist/aepp-sdk.browser-script.js +1 -1
  4. package/dist/aepp-sdk.browser-script.js.LICENSE.txt +13 -40
  5. package/dist/aepp-sdk.browser-script.js.map +1 -1
  6. package/dist/aepp-sdk.browser.js +1 -1
  7. package/dist/aepp-sdk.browser.js.map +1 -1
  8. package/dist/aepp-sdk.js +1 -1
  9. package/dist/aepp-sdk.js.map +1 -1
  10. package/es/AeSdk.d.ts +37 -0
  11. package/es/AeSdk.mjs +81 -0
  12. package/es/AeSdk.mjs.map +1 -0
  13. package/es/AeSdkAepp.d.ts +69 -0
  14. package/es/AeSdkAepp.mjs +175 -0
  15. package/es/AeSdkAepp.mjs.map +1 -0
  16. package/es/AeSdkBase.d.ts +212 -0
  17. package/es/AeSdkBase.mjs +310 -0
  18. package/es/AeSdkBase.mjs.map +1 -0
  19. package/es/AeSdkWallet.d.ts +103 -0
  20. package/es/AeSdkWallet.mjs +322 -0
  21. package/es/AeSdkWallet.mjs.map +1 -0
  22. package/es/Node.d.ts +44 -0
  23. package/es/Node.mjs +141 -0
  24. package/es/Node.mjs.map +1 -0
  25. package/es/account/Base.d.ts +65 -0
  26. package/es/account/Base.mjs +123 -0
  27. package/es/account/Base.mjs.map +1 -0
  28. package/es/account/Memory.d.ts +25 -0
  29. package/es/account/Memory.mjs +81 -0
  30. package/es/account/Memory.mjs.map +1 -0
  31. package/es/account/Rpc.d.ts +27 -0
  32. package/es/account/Rpc.mjs +79 -0
  33. package/es/account/Rpc.mjs.map +1 -0
  34. package/es/aens.d.ts +209 -0
  35. package/es/aens.mjs +332 -0
  36. package/es/aens.mjs.map +1 -0
  37. package/es/aepp-wallet-communication/connection/Browser.d.ts +32 -0
  38. package/es/aepp-wallet-communication/connection/Browser.mjs +70 -0
  39. package/es/aepp-wallet-communication/connection/Browser.mjs.map +1 -0
  40. package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +17 -0
  41. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +57 -0
  42. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -0
  43. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.d.ts +35 -0
  44. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs +142 -0
  45. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs.map +1 -0
  46. package/es/aepp-wallet-communication/connection-proxy.d.ts +10 -0
  47. package/{src/utils/crypto-ts.ts → es/aepp-wallet-communication/connection-proxy.mjs} +15 -11
  48. package/es/aepp-wallet-communication/connection-proxy.mjs.map +1 -0
  49. package/es/aepp-wallet-communication/rpc/RpcClient.d.ts +33 -0
  50. package/es/aepp-wallet-communication/rpc/RpcClient.mjs +169 -0
  51. package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -0
  52. package/es/aepp-wallet-communication/rpc/types.d.ts +77 -0
  53. package/es/aepp-wallet-communication/rpc/types.mjs +3 -0
  54. package/es/aepp-wallet-communication/rpc/types.mjs.map +1 -0
  55. package/es/aepp-wallet-communication/schema.d.ts +118 -0
  56. package/es/aepp-wallet-communication/schema.mjs +214 -0
  57. package/es/aepp-wallet-communication/schema.mjs.map +1 -0
  58. package/es/aepp-wallet-communication/wallet-detector.d.ts +24 -0
  59. package/es/aepp-wallet-communication/wallet-detector.mjs +63 -0
  60. package/es/aepp-wallet-communication/wallet-detector.mjs.map +1 -0
  61. package/es/apis/compiler/compiler.d.ts +92 -0
  62. package/es/apis/compiler/compiler.mjs +576 -0
  63. package/es/apis/compiler/compiler.mjs.map +1 -0
  64. package/es/apis/compiler/index.d.ts +2 -0
  65. package/es/apis/compiler/index.mjs +3 -0
  66. package/es/apis/compiler/index.mjs.map +1 -0
  67. package/es/apis/compiler/models/index.d.ts +248 -0
  68. package/es/apis/compiler/models/index.mjs +48 -0
  69. package/es/apis/compiler/models/index.mjs.map +1 -0
  70. package/es/apis/compiler/models/mappers.d.ts +23 -0
  71. package/es/apis/compiler/models/mappers.mjs +585 -0
  72. package/es/apis/compiler/models/mappers.mjs.map +1 -0
  73. package/es/apis/compiler/models/parameters.d.ts +13 -0
  74. package/es/apis/compiler/models/parameters.mjs +71 -0
  75. package/es/apis/compiler/models/parameters.mjs.map +1 -0
  76. package/es/apis/node/index.d.ts +2 -0
  77. package/es/apis/node/index.mjs +3 -0
  78. package/es/apis/node/index.mjs.map +1 -0
  79. package/es/apis/node/models/index.d.ts +1061 -0
  80. package/es/apis/node/models/index.mjs +2 -0
  81. package/es/apis/node/models/index.mjs.map +1 -0
  82. package/es/apis/node/models/mappers.d.ts +95 -0
  83. package/es/apis/node/models/mappers.mjs +4164 -0
  84. package/es/apis/node/models/mappers.mjs.map +1 -0
  85. package/es/apis/node/models/parameters.d.ts +17 -0
  86. package/es/apis/node/models/parameters.mjs +165 -0
  87. package/es/apis/node/models/parameters.mjs.map +1 -0
  88. package/es/apis/node/node.d.ts +215 -0
  89. package/es/apis/node/node.mjs +1165 -0
  90. package/es/apis/node/node.mjs.map +1 -0
  91. package/es/chain.d.ts +220 -0
  92. package/es/chain.mjs +524 -0
  93. package/es/chain.mjs.map +1 -0
  94. package/es/channel/handlers.d.ts +34 -0
  95. package/es/channel/{handlers.js → handlers.mjs} +163 -130
  96. package/es/channel/handlers.mjs.map +1 -0
  97. package/es/channel/index.d.ts +634 -0
  98. package/es/channel/index.mjs +978 -0
  99. package/es/channel/index.mjs.map +1 -0
  100. package/es/channel/internal.d.ts +100 -0
  101. package/es/channel/internal.mjs +328 -0
  102. package/es/channel/internal.mjs.map +1 -0
  103. package/es/contract/Compiler.d.ts +17 -0
  104. package/es/contract/Compiler.mjs +67 -0
  105. package/es/contract/Compiler.mjs.map +1 -0
  106. package/es/contract/aci.d.ts +125 -0
  107. package/es/contract/aci.mjs +496 -0
  108. package/es/contract/aci.mjs.map +1 -0
  109. package/es/contract/ga.d.ts +68 -0
  110. package/es/contract/ga.mjs +190 -0
  111. package/es/contract/ga.mjs.map +1 -0
  112. package/es/contract/methods.d.ts +68 -0
  113. package/es/contract/methods.mjs +101 -0
  114. package/es/contract/methods.mjs.map +1 -0
  115. package/es/index.d.ts +32 -0
  116. package/es/index.mjs +49 -0
  117. package/es/index.mjs.map +1 -0
  118. package/es/oracle.d.ts +154 -0
  119. package/es/oracle.mjs +288 -0
  120. package/es/oracle.mjs.map +1 -0
  121. package/es/spend.d.ts +61 -0
  122. package/es/spend.mjs +122 -0
  123. package/es/spend.mjs.map +1 -0
  124. package/es/tx/builder/constants.d.ts +41 -0
  125. package/es/tx/builder/constants.mjs +100 -0
  126. package/es/tx/builder/constants.mjs.map +1 -0
  127. package/es/tx/builder/field-types.d.ts +62 -0
  128. package/es/tx/builder/field-types.mjs +126 -0
  129. package/es/tx/builder/field-types.mjs.map +1 -0
  130. package/es/tx/builder/helpers.d.ts +131 -0
  131. package/es/tx/builder/helpers.mjs +223 -0
  132. package/es/tx/builder/helpers.mjs.map +1 -0
  133. package/es/tx/builder/index.d.ts +75 -0
  134. package/es/tx/builder/index.mjs +424 -0
  135. package/es/tx/builder/index.mjs.map +1 -0
  136. package/es/tx/builder/schema.d.ts +350 -0
  137. package/es/tx/builder/schema.mjs +320 -0
  138. package/es/tx/builder/schema.mjs.map +1 -0
  139. package/es/tx/index.d.ts +63 -0
  140. package/es/tx/index.mjs +209 -0
  141. package/es/tx/index.mjs.map +1 -0
  142. package/es/tx/min-fee.d.ts +20 -0
  143. package/es/tx/min-fee.mjs +148 -0
  144. package/es/tx/min-fee.mjs.map +1 -0
  145. package/es/tx/validator.d.ts +19 -0
  146. package/es/tx/validator.mjs +240 -0
  147. package/es/tx/validator.mjs.map +1 -0
  148. package/es/typings/@aeternity__argon2-browser/index.d.mjs +2 -0
  149. package/es/typings/@aeternity__argon2-browser/index.d.mjs.map +1 -0
  150. package/es/typings/@aeternity__uuid/index.d.mjs +2 -0
  151. package/es/typings/@aeternity__uuid/index.d.mjs.map +1 -0
  152. package/es/typings/bip32-path/index.d.mjs +2 -0
  153. package/es/typings/bip32-path/index.d.mjs.map +1 -0
  154. package/es/typings/blakejs/index.d.mjs +2 -0
  155. package/es/typings/blakejs/index.d.mjs.map +1 -0
  156. package/es/typings/tweetnacl-auth/index.d.mjs +2 -0
  157. package/es/typings/tweetnacl-auth/index.d.mjs.map +1 -0
  158. package/es/utils/amount-formatter.d.ts +42 -0
  159. package/es/utils/{amount-formatter.js → amount-formatter.mjs} +38 -44
  160. package/es/utils/amount-formatter.mjs.map +1 -0
  161. package/es/utils/autorest.d.ts +6 -0
  162. package/es/utils/autorest.mjs +97 -0
  163. package/es/utils/autorest.mjs.map +1 -0
  164. package/es/utils/bignumber.d.ts +13 -0
  165. package/es/utils/bignumber.mjs +23 -0
  166. package/es/utils/bignumber.mjs.map +1 -0
  167. package/es/{bytes.d.ts → utils/bytes.d.ts} +10 -13
  168. package/es/utils/{bytes.js → bytes.mjs} +26 -22
  169. package/es/utils/bytes.mjs.map +1 -0
  170. package/es/utils/crypto.d.ts +103 -0
  171. package/es/utils/crypto.mjs +221 -0
  172. package/es/utils/crypto.mjs.map +1 -0
  173. package/es/utils/encoder.d.ts +26 -0
  174. package/es/utils/encoder.mjs +102 -0
  175. package/es/utils/encoder.mjs.map +1 -0
  176. package/es/utils/errors.d.ts +481 -0
  177. package/es/utils/errors.mjs +882 -0
  178. package/es/utils/errors.mjs.map +1 -0
  179. package/es/utils/hd-wallet.d.ts +34 -0
  180. package/es/utils/hd-wallet.mjs +122 -0
  181. package/es/utils/hd-wallet.mjs.map +1 -0
  182. package/es/utils/json-big.d.ts +5 -0
  183. package/es/utils/json-big.mjs +41 -0
  184. package/es/utils/json-big.mjs.map +1 -0
  185. package/es/utils/keystore.d.ts +51 -0
  186. package/es/utils/keystore.mjs +145 -0
  187. package/es/utils/keystore.mjs.map +1 -0
  188. package/es/{mptree.d.ts → utils/mptree.d.ts} +5 -8
  189. package/es/utils/{mptree.js → mptree.mjs} +33 -25
  190. package/es/utils/mptree.mjs.map +1 -0
  191. package/es/utils/other.d.ts +14 -0
  192. package/es/utils/other.mjs +28 -0
  193. package/es/utils/other.mjs.map +1 -0
  194. package/es/{semver-satisfies.d.ts → utils/semver-satisfies.d.ts} +0 -0
  195. package/es/utils/{semver-satisfies.js → semver-satisfies.mjs} +1 -1
  196. package/es/utils/semver-satisfies.mjs.map +1 -0
  197. package/es/utils/string.d.ts +24 -0
  198. package/es/utils/{string.js → string.mjs} +9 -11
  199. package/es/utils/string.mjs.map +1 -0
  200. package/package.json +67 -64
  201. package/src/AeSdk.ts +65 -0
  202. package/src/AeSdkAepp.ts +167 -0
  203. package/src/AeSdkBase.ts +320 -0
  204. package/src/AeSdkWallet.ts +332 -0
  205. package/src/Node.ts +167 -0
  206. package/src/account/Base.ts +114 -0
  207. package/src/account/Memory.ts +83 -0
  208. package/src/account/Rpc.ts +67 -0
  209. package/src/aens.ts +391 -0
  210. package/src/aepp-wallet-communication/connection/Browser.ts +68 -0
  211. package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +58 -0
  212. package/src/aepp-wallet-communication/connection/BrowserWindowMessage.ts +111 -0
  213. package/{es/utils/crypto-ts.js → src/aepp-wallet-communication/connection-proxy.ts} +16 -9
  214. package/src/aepp-wallet-communication/rpc/RpcClient.ts +137 -0
  215. package/src/aepp-wallet-communication/rpc/types.ts +66 -0
  216. package/src/aepp-wallet-communication/schema.ts +181 -0
  217. package/src/aepp-wallet-communication/wallet-detector.ts +71 -0
  218. package/src/apis/compiler/code-model-v4.yaml +2649 -0
  219. package/src/apis/compiler/compiler.ts +585 -0
  220. package/src/apis/compiler/index.ts +2 -0
  221. package/src/apis/compiler/models/index.ts +301 -0
  222. package/src/apis/compiler/models/mappers.ts +583 -0
  223. package/src/apis/compiler/models/parameters.ts +93 -0
  224. package/src/apis/node/code-model-v4.yaml +10046 -0
  225. package/src/apis/node/index.ts +2 -0
  226. package/src/apis/node/models/index.ts +1253 -0
  227. package/src/apis/node/models/mappers.ts +4278 -0
  228. package/src/apis/node/models/parameters.ts +188 -0
  229. package/src/apis/node/node.ts +1299 -0
  230. package/src/chain.ts +444 -0
  231. package/src/channel/{handlers.js → handlers.ts} +238 -143
  232. package/src/channel/index.ts +991 -0
  233. package/src/channel/internal.ts +345 -0
  234. package/src/contract/Compiler.ts +66 -0
  235. package/src/contract/aci.ts +529 -0
  236. package/src/contract/ga.ts +178 -0
  237. package/src/contract/methods.ts +118 -0
  238. package/src/index.ts +51 -0
  239. package/src/oracle.ts +342 -0
  240. package/src/spend.ts +152 -0
  241. package/src/tx/builder/constants.ts +96 -0
  242. package/src/tx/builder/field-types.ts +111 -0
  243. package/src/tx/builder/helpers.ts +253 -0
  244. package/src/tx/builder/index.ts +394 -0
  245. package/src/tx/builder/schema.ts +771 -0
  246. package/src/tx/index.ts +199 -0
  247. package/src/tx/min-fee.ts +136 -0
  248. package/src/tx/validator.ts +226 -0
  249. package/src/typings/@aeternity__argon2-browser/index.d.ts +3 -0
  250. package/src/typings/@aeternity__uuid/index.d.ts +3 -0
  251. package/src/typings/bip32-path/index.d.ts +33 -0
  252. package/src/typings/tweetnacl-auth/index.d.ts +14 -0
  253. package/src/utils/amount-formatter.ts +29 -41
  254. package/src/utils/autorest.ts +90 -0
  255. package/src/utils/bignumber.ts +9 -19
  256. package/src/utils/bytes.ts +15 -16
  257. package/src/utils/crypto.ts +217 -0
  258. package/src/utils/encoder.ts +98 -0
  259. package/src/utils/errors.ts +817 -0
  260. package/src/utils/hd-wallet.ts +134 -0
  261. package/src/utils/json-big.ts +26 -0
  262. package/src/utils/keystore.ts +179 -0
  263. package/src/utils/mptree.ts +26 -20
  264. package/src/utils/other.ts +28 -43
  265. package/src/utils/string.ts +8 -10
  266. package/CHANGELOG.md +0 -1603
  267. package/es/account/base.js +0 -169
  268. package/es/account/base.js.map +0 -1
  269. package/es/account/memory.js +0 -84
  270. package/es/account/memory.js.map +0 -1
  271. package/es/account/multiple.js +0 -178
  272. package/es/account/multiple.js.map +0 -1
  273. package/es/ae/aens.js +0 -408
  274. package/es/ae/aens.js.map +0 -1
  275. package/es/ae/aepp.js +0 -45
  276. package/es/ae/aepp.js.map +0 -1
  277. package/es/ae/contract.js +0 -312
  278. package/es/ae/contract.js.map +0 -1
  279. package/es/ae/index.js +0 -206
  280. package/es/ae/index.js.map +0 -1
  281. package/es/ae/oracle.js +0 -322
  282. package/es/ae/oracle.js.map +0 -1
  283. package/es/ae/universal.js +0 -45
  284. package/es/ae/universal.js.map +0 -1
  285. package/es/ae/wallet.js +0 -50
  286. package/es/ae/wallet.js.map +0 -1
  287. package/es/amount-formatter.d.ts +0 -58
  288. package/es/bignumber.d.ts +0 -24
  289. package/es/chain/index.js +0 -256
  290. package/es/chain/index.js.map +0 -1
  291. package/es/chain/node.js +0 -394
  292. package/es/chain/node.js.map +0 -1
  293. package/es/channel/handlers.js.map +0 -1
  294. package/es/channel/index.js +0 -980
  295. package/es/channel/index.js.map +0 -1
  296. package/es/channel/internal.js +0 -266
  297. package/es/channel/internal.js.map +0 -1
  298. package/es/contract/aci/helpers.js +0 -298
  299. package/es/contract/aci/helpers.js.map +0 -1
  300. package/es/contract/aci/index.js +0 -361
  301. package/es/contract/aci/index.js.map +0 -1
  302. package/es/contract/aci/transformation.js +0 -66
  303. package/es/contract/aci/transformation.js.map +0 -1
  304. package/es/contract/compiler.js +0 -244
  305. package/es/contract/compiler.js.map +0 -1
  306. package/es/contract/ga/helpers.js +0 -22
  307. package/es/contract/ga/helpers.js.map +0 -1
  308. package/es/contract/ga/index.js +0 -170
  309. package/es/contract/ga/index.js.map +0 -1
  310. package/es/contract/index.js +0 -162
  311. package/es/contract/index.js.map +0 -1
  312. package/es/crypto-ts.d.ts +0 -9
  313. package/es/index.js +0 -57
  314. package/es/index.js.map +0 -1
  315. package/es/node-pool/index.js +0 -187
  316. package/es/node-pool/index.js.map +0 -1
  317. package/es/node.js +0 -132
  318. package/es/node.js.map +0 -1
  319. package/es/other.d.ts +0 -31
  320. package/es/string.d.ts +0 -26
  321. package/es/tx/builder/helpers.js +0 -305
  322. package/es/tx/builder/helpers.js.map +0 -1
  323. package/es/tx/builder/index.js +0 -595
  324. package/es/tx/builder/index.js.map +0 -1
  325. package/es/tx/builder/schema.js +0 -814
  326. package/es/tx/builder/schema.js.map +0 -1
  327. package/es/tx/index.js +0 -300
  328. package/es/tx/index.js.map +0 -1
  329. package/es/tx/tx-object.js +0 -276
  330. package/es/tx/tx-object.js.map +0 -1
  331. package/es/tx/tx.js +0 -937
  332. package/es/tx/tx.js.map +0 -1
  333. package/es/tx/validator.js +0 -208
  334. package/es/tx/validator.js.map +0 -1
  335. package/es/typings/blakejs/index.d.js +0 -2
  336. package/es/typings/blakejs/index.d.js.map +0 -1
  337. package/es/utils/aepp-wallet-communication/connection/browser-runtime.js +0 -131
  338. package/es/utils/aepp-wallet-communication/connection/browser-runtime.js.map +0 -1
  339. package/es/utils/aepp-wallet-communication/connection/browser-window-message.js +0 -184
  340. package/es/utils/aepp-wallet-communication/connection/browser-window-message.js.map +0 -1
  341. package/es/utils/aepp-wallet-communication/connection/index.js +0 -84
  342. package/es/utils/aepp-wallet-communication/connection/index.js.map +0 -1
  343. package/es/utils/aepp-wallet-communication/content-script-bridge.js +0 -97
  344. package/es/utils/aepp-wallet-communication/content-script-bridge.js.map +0 -1
  345. package/es/utils/aepp-wallet-communication/helpers.js +0 -103
  346. package/es/utils/aepp-wallet-communication/helpers.js.map +0 -1
  347. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js +0 -329
  348. package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js.map +0 -1
  349. package/es/utils/aepp-wallet-communication/rpc/rpc-client.js +0 -270
  350. package/es/utils/aepp-wallet-communication/rpc/rpc-client.js.map +0 -1
  351. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js +0 -533
  352. package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js.map +0 -1
  353. package/es/utils/aepp-wallet-communication/schema.js +0 -107
  354. package/es/utils/aepp-wallet-communication/schema.js.map +0 -1
  355. package/es/utils/aepp-wallet-communication/wallet-detector.js +0 -109
  356. package/es/utils/aepp-wallet-communication/wallet-detector.js.map +0 -1
  357. package/es/utils/amount-formatter.js.map +0 -1
  358. package/es/utils/async-init.js +0 -67
  359. package/es/utils/async-init.js.map +0 -1
  360. package/es/utils/bignumber.js +0 -28
  361. package/es/utils/bignumber.js.map +0 -1
  362. package/es/utils/bytes.js.map +0 -1
  363. package/es/utils/crypto-ts.js.map +0 -1
  364. package/es/utils/crypto.js +0 -304
  365. package/es/utils/crypto.js.map +0 -1
  366. package/es/utils/hd-wallet.js +0 -112
  367. package/es/utils/hd-wallet.js.map +0 -1
  368. package/es/utils/json-big.js +0 -45
  369. package/es/utils/json-big.js.map +0 -1
  370. package/es/utils/keystore.js +0 -228
  371. package/es/utils/keystore.js.map +0 -1
  372. package/es/utils/mptree.js.map +0 -1
  373. package/es/utils/other.js +0 -43
  374. package/es/utils/other.js.map +0 -1
  375. package/es/utils/semver-satisfies.js.map +0 -1
  376. package/es/utils/string.js.map +0 -1
  377. package/es/utils/swagger.js +0 -132
  378. package/es/utils/swagger.js.map +0 -1
  379. package/src/account/base.js +0 -153
  380. package/src/account/memory.js +0 -78
  381. package/src/account/multiple.js +0 -154
  382. package/src/ae/aens.js +0 -366
  383. package/src/ae/aepp.js +0 -45
  384. package/src/ae/contract.js +0 -285
  385. package/src/ae/index.js +0 -167
  386. package/src/ae/oracle.js +0 -296
  387. package/src/ae/universal.js +0 -47
  388. package/src/ae/wallet.js +0 -50
  389. package/src/chain/index.js +0 -250
  390. package/src/chain/node.js +0 -293
  391. package/src/channel/index.js +0 -898
  392. package/src/channel/internal.js +0 -231
  393. package/src/contract/aci/index.js +0 -317
  394. package/src/contract/aci/transformation.js +0 -72
  395. package/src/contract/compiler.js +0 -195
  396. package/src/contract/ga/helpers.js +0 -17
  397. package/src/contract/ga/index.js +0 -147
  398. package/src/contract/index.js +0 -163
  399. package/src/index.js +0 -90
  400. package/src/node-pool/index.js +0 -171
  401. package/src/node.js +0 -118
  402. package/src/tx/builder/helpers.js +0 -325
  403. package/src/tx/builder/index.js +0 -460
  404. package/src/tx/builder/schema.js +0 -1211
  405. package/src/tx/index.js +0 -301
  406. package/src/tx/tx-object.js +0 -186
  407. package/src/tx/tx.js +0 -622
  408. package/src/tx/validator.js +0 -161
  409. package/src/utils/aepp-wallet-communication/connection/browser-runtime.js +0 -114
  410. package/src/utils/aepp-wallet-communication/connection/browser-window-message.js +0 -161
  411. package/src/utils/aepp-wallet-communication/connection/index.js +0 -85
  412. package/src/utils/aepp-wallet-communication/content-script-bridge.js +0 -85
  413. package/src/utils/aepp-wallet-communication/helpers.js +0 -70
  414. package/src/utils/aepp-wallet-communication/rpc/aepp-rpc.js +0 -268
  415. package/src/utils/aepp-wallet-communication/rpc/rpc-client.js +0 -223
  416. package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +0 -390
  417. package/src/utils/aepp-wallet-communication/schema.js +0 -108
  418. package/src/utils/aepp-wallet-communication/wallet-detector.js +0 -91
  419. package/src/utils/async-init.js +0 -41
  420. package/src/utils/crypto.js +0 -312
  421. package/src/utils/hd-wallet.js +0 -115
  422. package/src/utils/json-big.js +0 -26
  423. package/src/utils/keystore.js +0 -223
  424. package/src/utils/swagger.js +0 -133
@@ -1,231 +0,0 @@
1
- /*
2
- * ISC License (ISC)
3
- * Copyright (c) 2018 aeternity developers
4
- *
5
- * Permission to use, copy, modify, and/or distribute this software for any
6
- * purpose with or without fee is hereby granted, provided that the above
7
- * copyright notice and this permission notice appear in all copies.
8
- *
9
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
10
- * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11
- * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
12
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
14
- * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15
- * PERFORMANCE OF THIS SOFTWARE.
16
- */
17
-
18
- import { w3cwebsocket as W3CWebSocket } from 'websocket'
19
- import { EventEmitter } from 'events'
20
- import JsonBig from '../utils/json-big'
21
- import { pascalToSnake } from '../utils/string'
22
- import { awaitingConnection, awaitingReconnection, channelOpen } from './handlers'
23
-
24
- // Send ping message every 10 seconds
25
- const PING_TIMEOUT_MS = 10000
26
- // Close connection if pong message is not received within 5 seconds
27
- const PONG_TIMEOUT_MS = 5000
28
-
29
- export const options = new WeakMap()
30
- export const status = new WeakMap()
31
- export const state = new WeakMap()
32
- const fsm = new WeakMap()
33
- const websockets = new WeakMap()
34
- export const eventEmitters = new WeakMap()
35
- const messageQueue = new WeakMap()
36
- const messageQueueLocked = new WeakMap()
37
- const actionQueue = new WeakMap()
38
- const actionQueueLocked = new WeakMap()
39
- const sequence = new WeakMap()
40
- export const channelId = new WeakMap()
41
- const rpcCallbacks = new WeakMap()
42
- const pingTimeoutId = new WeakMap()
43
- const pongTimeoutId = new WeakMap()
44
- export const fsmId = new WeakMap()
45
-
46
- export function emit (channel, ...args) {
47
- eventEmitters.get(channel).emit(...args)
48
- }
49
-
50
- function enterState (channel, nextState) {
51
- if (!nextState) {
52
- throw new Error('State Channels FSM entered unknown state')
53
- }
54
- fsm.set(channel, nextState)
55
- if (nextState.handler.enter) {
56
- nextState.handler.enter(channel)
57
- }
58
- dequeueAction(channel)
59
- }
60
-
61
- export function changeStatus (channel, newStatus) {
62
- const prevStatus = status.get(channel)
63
- if (newStatus !== prevStatus) {
64
- status.set(channel, newStatus)
65
- emit(channel, 'statusChanged', newStatus)
66
- }
67
- }
68
-
69
- export function changeState (channel, newState) {
70
- state.set(channel, newState)
71
- emit(channel, 'stateChanged', newState)
72
- }
73
-
74
- export function send (channel, message) {
75
- const { debug = false } = options.get(channel)
76
- if (debug) console.log('Send message: ', message)
77
- websockets.get(channel).send(JsonBig.stringify(message))
78
- }
79
-
80
- export function enqueueAction (channel, guard, action) {
81
- actionQueue.set(channel, [
82
- ...actionQueue.get(channel) || [],
83
- { guard, action }
84
- ])
85
- dequeueAction(channel)
86
- }
87
-
88
- async function dequeueAction (channel) {
89
- const locked = actionQueueLocked.get(channel)
90
- const queue = actionQueue.get(channel) || []
91
- if (locked || !queue.length) {
92
- return
93
- }
94
- const state = fsm.get(channel)
95
- const index = queue.findIndex(item => item.guard(channel, state))
96
- if (index === -1) {
97
- return
98
- }
99
- actionQueue.set(channel, queue.filter((_, i) => index !== i))
100
- actionQueueLocked.set(channel, true)
101
- const nextState = await Promise.resolve(queue[index].action(channel, state))
102
- actionQueueLocked.set(channel, false)
103
- enterState(channel, nextState)
104
- }
105
-
106
- async function handleMessage (channel, message) {
107
- const { handler, state } = fsm.get(channel)
108
- enterState(channel, await Promise.resolve(handler(channel, message, state)))
109
- }
110
-
111
- async function dequeueMessage (channel) {
112
- const queue = messageQueue.get(channel)
113
- if (messageQueueLocked.get(channel) || !queue.length) {
114
- return
115
- }
116
- const [message, ...remaining] = queue
117
- messageQueue.set(channel, remaining || [])
118
- messageQueueLocked.set(channel, true)
119
- await handleMessage(channel, message)
120
- messageQueueLocked.set(channel, false)
121
- dequeueMessage(channel)
122
- }
123
-
124
- function ping (channel) {
125
- clearTimeout(pingTimeoutId.get(channel))
126
- clearTimeout(pongTimeoutId.get(channel))
127
- pingTimeoutId.set(channel, setTimeout(() => {
128
- send(channel, {
129
- jsonrpc: '2.0',
130
- method: 'channels.system',
131
- params: {
132
- action: 'ping'
133
- }
134
- })
135
- pongTimeoutId.set(channel, setTimeout(() => {
136
- disconnect(channel)
137
- emit(channel, 'error', new Error('Server pong timed out'))
138
- }, PONG_TIMEOUT_MS))
139
- }, PING_TIMEOUT_MS))
140
- }
141
-
142
- function onMessage (channel, data) {
143
- const message = JsonBig.parse(data)
144
- const { debug = false } = options.get(channel)
145
- if (debug) console.log('Receive message: ', message)
146
- if (message.id) {
147
- const callback = rpcCallbacks.get(channel).get(message.id)
148
- try {
149
- callback(message)
150
- } finally {
151
- rpcCallbacks.get(channel).delete(message.id)
152
- }
153
- } else if (message.method === 'channels.message') {
154
- emit(channel, 'message', message.params.data.message)
155
- } else if (message.method === 'channels.system.pong') {
156
- if (
157
- (message.params.channel_id === channelId.get(channel)) ||
158
- // Skip channelId check if channelId is not known yet
159
- (channelId.get(channel) == null)
160
- ) {
161
- ping(channel)
162
- }
163
- } else {
164
- messageQueue.set(channel, [...(messageQueue.get(channel) || []), message])
165
- dequeueMessage(channel)
166
- }
167
- }
168
-
169
- function wrapCallErrorMessage (message) {
170
- const [{ message: details } = {}] = message.error.data || []
171
- if (details) {
172
- return new Error(`${message.error.message}: ${details}`)
173
- }
174
- return new Error(message.error.message)
175
- }
176
-
177
- export function call (channel, method, params) {
178
- return new Promise((resolve, reject) => {
179
- const id = sequence.set(channel, sequence.get(channel) + 1).get(channel)
180
- rpcCallbacks.get(channel).set(id, (message) => {
181
- if (message.result) return resolve(message.result)
182
- if (message.error) return reject(wrapCallErrorMessage(message))
183
- })
184
- send(channel, { jsonrpc: '2.0', method, id, params })
185
- })
186
- }
187
-
188
- export function disconnect (channel) {
189
- websockets.get(channel).close()
190
- clearTimeout(pingTimeoutId.get(channel))
191
- clearTimeout(pongTimeoutId.get(channel))
192
- }
193
-
194
- export async function initialize (channel, { url, ...channelOptions }) {
195
- options.set(channel, channelOptions)
196
- fsm.set(channel, {
197
- handler: channelOptions.existingFsmId ? awaitingReconnection : awaitingConnection
198
- })
199
- eventEmitters.set(channel, new EventEmitter())
200
- sequence.set(channel, 0)
201
- rpcCallbacks.set(channel, new Map())
202
-
203
- const wsUrl = new URL(url)
204
- Object.entries(channelOptions)
205
- .filter(([key]) => !['sign', 'debug'].includes(key))
206
- .forEach(([key, value]) => wsUrl.searchParams.set(pascalToSnake(key), value))
207
- wsUrl.searchParams.set('protocol', 'json-rpc')
208
- changeStatus(channel, 'connecting')
209
- const ws = new W3CWebSocket(wsUrl.toString())
210
- await new Promise((resolve, reject) => Object.assign(ws, {
211
- onerror: reject,
212
- onopen: () => {
213
- resolve()
214
- changeStatus(channel, 'connected')
215
- if (channelOptions.reconnectTx) {
216
- enterState(channel, { handler: channelOpen })
217
- setTimeout(async () => changeState(channel,
218
- (await call(channel, 'channels.get.offchain_state', {})).signed_tx
219
- ))
220
- }
221
- ping(channel)
222
- },
223
- onclose: () => {
224
- changeStatus(channel, 'disconnected')
225
- clearTimeout(pingTimeoutId.get(channel))
226
- clearTimeout(pongTimeoutId.get(channel))
227
- },
228
- onmessage: ({ data }) => onMessage(channel, data)
229
- }))
230
- websockets.set(channel, ws)
231
- }
@@ -1,317 +0,0 @@
1
- /*
2
- * ISC License (ISC)
3
- * Copyright (c) 2018 aeternity developers
4
- *
5
- * Permission to use, copy, modify, and/or distribute this software for any
6
- * purpose with or without fee is hereby granted, provided that the above
7
- * copyright notice and this permission notice appear in all copies.
8
- *
9
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
10
- * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11
- * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
12
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13
- * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
14
- * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15
- * PERFORMANCE OF THIS SOFTWARE.
16
- */
17
-
18
- /**
19
- * ContractACI module
20
- *
21
- * @module @aeternity/aepp-sdk/es/contract/aci
22
- * @export getContractInstance
23
- */
24
-
25
- import * as R from 'ramda'
26
- import BigNumber from 'bignumber.js'
27
- import { Encoder as Calldata } from '@aeternity/aepp-calldata'
28
- import { decodeEvents } from './transformation'
29
- import { DRY_RUN_ACCOUNT, DEPOSIT } from '../../tx/builder/schema'
30
- import TxObject from '../../tx/tx-object'
31
- import { decode } from '../../tx/builder/helpers'
32
-
33
- /**
34
- * Get function schema from contract ACI object
35
- * @param {Object} aci Contract ACI object
36
- * @param {String} name Function name
37
- * @param external
38
- * @return {Object} function ACI
39
- */
40
- function getFunctionACI (aci, name, external) {
41
- const fn = aci.functions.find(f => f.name === name)
42
- if (!fn && name !== 'init') throw new Error(`Function ${name} doesn't exist in contract`)
43
-
44
- return {
45
- ...fn,
46
- bindings: [
47
- {
48
- state: aci.state,
49
- type_defs: aci.type_defs,
50
- name: aci.name
51
- },
52
- ...external.map(R.pick(['state', 'type_defs', 'name']))
53
- ],
54
- event: aci.event ? aci.event.variant : []
55
- }
56
- }
57
-
58
- /**
59
- * Generate contract ACI object with predefined js methods for contract usage - can be used for
60
- * creating a reference to already deployed contracts
61
- * @alias module:@aeternity/aepp-sdk/es/contract/aci
62
- * @param {Object} [options={}] Options object
63
- * @param {String} [options.source] Contract source code
64
- * @param {String} [options.bytecode] Contract bytecode
65
- * @param {Object} [options.aci] Contract ACI
66
- * @param {String} [options.contractAddress] Contract address
67
- * @param {Object} [options.filesystem] Contact source external namespaces map
68
- * @param {Boolean} [options.validateBytecode] Compare source code with on-chain version
69
- * @return {ContractInstance} JS Contract API
70
- * @example
71
- * const contractIns = await client.getContractInstance({ source })
72
- * await contractIns.deploy([321]) or await contractIns.methods.init(321)
73
- * const callResult = await contractIns.call('setState', [123]) or
74
- * await contractIns.methods.setState.send(123, options)
75
- * const staticCallResult = await contractIns.call('setState', [123], { callStatic: true }) or
76
- * await contractIns.methods.setState.get(123, options)
77
- * Also you can call contract like: await contractIns.methods.setState(123, options)
78
- * Then sdk decide to make on-chain or static call(dry-run API) transaction based on function is
79
- * stateful or not
80
- */
81
- export default async function getContractInstance ({
82
- source,
83
- bytecode,
84
- aci,
85
- contractAddress,
86
- filesystem = {},
87
- validateBytecode,
88
- ...otherOptions
89
- } = {}) {
90
- aci = aci || (source && await this.contractGetACI(source, { filesystem }))
91
- if (!aci) throw new Error('Either ACI or source code is required')
92
- contractAddress = contractAddress && await this.resolveName(
93
- contractAddress, 'contract_pubkey', { resolveByNode: true }
94
- )
95
- if (!contractAddress && !source && !bytecode) throw new Error('Can\'t create instance by ACI without address')
96
-
97
- if (contractAddress) {
98
- const contract = await this.getContract(contractAddress).catch(() => null)
99
- if (!contract) throw new Error(`Contract with address ${contractAddress} not found on-chain`)
100
- if (!contract.active) throw new Error(`Contract with address ${contractAddress} not active`)
101
- }
102
-
103
- const instance = {
104
- interface: R.defaultTo(null, R.prop('interface', aci)),
105
- aci: R.defaultTo(null, R.path(['encoded_aci', 'contract'], aci)),
106
- calldata: new Calldata([aci.encoded_aci, ...aci.external_encoded_aci]),
107
- externalAci: (aci.external_encoded_aci ?? []).map(a => a.contract || a.namespace),
108
- source,
109
- bytecode,
110
- deployInfo: { address: contractAddress },
111
- options: {
112
- ...this.Ae.defaults,
113
- callStatic: false,
114
- filesystem,
115
- ...otherOptions
116
- },
117
- compilerVersion: this.compilerVersion
118
- }
119
-
120
- if (validateBytecode) {
121
- if (!contractAddress) throw new Error('Can\'t validate bytecode without contract address')
122
- const onChanBytecode = (await this.getContractByteCode(contractAddress)).bytecode
123
- const isValid = (source && await this
124
- .validateByteCodeAPI(onChanBytecode, source, instance.options).catch(() => false)) ||
125
- bytecode === onChanBytecode
126
- if (!isValid) throw new Error(`Contract ${source ? 'source' : 'bytecode'} do not correspond to the bytecode deployed on the chain`)
127
- }
128
-
129
- /**
130
- * Compile contract
131
- * @alias module:@aeternity/aepp-sdk/es/contract/aci
132
- * @rtype () => ContractInstance: Object
133
- * @return {String} bytecode bytecode
134
- */
135
- instance.compile = async (options = {}) => {
136
- if (instance.bytecode) throw new Error('Contract already compiled')
137
- if (!instance.source) throw new Error('Can\'t compile without source code')
138
- const { bytecode } = await this.contractCompile(
139
- instance.source, { ...instance.options, ...options }
140
- )
141
- instance.bytecode = bytecode
142
- return instance.bytecode
143
- }
144
-
145
- const sendAndProcess = async (tx, options) => {
146
- const txData = await this.send(tx, options)
147
- const result = {
148
- hash: txData.hash, tx: TxObject({ tx: txData.rawTx }), txData, rawTx: txData.rawTx
149
- }
150
- if (options.waitMined === false) return result
151
- const txInfo = await this.getTxInfo(txData.hash)
152
- await handleCallError(txInfo)
153
- return { ...result, result: txInfo }
154
- }
155
-
156
- const handleCallError = ({ returnType, returnValue }) => {
157
- let message
158
- // TODO: ensure that it works correctly https://github.com/aeternity/aepp-calldata-js/issues/88
159
- switch (returnType) {
160
- case 'ok': return
161
- case 'revert':
162
- message = instance.calldata.decodeFateString(returnValue)
163
- break
164
- case 'error':
165
- message = decode(returnValue).toString()
166
- break
167
- default: throw new Error(`Unknown returnType: ${returnType}`)
168
- }
169
- throw new Error(`Invocation failed${message ? `: "${message}"` : ''}`)
170
- }
171
-
172
- /**
173
- * Deploy contract
174
- * @alias module:@aeternity/aepp-sdk/es/contract/aci
175
- * @rtype (init: Array, options: Object) => ContractInstance: Object
176
- * @param {Array} params Contract init function arguments array
177
- * @param {Object} [options] options
178
- * @return {Object} deploy info
179
- */
180
- instance.deploy = async (params = [], options) => {
181
- const opt = { ...instance.options, ...options, deposit: DEPOSIT }
182
- if (!instance.bytecode) await instance.compile(opt)
183
- if (opt.callStatic) return instance.call('init', params, opt)
184
- if (instance.deployInfo.address) throw new Error('Contract already deployed')
185
-
186
- const ownerId = await this.address(opt)
187
- const { tx, contractId } = await this.contractCreateTx({
188
- ...opt,
189
- callData: instance.calldata.encode(instance.aci.name, 'init', params),
190
- code: instance.bytecode,
191
- ownerId
192
- })
193
- const { hash, rawTx, result, txData } = await sendAndProcess(tx, opt)
194
- instance.deployInfo = Object.freeze({
195
- result,
196
- owner: ownerId,
197
- transaction: hash,
198
- rawTx,
199
- txData,
200
- address: contractId,
201
- call: (name, args, options) =>
202
- this.contractCall(instance.source, contractId, name, args, { ...opt, ...options }),
203
- callStatic: (name, args, options) =>
204
- this.contractCallStatic(instance.source, contractId, name, args, { ...opt, ...options }),
205
- createdAt: new Date()
206
- })
207
- return instance.deployInfo
208
- }
209
-
210
- /**
211
- * Call contract function
212
- * @alias module:@aeternity/aepp-sdk/es/contract/aci
213
- * @rtype (init: Array, options: Object = { callStatic: false }) => CallResult: Object
214
- * @param {String} fn Function name
215
- * @param {Array} params Array of function arguments
216
- * @param {Object} [options={}] Array of function arguments
217
- * @param {Boolean} [options.callStatic=false] Static function call
218
- * @return {Object} CallResult
219
- */
220
- instance.call = async (fn, params = [], options = {}) => {
221
- const opt = { ...instance.options, ...options }
222
- const fnACI = getFunctionACI(instance.aci, fn, instance.externalAci)
223
- const contractId = instance.deployInfo.address
224
-
225
- if (!fn) throw new Error('Function name is required')
226
- if (fn === 'init' && !opt.callStatic) throw new Error('"init" can be called only via dryRun')
227
- if (!contractId && fn !== 'init') throw new Error('You need to deploy contract before calling!')
228
- if (
229
- BigNumber(opt.amount).gt(0) &&
230
- (Object.prototype.hasOwnProperty.call(fnACI, 'payable') && !fnACI.payable)
231
- ) throw new Error(`You try to pay "${opt.amount}" to function "${fn}" which is not payable. Only payable function can accept tokens`)
232
-
233
- const callerId = await this.address(opt).catch(error => {
234
- if (opt.callStatic) return DRY_RUN_ACCOUNT.pub
235
- else throw error
236
- })
237
- const callData = instance.calldata.encode(instance.aci.name, fn, params)
238
-
239
- let res
240
- if (opt.callStatic) {
241
- if (typeof opt.top === 'number') {
242
- opt.top = (await this.getKeyBlock(opt.top)).hash
243
- }
244
- const txOpt = {
245
- ...opt,
246
- callData,
247
- nonce: opt.top && (await this.getAccount(callerId, { hash: opt.top })).nonce + 1
248
- }
249
- const tx = fn === 'init'
250
- ? (await this.contractCreateTx({ ...txOpt, code: instance.bytecode, ownerId: callerId })).tx
251
- : await this.contractCallTx({ ...txOpt, callerId, contractId })
252
-
253
- const { callObj, ...dryRunOther } = await this.txDryRun(tx, callerId, opt)
254
- await handleCallError(callObj)
255
- res = { ...dryRunOther, tx: TxObject({ tx }), result: callObj }
256
- } else {
257
- const tx = await this.contractCallTx({ ...opt, callerId, contractId, callData })
258
- res = await sendAndProcess(tx, opt)
259
- }
260
- if (opt.waitMined || opt.callStatic) {
261
- res.decodedResult = fnACI.returns && fnACI.returns !== 'unit' && fn !== 'init' &&
262
- instance.calldata.decode(instance.aci.name, fn, res.result.returnValue)
263
- res.decodedEvents = instance.decodeEvents(res.result.log)
264
- }
265
- return res
266
- }
267
-
268
- /**
269
- * Decode Events
270
- * @alias module:@aeternity/aepp-sdk/es/contract/aci
271
- * @rtype (events: Array) => DecodedEvents: Array
272
- * @param {Array} events Array of encoded events(callRes.result.log)
273
- * @return {Object} DecodedEvents
274
- */
275
- instance.decodeEvents = (events) => {
276
- const eventsACI = instance.aci.event ? instance.aci.event.variant : []
277
- const eventsSchema = eventsACI.map(e => {
278
- const name = Object.keys(e)[0]
279
- return { name, types: e[name] }
280
- })
281
-
282
- return decodeEvents(events, eventsSchema)
283
- }
284
-
285
- /**
286
- * Generate proto function based on contract function using Contract ACI schema
287
- * All function can be called like:
288
- * 'await contract.methods.testFunction()' -> then sdk will decide to use dry-run or send tx
289
- * on-chain base on if function stateful or not.
290
- * Also you can manually do that:
291
- * `await contract.methods.testFunction.get()` -> use call-static(dry-run)
292
- * `await contract.methods.testFunction.send()` -> send tx on-chain
293
- */
294
- instance.methods = Object.fromEntries(instance.aci.functions
295
- .map(({ name, arguments: aciArgs, stateful }) => {
296
- const genHandler = callStatic => (...args) => {
297
- const options = args.length === aciArgs.length + 1 ? args.pop() : {}
298
- if (typeof options !== 'object') throw new Error(`Options should be an object: ${options}`)
299
- if (name === 'init') return instance.deploy(args, { callStatic, ...options })
300
- return instance.call(name, args, { callStatic, ...options })
301
- }
302
- return [
303
- name,
304
- Object.assign(
305
- genHandler(name === 'init' ? false : !stateful),
306
- {
307
- get: genHandler(true),
308
- send: genHandler(false),
309
- decodeEvents: events => instance.decodeEvents(events)
310
- }
311
- )
312
- ]
313
- })
314
- )
315
-
316
- return instance
317
- }
@@ -1,72 +0,0 @@
1
- import { toBytes } from '../../utils/bytes'
2
- import { decode } from '../../tx/builder/helpers'
3
- import { parseBigNumber } from '../../utils/bignumber'
4
- import { addressFromDecimal, hash } from '../../utils/crypto'
5
-
6
- export const SOPHIA_TYPES = [
7
- 'int',
8
- 'string',
9
- 'tuple',
10
- 'address',
11
- 'bool',
12
- 'list',
13
- 'map',
14
- 'record',
15
- 'option',
16
- 'oracle',
17
- 'oracleQuery',
18
- 'hash',
19
- 'signature',
20
- 'bytes',
21
- 'variant'
22
- ].reduce((acc, type) => ({ ...acc, [type]: type }), { ChainTtl: 'Chain.ttl' })
23
-
24
- /**
25
- * Decode events fields
26
- * @param {Object[]} events Array of events with encoded fields
27
- * @param {Array} schemas Smart contract event ACI schemas
28
- * @return {Object}
29
- */
30
- export const decodeEvents = (events, schemas = []) => events.reduce((acc, event) => {
31
- const [nameHash, ...params] = event.topics
32
- const schema = schemas.find((s) => hash(s.name).equals(toBytes(nameHash, true)))
33
- if (!schema) return acc
34
- const stringCount = schema.types.filter(t => t === SOPHIA_TYPES.string).length
35
- if (stringCount > 1) throw new Error(`Event schema contains more than one string: ${schema.types}`)
36
- const topicsCount = schema.types.length - stringCount
37
- if (topicsCount !== params.length) {
38
- throw new Error(`Schema defines ${topicsCount} types, but ${params.length} topics present`)
39
- }
40
-
41
- acc.push({
42
- ...event,
43
- name: schema.name,
44
- decoded: schema.types.map((type) =>
45
- decodeEventField(type === SOPHIA_TYPES.string ? event.data : params.shift(), type))
46
- })
47
-
48
- return acc
49
- }, [])
50
-
51
- /**
52
- * Transform Event based on type
53
- * @param {String|Number} field Event data
54
- * @param {String} type Event type from schema
55
- * @return {*}
56
- */
57
- function decodeEventField (field, type) {
58
- switch (type) {
59
- case SOPHIA_TYPES.int:
60
- return parseBigNumber(field)
61
- case SOPHIA_TYPES.bool:
62
- return !!field
63
- case SOPHIA_TYPES.hash:
64
- return toBytes(field, true).toString('hex')
65
- case SOPHIA_TYPES.address:
66
- return addressFromDecimal(field)
67
- case SOPHIA_TYPES.string:
68
- return decode(field).toString('utf-8')
69
- default:
70
- return toBytes(field, true)
71
- }
72
- }