@aeternity/aepp-sdk 12.1.2 → 13.0.0-alpha.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 (475) hide show
  1. package/dist/aepp-sdk.browser-script.js +1 -1
  2. package/dist/aepp-sdk.browser-script.js.map +1 -1
  3. package/dist/aepp-sdk.browser.js +1 -1
  4. package/dist/aepp-sdk.browser.js.map +1 -1
  5. package/dist/aepp-sdk.js +6580 -8860
  6. package/dist/aepp-sdk.js.map +1 -1
  7. package/es/AeSdk.d.ts +7 -3
  8. package/es/AeSdk.mjs +17 -22
  9. package/es/AeSdk.mjs.map +1 -1
  10. package/es/AeSdkAepp.d.ts +6 -5
  11. package/es/AeSdkAepp.mjs +7 -30
  12. package/es/AeSdkAepp.mjs.map +1 -1
  13. package/es/AeSdkBase.d.ts +18 -140
  14. package/es/AeSdkBase.mjs +27 -185
  15. package/es/AeSdkBase.mjs.map +1 -1
  16. package/es/AeSdkMethods.d.ts +124 -0
  17. package/es/AeSdkMethods.mjs +122 -0
  18. package/es/AeSdkMethods.mjs.map +1 -0
  19. package/es/AeSdkWallet.d.ts +7 -21
  20. package/es/AeSdkWallet.mjs +38 -86
  21. package/es/AeSdkWallet.mjs.map +1 -1
  22. package/es/Node.d.ts +7 -12
  23. package/es/Node.mjs +34 -47
  24. package/es/Node.mjs.map +1 -1
  25. package/es/account/Base.d.ts +24 -40
  26. package/es/account/Base.mjs +1 -101
  27. package/es/account/Base.mjs.map +1 -1
  28. package/es/account/Generalized.d.ts +16 -0
  29. package/es/account/Generalized.mjs +111 -0
  30. package/es/account/Generalized.mjs.map +1 -0
  31. package/es/account/Ledger.d.ts +28 -0
  32. package/es/account/Ledger.mjs +101 -0
  33. package/es/account/Ledger.mjs.map +1 -0
  34. package/es/account/LedgerFactory.d.ts +39 -0
  35. package/es/account/LedgerFactory.mjs +81 -0
  36. package/es/account/LedgerFactory.mjs.map +1 -0
  37. package/es/account/Memory.d.ts +13 -17
  38. package/es/account/Memory.mjs +43 -65
  39. package/es/account/Memory.mjs.map +1 -1
  40. package/es/account/Rpc.d.ts +6 -8
  41. package/es/account/Rpc.mjs +14 -32
  42. package/es/account/Rpc.mjs.map +1 -1
  43. package/es/aens.d.ts +3 -3
  44. package/es/aens.mjs +42 -41
  45. package/es/aens.mjs.map +1 -1
  46. package/es/aepp-wallet-communication/connection/Browser.mjs +9 -13
  47. package/es/aepp-wallet-communication/connection/Browser.mjs.map +1 -1
  48. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +3 -7
  49. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -1
  50. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.d.ts +1 -1
  51. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs +0 -31
  52. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs.map +1 -1
  53. package/es/aepp-wallet-communication/connection-proxy.mjs.map +1 -1
  54. package/es/aepp-wallet-communication/rpc/RpcClient.d.ts +3 -3
  55. package/es/aepp-wallet-communication/rpc/RpcClient.mjs +4 -41
  56. package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -1
  57. package/es/aepp-wallet-communication/rpc/types.d.ts +7 -1
  58. package/es/aepp-wallet-communication/rpc/types.mjs.map +1 -1
  59. package/es/aepp-wallet-communication/schema.mjs +14 -68
  60. package/es/aepp-wallet-communication/schema.mjs.map +1 -1
  61. package/es/aepp-wallet-communication/wallet-detector.mjs +0 -3
  62. package/es/aepp-wallet-communication/wallet-detector.mjs.map +1 -1
  63. package/es/apis/compiler/compiler.d.ts +23 -29
  64. package/es/apis/compiler/compiler.mjs +128 -189
  65. package/es/apis/compiler/compiler.mjs.map +1 -1
  66. package/es/apis/compiler/index.mjs.map +1 -1
  67. package/es/apis/compiler/models/index.d.ts +82 -135
  68. package/es/apis/compiler/models/index.mjs +1 -47
  69. package/es/apis/compiler/models/index.mjs.map +1 -1
  70. package/es/apis/compiler/models/mappers.d.ts +8 -8
  71. package/es/apis/compiler/models/mappers.mjs +165 -183
  72. package/es/apis/compiler/models/mappers.mjs.map +1 -1
  73. package/es/apis/compiler/models/parameters.d.ts +0 -1
  74. package/es/apis/compiler/models/parameters.mjs +5 -9
  75. package/es/apis/compiler/models/parameters.mjs.map +1 -1
  76. package/es/apis/node/index.mjs.map +1 -1
  77. package/es/apis/node/models/index.d.ts +48 -48
  78. package/es/apis/node/models/mappers.mjs +12 -6
  79. package/es/apis/node/models/mappers.mjs.map +1 -1
  80. package/es/apis/node/models/parameters.mjs.map +1 -1
  81. package/es/apis/node/node.mjs +43 -84
  82. package/es/apis/node/node.mjs.map +1 -1
  83. package/es/chain.d.ts +1 -1
  84. package/es/chain.mjs +33 -58
  85. package/es/chain.mjs.map +1 -1
  86. package/es/channel/Base.d.ts +195 -0
  87. package/es/channel/Base.mjs +290 -0
  88. package/es/channel/Base.mjs.map +1 -0
  89. package/es/channel/Contract.d.ts +247 -0
  90. package/es/channel/Contract.mjs +420 -0
  91. package/es/channel/Contract.mjs.map +1 -0
  92. package/es/channel/Spend.d.ts +217 -0
  93. package/es/channel/Spend.mjs +383 -0
  94. package/es/channel/Spend.mjs.map +1 -0
  95. package/es/channel/handlers.d.ts +8 -21
  96. package/es/channel/handlers.mjs +141 -891
  97. package/es/channel/handlers.mjs.map +1 -1
  98. package/es/channel/internal.d.ts +27 -21
  99. package/es/channel/internal.mjs +98 -190
  100. package/es/channel/internal.mjs.map +1 -1
  101. package/es/contract/{Compiler.d.ts → CompilerHttp.d.ts} +3 -3
  102. package/es/contract/{Compiler.mjs → CompilerHttp.mjs} +8 -13
  103. package/es/contract/CompilerHttp.mjs.map +1 -0
  104. package/es/contract/Contract.d.ts +235 -0
  105. package/es/contract/Contract.mjs +534 -0
  106. package/es/contract/Contract.mjs.map +1 -0
  107. package/es/contract/ga.d.ts +7 -33
  108. package/es/contract/ga.mjs +20 -112
  109. package/es/contract/ga.mjs.map +1 -1
  110. package/es/index.d.ts +9 -6
  111. package/es/index.mjs +8 -6
  112. package/es/index.mjs.map +1 -1
  113. package/es/oracle.d.ts +5 -5
  114. package/es/oracle.mjs +33 -39
  115. package/es/oracle.mjs.map +1 -1
  116. package/es/spend.d.ts +3 -3
  117. package/es/spend.mjs +17 -20
  118. package/es/spend.mjs.map +1 -1
  119. package/es/tx/builder/constants.d.ts +2 -1
  120. package/es/tx/builder/constants.mjs +12 -12
  121. package/es/tx/builder/constants.mjs.map +1 -1
  122. package/es/tx/builder/field-types/address.d.ts +15 -0
  123. package/es/tx/builder/field-types/address.mjs +42 -0
  124. package/es/tx/builder/field-types/address.mjs.map +1 -0
  125. package/es/tx/builder/field-types/addresses.d.ts +6 -0
  126. package/es/tx/builder/field-types/addresses.mjs +13 -0
  127. package/es/tx/builder/field-types/addresses.mjs.map +1 -0
  128. package/es/tx/builder/field-types/coin-amount.d.ts +1 -2
  129. package/es/tx/builder/field-types/coin-amount.mjs +4 -12
  130. package/es/tx/builder/field-types/coin-amount.mjs.map +1 -1
  131. package/es/tx/builder/field-types/deposit.d.ts +0 -1
  132. package/es/tx/builder/field-types/deposit.mjs +2 -4
  133. package/es/tx/builder/field-types/deposit.mjs.map +1 -1
  134. package/es/tx/builder/field-types/enumeration.d.ts +5 -0
  135. package/es/tx/builder/field-types/enumeration.mjs +21 -0
  136. package/es/tx/builder/field-types/enumeration.mjs.map +1 -0
  137. package/es/tx/builder/field-types/fee.d.ts +1 -9
  138. package/es/tx/builder/field-types/fee.mjs +9 -25
  139. package/es/tx/builder/field-types/fee.mjs.map +1 -1
  140. package/es/tx/builder/field-types/field.mjs +0 -2
  141. package/es/tx/builder/field-types/field.mjs.map +1 -1
  142. package/es/tx/builder/field-types/gas-limit.mjs +4 -9
  143. package/es/tx/builder/field-types/gas-limit.mjs.map +1 -1
  144. package/es/tx/builder/field-types/gas-price.d.ts +1 -2
  145. package/es/tx/builder/field-types/gas-price.mjs +3 -7
  146. package/es/tx/builder/field-types/gas-price.mjs.map +1 -1
  147. package/es/tx/builder/field-types/index.d.ts +23 -11
  148. package/es/tx/builder/field-types/index.mjs +10 -3
  149. package/es/tx/builder/field-types/index.mjs.map +1 -1
  150. package/es/tx/builder/field-types/name-fee.d.ts +0 -1
  151. package/es/tx/builder/field-types/name-fee.mjs +3 -5
  152. package/es/tx/builder/field-types/name-fee.mjs.map +1 -1
  153. package/es/tx/builder/field-types/name-id.d.ts +1 -4
  154. package/es/tx/builder/field-types/name-id.mjs +4 -10
  155. package/es/tx/builder/field-types/name-id.mjs.map +1 -1
  156. package/es/tx/builder/field-types/name.mjs +0 -2
  157. package/es/tx/builder/field-types/name.mjs.map +1 -1
  158. package/es/tx/builder/field-types/pointers.d.ts +23 -0
  159. package/es/tx/builder/field-types/pointers.mjs +36 -0
  160. package/es/tx/builder/field-types/pointers.mjs.map +1 -0
  161. package/es/tx/builder/field-types/short-u-int.mjs +0 -2
  162. package/es/tx/builder/field-types/short-u-int.mjs.map +1 -1
  163. package/es/tx/builder/field-types/u-int.d.ts +1 -1
  164. package/es/tx/builder/field-types/u-int.mjs +3 -4
  165. package/es/tx/builder/field-types/u-int.mjs.map +1 -1
  166. package/es/tx/builder/helpers.d.ts +2 -32
  167. package/es/tx/builder/helpers.mjs +19 -71
  168. package/es/tx/builder/helpers.mjs.map +1 -1
  169. package/es/tx/builder/index.d.ts +1 -21
  170. package/es/tx/builder/index.mjs +29 -148
  171. package/es/tx/builder/index.mjs.map +1 -1
  172. package/es/tx/builder/schema.d.ts +336 -176
  173. package/es/tx/builder/schema.mjs +71 -78
  174. package/es/tx/builder/schema.mjs.map +1 -1
  175. package/es/tx/index.d.ts +3 -33
  176. package/es/tx/index.mjs +26 -43
  177. package/es/tx/index.mjs.map +1 -1
  178. package/es/tx/validator.d.ts +2 -2
  179. package/es/tx/validator.mjs +86 -59
  180. package/es/tx/validator.mjs.map +1 -1
  181. package/es/typings/{@aeternity__argon2-browser → @aeternity__aepp-calldata}/index.d.mjs +0 -0
  182. package/es/typings/@aeternity__aepp-calldata/index.d.mjs.map +1 -0
  183. package/es/utils/amount-formatter.mjs +4 -10
  184. package/es/utils/amount-formatter.mjs.map +1 -1
  185. package/es/utils/autorest.d.ts +1 -0
  186. package/es/utils/autorest.mjs +17 -19
  187. package/es/utils/autorest.mjs.map +1 -1
  188. package/es/utils/bignumber.mjs +4 -7
  189. package/es/utils/bignumber.mjs.map +1 -1
  190. package/es/utils/bytes.d.ts +0 -17
  191. package/es/utils/bytes.mjs +6 -35
  192. package/es/utils/bytes.mjs.map +1 -1
  193. package/es/utils/crypto.d.ts +15 -8
  194. package/es/utils/crypto.mjs +40 -40
  195. package/es/utils/crypto.mjs.map +1 -1
  196. package/es/utils/encoder-types.d.ts +28 -28
  197. package/es/utils/encoder-types.mjs +0 -1
  198. package/es/utils/encoder-types.mjs.map +1 -1
  199. package/es/utils/encoder.d.ts +0 -1
  200. package/es/utils/encoder.mjs +7 -15
  201. package/es/utils/encoder.mjs.map +1 -1
  202. package/es/utils/errors.d.ts +12 -6
  203. package/es/utils/errors.mjs +87 -163
  204. package/es/utils/errors.mjs.map +1 -1
  205. package/es/utils/hd-wallet.d.ts +27 -19
  206. package/es/utils/hd-wallet.mjs +42 -26
  207. package/es/utils/hd-wallet.mjs.map +1 -1
  208. package/es/utils/json-big.mjs +0 -8
  209. package/es/utils/json-big.mjs.map +1 -1
  210. package/es/utils/keystore.d.ts +2 -0
  211. package/es/utils/keystore.mjs +37 -36
  212. package/es/utils/keystore.mjs.map +1 -1
  213. package/es/utils/mptree.d.ts +1 -1
  214. package/es/utils/mptree.mjs +4 -26
  215. package/es/utils/mptree.mjs.map +1 -1
  216. package/es/utils/other.d.ts +3 -1
  217. package/es/utils/other.mjs +11 -7
  218. package/es/utils/other.mjs.map +1 -1
  219. package/es/utils/semver-satisfies.mjs +0 -3
  220. package/es/utils/semver-satisfies.mjs.map +1 -1
  221. package/es/utils/string.d.ts +0 -12
  222. package/es/utils/string.mjs +1 -21
  223. package/es/utils/string.mjs.map +1 -1
  224. package/package.json +87 -48
  225. package/src/AeSdk.ts +15 -11
  226. package/src/AeSdkAepp.ts +9 -7
  227. package/src/AeSdkBase.ts +28 -202
  228. package/src/AeSdkMethods.ts +170 -0
  229. package/src/AeSdkWallet.ts +16 -47
  230. package/src/Node.ts +11 -15
  231. package/src/account/Base.ts +29 -75
  232. package/src/account/Generalized.ts +98 -0
  233. package/src/account/Ledger.ts +131 -0
  234. package/src/account/LedgerFactory.ts +86 -0
  235. package/src/account/Memory.ts +46 -60
  236. package/src/account/Rpc.ts +17 -26
  237. package/src/aens.ts +10 -9
  238. package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +5 -4
  239. package/src/aepp-wallet-communication/connection/BrowserWindowMessage.ts +3 -3
  240. package/src/aepp-wallet-communication/rpc/RpcClient.ts +2 -2
  241. package/src/aepp-wallet-communication/rpc/types.ts +11 -1
  242. package/src/aepp-wallet-communication/schema.ts +18 -18
  243. package/src/apis/compiler/code-model-v4.yaml +681 -888
  244. package/src/apis/compiler/compiler.ts +113 -154
  245. package/src/apis/compiler/models/index.ts +80 -140
  246. package/src/apis/compiler/models/mappers.ts +165 -183
  247. package/src/apis/compiler/models/parameters.ts +6 -12
  248. package/src/chain.ts +6 -3
  249. package/src/channel/Base.ts +327 -0
  250. package/src/channel/Contract.ts +487 -0
  251. package/src/channel/Spend.ts +403 -0
  252. package/src/channel/handlers.ts +154 -573
  253. package/src/channel/internal.ts +113 -142
  254. package/src/contract/{Compiler.ts → CompilerHttp.ts} +5 -5
  255. package/src/contract/Contract.ts +620 -0
  256. package/src/contract/ga.ts +18 -104
  257. package/src/index.ts +9 -8
  258. package/src/oracle.ts +7 -7
  259. package/src/spend.ts +5 -13
  260. package/src/tx/builder/constants.ts +1 -0
  261. package/src/tx/builder/field-types/address.ts +52 -0
  262. package/src/tx/builder/field-types/addresses.ts +18 -0
  263. package/src/tx/builder/field-types/coin-amount.ts +2 -8
  264. package/src/tx/builder/field-types/enumeration.ts +21 -0
  265. package/src/tx/builder/field-types/fee.ts +1 -3
  266. package/src/tx/builder/field-types/gas-limit.ts +2 -2
  267. package/src/tx/builder/field-types/gas-price.ts +0 -2
  268. package/src/tx/builder/field-types/index.ts +16 -6
  269. package/src/tx/builder/field-types/name-fee.ts +1 -1
  270. package/src/tx/builder/field-types/name-id.ts +7 -10
  271. package/src/tx/builder/field-types/pointers.ts +41 -0
  272. package/src/tx/builder/field-types/u-int.ts +3 -2
  273. package/src/tx/builder/helpers.ts +10 -60
  274. package/src/tx/builder/index.ts +6 -65
  275. package/src/tx/builder/schema.ts +89 -100
  276. package/src/tx/index.ts +19 -15
  277. package/src/tx/validator.ts +36 -18
  278. package/src/typings/@aeternity__aepp-calldata/index.d.ts +20 -0
  279. package/src/utils/autorest.ts +16 -1
  280. package/src/utils/bytes.ts +5 -33
  281. package/src/utils/crypto.ts +23 -16
  282. package/src/utils/encoder.ts +0 -1
  283. package/src/utils/errors.ts +18 -12
  284. package/src/utils/hd-wallet.ts +30 -9
  285. package/src/utils/keystore.ts +24 -21
  286. package/src/utils/other.ts +16 -1
  287. package/src/utils/string.ts +0 -20
  288. package/types-legacy/ts4.2/AeSdk.d.ts +41 -0
  289. package/types-legacy/ts4.2/AeSdkAepp.d.ts +71 -0
  290. package/types-legacy/ts4.2/AeSdkBase.d.ts +91 -0
  291. package/types-legacy/ts4.2/AeSdkMethods.d.ts +141 -0
  292. package/types-legacy/ts4.2/AeSdkWallet.d.ts +90 -0
  293. package/types-legacy/ts4.2/Node.d.ts +78 -0
  294. package/types-legacy/ts4.2/account/Base.d.ts +52 -0
  295. package/types-legacy/ts4.2/account/Generalized.d.ts +16 -0
  296. package/types-legacy/ts4.2/account/Ledger.d.ts +28 -0
  297. package/types-legacy/ts4.2/account/LedgerFactory.d.ts +39 -0
  298. package/types-legacy/ts4.2/account/Memory.d.ts +22 -0
  299. package/types-legacy/ts4.2/account/Rpc.d.ts +25 -0
  300. package/types-legacy/ts4.2/aens.d.ts +222 -0
  301. package/types-legacy/ts4.2/aepp-wallet-communication/connection/Browser.d.ts +33 -0
  302. package/types-legacy/ts4.2/aepp-wallet-communication/connection/BrowserRuntime.d.ts +18 -0
  303. package/types-legacy/ts4.2/aepp-wallet-communication/connection/BrowserWindowMessage.d.ts +36 -0
  304. package/types-legacy/ts4.2/aepp-wallet-communication/connection-proxy.d.ts +11 -0
  305. package/types-legacy/ts4.2/aepp-wallet-communication/rpc/RpcClient.d.ts +34 -0
  306. package/types-legacy/ts4.2/aepp-wallet-communication/rpc/types.d.ts +83 -0
  307. package/types-legacy/ts4.2/aepp-wallet-communication/schema.d.ts +133 -0
  308. package/types-legacy/ts4.2/aepp-wallet-communication/wallet-detector.d.ts +25 -0
  309. package/types-legacy/ts4.2/apis/compiler/compiler.d.ts +86 -0
  310. package/types-legacy/ts4.2/apis/compiler/index.d.ts +2 -0
  311. package/types-legacy/ts4.2/apis/compiler/models/index.d.ts +195 -0
  312. package/types-legacy/ts4.2/apis/compiler/models/mappers.d.ts +23 -0
  313. package/types-legacy/ts4.2/apis/compiler/models/parameters.d.ts +12 -0
  314. package/types-legacy/ts4.2/apis/node/index.d.ts +2 -0
  315. package/types-legacy/ts4.2/apis/node/models/index.d.ts +1065 -0
  316. package/types-legacy/ts4.2/apis/node/models/mappers.d.ts +95 -0
  317. package/types-legacy/ts4.2/apis/node/models/parameters.d.ts +17 -0
  318. package/types-legacy/ts4.2/apis/node/node.d.ts +215 -0
  319. package/types-legacy/ts4.2/chain.d.ts +248 -0
  320. package/types-legacy/ts4.2/channel/Base.d.ts +194 -0
  321. package/types-legacy/ts4.2/channel/Contract.d.ts +247 -0
  322. package/types-legacy/ts4.2/channel/Spend.d.ts +217 -0
  323. package/types-legacy/ts4.2/channel/handlers.d.ts +21 -0
  324. package/types-legacy/ts4.2/channel/internal.d.ts +107 -0
  325. package/types-legacy/ts4.2/contract/CompilerHttp.d.ts +18 -0
  326. package/types-legacy/ts4.2/contract/Contract.d.ts +237 -0
  327. package/types-legacy/ts4.2/contract/ga.d.ts +43 -0
  328. package/types-legacy/ts4.2/globals.d.ts +16 -0
  329. package/types-legacy/ts4.2/index.d.ts +39 -0
  330. package/types-legacy/ts4.2/oracle.d.ts +161 -0
  331. package/types-legacy/ts4.2/spend.d.ts +62 -0
  332. package/types-legacy/ts4.2/tx/builder/constants.d.ts +71 -0
  333. package/types-legacy/ts4.2/tx/builder/field-types/address.d.ts +22 -0
  334. package/types-legacy/ts4.2/tx/builder/field-types/addresses.d.ts +6 -0
  335. package/types-legacy/ts4.2/tx/builder/field-types/coin-amount.d.ts +12 -0
  336. package/types-legacy/ts4.2/tx/builder/field-types/deposit.d.ts +14 -0
  337. package/types-legacy/ts4.2/tx/builder/field-types/enumeration.d.ts +5 -0
  338. package/types-legacy/ts4.2/tx/builder/field-types/fee.d.ts +17 -0
  339. package/types-legacy/ts4.2/tx/builder/field-types/field.d.ts +6 -0
  340. package/types-legacy/ts4.2/tx/builder/field-types/gas-limit.d.ts +12 -0
  341. package/types-legacy/ts4.2/tx/builder/field-types/gas-price.d.ts +7 -0
  342. package/types-legacy/ts4.2/tx/builder/field-types/index.d.ts +85 -0
  343. package/types-legacy/ts4.2/tx/builder/field-types/name-fee.d.ts +19 -0
  344. package/types-legacy/ts4.2/tx/builder/field-types/name-id.d.ts +11 -0
  345. package/types-legacy/ts4.2/tx/builder/field-types/name.d.ts +13 -0
  346. package/types-legacy/ts4.2/tx/builder/field-types/pointers.d.ts +26 -0
  347. package/types-legacy/ts4.2/tx/builder/field-types/short-u-int.d.ts +6 -0
  348. package/types-legacy/ts4.2/tx/builder/field-types/u-int.d.ts +8 -0
  349. package/types-legacy/ts4.2/tx/builder/helpers.d.ts +112 -0
  350. package/types-legacy/ts4.2/tx/builder/index.d.ts +68 -0
  351. package/types-legacy/ts4.2/tx/builder/schema.d.ts +2963 -0
  352. package/types-legacy/ts4.2/tx/index.d.ts +34 -0
  353. package/types-legacy/ts4.2/tx/validator.d.ts +20 -0
  354. package/types-legacy/ts4.2/utils/amount-formatter.d.ts +42 -0
  355. package/types-legacy/ts4.2/utils/autorest.d.ts +7 -0
  356. package/types-legacy/ts4.2/utils/bignumber.d.ts +13 -0
  357. package/types-legacy/ts4.2/utils/bytes.d.ts +9 -0
  358. package/types-legacy/ts4.2/utils/crypto.d.ts +95 -0
  359. package/types-legacy/ts4.2/utils/encoder-types.d.ts +61 -0
  360. package/types-legacy/ts4.2/utils/encoder.d.ts +24 -0
  361. package/types-legacy/ts4.2/utils/errors.d.ts +480 -0
  362. package/types-legacy/ts4.2/utils/hd-wallet.d.ts +65 -0
  363. package/types-legacy/ts4.2/utils/json-big.d.ts +5 -0
  364. package/types-legacy/ts4.2/utils/keystore.d.ts +53 -0
  365. package/types-legacy/ts4.2/utils/mptree.d.ts +32 -0
  366. package/types-legacy/ts4.2/utils/other.d.ts +31 -0
  367. package/types-legacy/ts4.2/utils/semver-satisfies.d.ts +1 -0
  368. package/types-legacy/ts4.2/utils/string.d.ts +12 -0
  369. package/types-legacy/ts4.5/AeSdk.d.ts +41 -0
  370. package/types-legacy/ts4.5/AeSdkAepp.d.ts +71 -0
  371. package/types-legacy/ts4.5/AeSdkBase.d.ts +91 -0
  372. package/types-legacy/ts4.5/AeSdkMethods.d.ts +141 -0
  373. package/types-legacy/ts4.5/AeSdkWallet.d.ts +90 -0
  374. package/types-legacy/ts4.5/Node.d.ts +78 -0
  375. package/types-legacy/ts4.5/account/Base.d.ts +52 -0
  376. package/types-legacy/ts4.5/account/Generalized.d.ts +16 -0
  377. package/types-legacy/ts4.5/account/Ledger.d.ts +28 -0
  378. package/types-legacy/ts4.5/account/LedgerFactory.d.ts +39 -0
  379. package/types-legacy/ts4.5/account/Memory.d.ts +22 -0
  380. package/types-legacy/ts4.5/account/Rpc.d.ts +25 -0
  381. package/types-legacy/ts4.5/aens.d.ts +222 -0
  382. package/types-legacy/ts4.5/aepp-wallet-communication/connection/Browser.d.ts +33 -0
  383. package/types-legacy/ts4.5/aepp-wallet-communication/connection/BrowserRuntime.d.ts +18 -0
  384. package/types-legacy/ts4.5/aepp-wallet-communication/connection/BrowserWindowMessage.d.ts +36 -0
  385. package/types-legacy/ts4.5/aepp-wallet-communication/connection-proxy.d.ts +11 -0
  386. package/types-legacy/ts4.5/aepp-wallet-communication/rpc/RpcClient.d.ts +34 -0
  387. package/types-legacy/ts4.5/aepp-wallet-communication/rpc/types.d.ts +83 -0
  388. package/types-legacy/ts4.5/aepp-wallet-communication/schema.d.ts +133 -0
  389. package/types-legacy/ts4.5/aepp-wallet-communication/wallet-detector.d.ts +25 -0
  390. package/types-legacy/ts4.5/apis/compiler/compiler.d.ts +86 -0
  391. package/types-legacy/ts4.5/apis/compiler/index.d.ts +2 -0
  392. package/types-legacy/ts4.5/apis/compiler/models/index.d.ts +195 -0
  393. package/types-legacy/ts4.5/apis/compiler/models/mappers.d.ts +23 -0
  394. package/types-legacy/ts4.5/apis/compiler/models/parameters.d.ts +12 -0
  395. package/types-legacy/ts4.5/apis/node/index.d.ts +2 -0
  396. package/types-legacy/ts4.5/apis/node/models/index.d.ts +1065 -0
  397. package/types-legacy/ts4.5/apis/node/models/mappers.d.ts +95 -0
  398. package/types-legacy/ts4.5/apis/node/models/parameters.d.ts +17 -0
  399. package/types-legacy/ts4.5/apis/node/node.d.ts +215 -0
  400. package/types-legacy/ts4.5/chain.d.ts +248 -0
  401. package/types-legacy/ts4.5/channel/Base.d.ts +194 -0
  402. package/types-legacy/ts4.5/channel/Contract.d.ts +247 -0
  403. package/types-legacy/ts4.5/channel/Spend.d.ts +217 -0
  404. package/types-legacy/ts4.5/channel/handlers.d.ts +21 -0
  405. package/types-legacy/ts4.5/channel/internal.d.ts +107 -0
  406. package/types-legacy/ts4.5/contract/CompilerHttp.d.ts +18 -0
  407. package/types-legacy/ts4.5/contract/Contract.d.ts +237 -0
  408. package/types-legacy/ts4.5/contract/ga.d.ts +43 -0
  409. package/types-legacy/ts4.5/index.d.ts +38 -0
  410. package/types-legacy/ts4.5/oracle.d.ts +161 -0
  411. package/types-legacy/ts4.5/spend.d.ts +62 -0
  412. package/types-legacy/ts4.5/tx/builder/constants.d.ts +71 -0
  413. package/types-legacy/ts4.5/tx/builder/field-types/address.d.ts +22 -0
  414. package/types-legacy/ts4.5/tx/builder/field-types/addresses.d.ts +6 -0
  415. package/types-legacy/ts4.5/tx/builder/field-types/coin-amount.d.ts +12 -0
  416. package/types-legacy/ts4.5/tx/builder/field-types/deposit.d.ts +14 -0
  417. package/types-legacy/ts4.5/tx/builder/field-types/enumeration.d.ts +5 -0
  418. package/types-legacy/ts4.5/tx/builder/field-types/fee.d.ts +17 -0
  419. package/types-legacy/ts4.5/tx/builder/field-types/field.d.ts +6 -0
  420. package/types-legacy/ts4.5/tx/builder/field-types/gas-limit.d.ts +12 -0
  421. package/types-legacy/ts4.5/tx/builder/field-types/gas-price.d.ts +7 -0
  422. package/types-legacy/ts4.5/tx/builder/field-types/index.d.ts +85 -0
  423. package/types-legacy/ts4.5/tx/builder/field-types/name-fee.d.ts +19 -0
  424. package/types-legacy/ts4.5/tx/builder/field-types/name-id.d.ts +11 -0
  425. package/types-legacy/ts4.5/tx/builder/field-types/name.d.ts +13 -0
  426. package/types-legacy/ts4.5/tx/builder/field-types/pointers.d.ts +26 -0
  427. package/types-legacy/ts4.5/tx/builder/field-types/short-u-int.d.ts +6 -0
  428. package/types-legacy/ts4.5/tx/builder/field-types/u-int.d.ts +8 -0
  429. package/types-legacy/ts4.5/tx/builder/helpers.d.ts +112 -0
  430. package/types-legacy/ts4.5/tx/builder/index.d.ts +68 -0
  431. package/types-legacy/ts4.5/tx/builder/schema.d.ts +2963 -0
  432. package/types-legacy/ts4.5/tx/index.d.ts +34 -0
  433. package/types-legacy/ts4.5/tx/validator.d.ts +20 -0
  434. package/types-legacy/ts4.5/utils/amount-formatter.d.ts +42 -0
  435. package/types-legacy/ts4.5/utils/autorest.d.ts +7 -0
  436. package/types-legacy/ts4.5/utils/bignumber.d.ts +13 -0
  437. package/types-legacy/ts4.5/utils/bytes.d.ts +9 -0
  438. package/types-legacy/ts4.5/utils/crypto.d.ts +95 -0
  439. package/types-legacy/ts4.5/utils/encoder-types.d.ts +61 -0
  440. package/types-legacy/ts4.5/utils/encoder.d.ts +24 -0
  441. package/types-legacy/ts4.5/utils/errors.d.ts +480 -0
  442. package/types-legacy/ts4.5/utils/hd-wallet.d.ts +65 -0
  443. package/types-legacy/ts4.5/utils/json-big.d.ts +5 -0
  444. package/types-legacy/ts4.5/utils/keystore.d.ts +53 -0
  445. package/types-legacy/ts4.5/utils/mptree.d.ts +32 -0
  446. package/types-legacy/ts4.5/utils/other.d.ts +31 -0
  447. package/types-legacy/ts4.5/utils/semver-satisfies.d.ts +1 -0
  448. package/types-legacy/ts4.5/utils/string.d.ts +12 -0
  449. package/es/channel/index.d.ts +0 -625
  450. package/es/channel/index.mjs +0 -975
  451. package/es/channel/index.mjs.map +0 -1
  452. package/es/contract/Compiler.mjs.map +0 -1
  453. package/es/contract/aci.d.ts +0 -127
  454. package/es/contract/aci.mjs +0 -509
  455. package/es/contract/aci.mjs.map +0 -1
  456. package/es/contract/methods.d.ts +0 -71
  457. package/es/contract/methods.mjs +0 -104
  458. package/es/contract/methods.mjs.map +0 -1
  459. package/es/deprecated/index.d.ts +0 -143
  460. package/es/deprecated/index.mjs +0 -162
  461. package/es/deprecated/index.mjs.map +0 -1
  462. package/es/deprecated/methods.d.ts +0 -18
  463. package/es/deprecated/methods.mjs +0 -26
  464. package/es/deprecated/methods.mjs.map +0 -1
  465. package/es/tx/builder/address.d.ts +0 -25
  466. package/es/tx/builder/address.mjs +0 -45
  467. package/es/tx/builder/address.mjs.map +0 -1
  468. package/es/typings/@aeternity__argon2-browser/index.d.mjs.map +0 -1
  469. package/src/channel/index.ts +0 -1025
  470. package/src/contract/aci.ts +0 -538
  471. package/src/contract/methods.ts +0 -123
  472. package/src/deprecated/index.ts +0 -172
  473. package/src/deprecated/methods.ts +0 -25
  474. package/src/tx/builder/address.ts +0 -50
  475. package/src/typings/@aeternity__argon2-browser/index.d.ts +0 -3
@@ -0,0 +1,620 @@
1
+ /*
2
+ * ISC License (ISC)
3
+ * Copyright (c) 2022 aeternity developers
4
+ *
5
+ * Permission to use, copy, modify, and/or distribute this software for any
6
+ * purpose with or without fee is hereby granted, provided that the above
7
+ * copyright notice and this permission notice appear in all copies.
8
+ *
9
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
10
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
11
+ * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
12
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
14
+ * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15
+ * PERFORMANCE OF THIS SOFTWARE.
16
+ */
17
+
18
+ /**
19
+ * Contract module - routines to interact with the æternity contract
20
+ *
21
+ * High level documentation of the contracts are available at
22
+ * https://github.com/aeternity/protocol/tree/master/contracts and
23
+ */
24
+
25
+ import { Encoder as Calldata } from '@aeternity/aepp-calldata';
26
+ import { DRY_RUN_ACCOUNT } from '../tx/builder/schema';
27
+ import { Tag, AensName } from '../tx/builder/constants';
28
+ import { buildContractIdByContractTx, unpackTx } from '../tx/builder';
29
+ import { _buildTx } from '../tx';
30
+ import { send } from '../spend';
31
+ import { decode, Encoded } from '../utils/encoder';
32
+ import {
33
+ MissingContractDefError,
34
+ MissingContractAddressError,
35
+ InactiveContractError,
36
+ BytecodeMismatchError,
37
+ DuplicateContractError,
38
+ MissingFunctionNameError,
39
+ InvalidMethodInvocationError,
40
+ NotPayableFunctionError,
41
+ TypeError,
42
+ NodeInvocationError,
43
+ IllegalArgumentError,
44
+ NoSuchContractFunctionError,
45
+ MissingEventDefinitionError,
46
+ AmbiguousEventDefinitionError,
47
+ UnexpectedTsError,
48
+ InternalError,
49
+ NoWalletConnectedError,
50
+ } from '../utils/errors';
51
+ import { hash as calcHash } from '../utils/crypto';
52
+ import { Aci as BaseAci } from '../apis/compiler';
53
+ import {
54
+ ContractCallObject as NodeContractCallObject, ContractCallReturnType, Event as NodeEvent,
55
+ } from '../apis/node';
56
+ import CompilerHttp from './CompilerHttp';
57
+ import Node, { TransformNodeType } from '../Node';
58
+ import {
59
+ getAccount, getContract, getContractByteCode, getKeyBlock, resolveName, txDryRun,
60
+ } from '../chain';
61
+ import AccountBase from '../account/Base';
62
+ import { concatBuffers } from '../utils/other';
63
+ import { isNameValid, produceNameId } from '../tx/builder/helpers';
64
+
65
+ interface FunctionACI {
66
+ arguments: any[];
67
+ name: string;
68
+ payable: boolean;
69
+ returns: string;
70
+ stateful: boolean;
71
+ }
72
+
73
+ interface Aci extends BaseAci {
74
+ encodedAci: {
75
+ contract: {
76
+ name: string;
77
+ event: any;
78
+ kind: string;
79
+ state: any;
80
+ type_defs: any[];
81
+ functions: FunctionACI[];
82
+ };
83
+ };
84
+ externalEncodedAci: any[];
85
+ }
86
+
87
+ interface Event extends NodeEvent {
88
+ address: Encoded.ContractAddress;
89
+ data: Encoded.ContractBytearray;
90
+ }
91
+
92
+ export interface ContractCallObject extends NodeContractCallObject {
93
+ returnValue: Encoded.ContractBytearray;
94
+ log: Event[];
95
+ }
96
+
97
+ interface DecodedEvent {
98
+ name: string;
99
+ args: unknown[];
100
+ contract: {
101
+ name: string;
102
+ address: Encoded.ContractAddress;
103
+ };
104
+ }
105
+
106
+ type TxData = Awaited<ReturnType<typeof send>>;
107
+
108
+ interface SendAndProcessReturnType {
109
+ result?: TransformNodeType<ContractCallObject>;
110
+ hash: TxData['hash'];
111
+ tx: Awaited<ReturnType<typeof unpackTx<Tag.ContractCallTx | Tag.ContractCreateTx>>>;
112
+ txData: TxData;
113
+ rawTx: Encoded.Transaction;
114
+ }
115
+
116
+ export interface ContractMethodsBase { [key: string]: (...args: any[]) => any }
117
+
118
+ type MethodsToContractApi<M extends ContractMethodsBase> = {
119
+ [Name in keyof M]:
120
+ M[Name] extends (...args: infer Args) => infer Ret
121
+ ? (...args: [
122
+ ...Args,
123
+ ...[] | [Name extends 'init'
124
+ ? Parameters<Contract<M>['$deploy']>[1] : Parameters<Contract<M>['$call']>[2]],
125
+ ]) => Promise<
126
+ Awaited<ReturnType<Contract<M>['$call']>> &
127
+ { decodedResult?: Ret }
128
+ >
129
+ : never
130
+ };
131
+
132
+ type ContractWithMethods<M extends ContractMethodsBase> = Contract<M> & MethodsToContractApi<M>;
133
+
134
+ type MethodNames<M extends ContractMethodsBase> = keyof M & string | 'init';
135
+
136
+ type MethodParameters<M extends ContractMethodsBase, Fn extends MethodNames<M>> =
137
+ Fn extends 'init'
138
+ ? M extends { init: any } ? Parameters<M['init']> : []
139
+ : Parameters<M[Fn]>;
140
+
141
+ /**
142
+ * Generate contract ACI object with predefined js methods for contract usage - can be used for
143
+ * creating a reference to already deployed contracts
144
+ * @category contract
145
+ * @param options - Options object
146
+ * @returns JS Contract API
147
+ * @example
148
+ * ```js
149
+ * const contractIns = await aeSdk.initializeContract({ sourceCode })
150
+ * await contractIns.$deploy([321]) or await contractIns.init(321)
151
+ * const callResult = await contractIns.$call('setState', [123])
152
+ * const staticCallResult = await contractIns.$call('setState', [123], { callStatic: true })
153
+ * ```
154
+ * Also you can call contract like: `await contractIns.setState(123, options)`
155
+ * Then sdk decide to make on-chain or static call(dry-run API) transaction based on function is
156
+ * stateful or not
157
+ */
158
+ class Contract<M extends ContractMethodsBase> {
159
+ /**
160
+ * Helper to generate a signature to delegate
161
+ * - pre-claim/claim/transfer/revoke of a name to a contract.
162
+ * - register/extend/respond of an Oracle to a contract.
163
+ * @category contract
164
+ * @param ids - The list of id's to prepend
165
+ * @param _options - Options
166
+ * @param _options.omitAddress - Prepend delegation signature with an account address
167
+ * @param _options.onAccount - Account to use
168
+ * @returns Signature
169
+ * @example
170
+ * ```js
171
+ * const aeSdk = new AeSdk({ ... })
172
+ * const contract = await aeSdk.initializeContract({ address: 'ct_asd2ks...' })
173
+ * const aensName = 'example.chain'
174
+ * const onAccount = new MemoryAccount(...) // Sign with a specific account
175
+ * // Preclaim signature
176
+ * const preclaimSig = await contract.$createDelegationSignature([], { onAccount })
177
+ * // Claim, transfer and revoke signature
178
+ * const aensDelegationSig = await contract
179
+ * .$createDelegationSignature([aensName], { onAccount })
180
+ * ```
181
+ * @example
182
+ * ```js
183
+ * const aeSdk = new AeSdk({ ... })
184
+ * const contract = await aeSdk.initializeContract({ address: 'ct_asd2ks...' })
185
+ * const oracleQueryId = 'oq_...'
186
+ * const onAccount = new MemoryAccount(...) // Sign with a specific account
187
+ * // Oracle register and extend signature
188
+ * const oracleDelegationSig = await contract.$createDelegationSignature([], { onAccount })
189
+ * // Oracle respond signature
190
+ * const respondSig = await contract
191
+ * .$createDelegationSignature([oracleQueryId], { onAccount, omitAddress: true })
192
+ * ```
193
+ */
194
+ async $createDelegationSignature(
195
+ ids: Array<Encoded.Any | AensName> = [],
196
+ _options?: { omitAddress?: boolean; onAccount?: AccountBase },
197
+ ): Promise<Uint8Array> {
198
+ const options = { ...this.$options, ..._options };
199
+ const contractId = this.$options.address;
200
+ if (options.onAccount == null) throw new IllegalArgumentError('Can\'t create delegation signature without account');
201
+ if (contractId == null) throw new MissingContractAddressError('Can\'t create delegation signature without address');
202
+ return options.onAccount.sign(
203
+ concatBuffers([
204
+ Buffer.from(await options.onNode.getNetworkId()),
205
+ ...options.omitAddress === true ? [] : [decode(options.onAccount.address)],
206
+ ...ids.map((e) => (isNameValid(e) ? produceNameId(e) : e)).map((e) => decode(e)),
207
+ decode(contractId),
208
+ ]),
209
+ options,
210
+ );
211
+ }
212
+
213
+ /**
214
+ * Compile contract
215
+ * @returns bytecode
216
+ */
217
+ async $compile(): Promise<Encoded.ContractBytearray> {
218
+ if (this.$options.bytecode != null) return this.$options.bytecode;
219
+ if (this.$options.sourceCode == null) throw new IllegalArgumentError('Can\'t compile without source code');
220
+ this.$options.bytecode = (await this.$options.onCompiler.compileContract({
221
+ code: this.$options.sourceCode, options: { fileSystem: this.$options.fileSystem },
222
+ })).bytecode as Encoded.ContractBytearray;
223
+ return this.$options.bytecode;
224
+ }
225
+
226
+ protected _handleCallError(
227
+ { returnType, returnValue }: {
228
+ returnType: ContractCallReturnType;
229
+ returnValue: Encoded.ContractBytearray;
230
+ },
231
+ transaction: string,
232
+ ): void {
233
+ let message: string;
234
+ switch (returnType) {
235
+ case 'ok': return;
236
+ case 'revert':
237
+ message = this._calldata.decodeFateString(returnValue);
238
+ break;
239
+ case 'error':
240
+ message = decode(returnValue).toString();
241
+ break;
242
+ default:
243
+ throw new InternalError(`Unknown return type: ${returnType}`);
244
+ }
245
+ throw new NodeInvocationError(message, transaction);
246
+ }
247
+
248
+ protected async _sendAndProcess(
249
+ tx: Encoded.Transaction,
250
+ options: any,
251
+ ): Promise<SendAndProcessReturnType> {
252
+ options = { ...this.$options, ...options };
253
+ const txData = await send(tx, options);
254
+ const result = {
255
+ hash: txData.hash,
256
+ tx: unpackTx<Tag.ContractCallTx | Tag.ContractCreateTx>(txData.rawTx),
257
+ txData,
258
+ rawTx: txData.rawTx,
259
+ };
260
+ if (txData.blockHeight == null) return result;
261
+ const { callInfo } = await this.$options.onNode.getTransactionInfoByHash(txData.hash);
262
+ Object.assign(result.txData, callInfo); // TODO: don't duplicate data in result
263
+ // @ts-expect-error TODO api should be updated to match types
264
+ this._handleCallError(callInfo, tx);
265
+ return { ...result, result: callInfo as TransformNodeType<ContractCallObject> };
266
+ }
267
+
268
+ async _estimateGas<Fn extends MethodNames<M>>(
269
+ name: Fn,
270
+ params: MethodParameters<M, Fn>,
271
+ options: object = {},
272
+ ): Promise<number> {
273
+ const { result } = await this.$call(name, params, { ...options, callStatic: true });
274
+ if (result == null) throw new UnexpectedTsError();
275
+ const { gasUsed } = result;
276
+ // taken from https://github.com/aeternity/aepp-sdk-js/issues/1286#issuecomment-977814771
277
+ return Math.floor(gasUsed * 1.25);
278
+ }
279
+
280
+ /**
281
+ * Deploy contract
282
+ * @param params - Contract init function arguments array
283
+ * @param options - Options
284
+ * @returns deploy info
285
+ */
286
+ async $deploy(
287
+ params: MethodParameters<M, 'init'>,
288
+ options?: Parameters<Contract<M>['$call']>[2] & Parameters<Contract<M>['_sendAndProcess']>[1],
289
+ ): Promise<Omit<SendAndProcessReturnType, 'hash'> & {
290
+ transaction?: Encoded.TxHash;
291
+ owner?: Encoded.AccountAddress;
292
+ address?: Encoded.ContractAddress;
293
+ }> {
294
+ const opt = { ...this.$options, ...options };
295
+ if (this.$options.bytecode == null) await this.$compile();
296
+ if (opt.callStatic === true) return this.$call('init', params, opt);
297
+ if (this.$options.address != null) throw new DuplicateContractError();
298
+
299
+ const ownerId = opt.onAccount.address;
300
+ const tx = await _buildTx(Tag.ContractCreateTx, {
301
+ ...opt,
302
+ gasLimit: opt.gasLimit ?? await this._estimateGas('init', params, opt),
303
+ callData: this._calldata.encode(this._name, 'init', params),
304
+ code: this.$options.bytecode,
305
+ ownerId,
306
+ });
307
+ this.$options.address = buildContractIdByContractTx(tx);
308
+ const { hash, ...other } = await this._sendAndProcess(tx, opt);
309
+ return {
310
+ ...other,
311
+ owner: ownerId,
312
+ transaction: hash,
313
+ address: this.$options.address,
314
+ };
315
+ }
316
+
317
+ /**
318
+ * Get function schema from contract ACI object
319
+ * @param name - Function name
320
+ * @returns function ACI
321
+ */
322
+ protected _getFunctionACI(name: string): Partial<FunctionACI> {
323
+ const fn = this._aci.encodedAci.contract.functions.find(
324
+ (f: { name: string }) => f.name === name,
325
+ );
326
+ if (fn != null) {
327
+ return fn;
328
+ }
329
+ if (name === 'init') return { payable: false };
330
+ throw new NoSuchContractFunctionError(`Function ${name} doesn't exist in contract`);
331
+ }
332
+
333
+ /**
334
+ * Call contract function
335
+ * @param fn - Function name
336
+ * @param params - Array of function arguments
337
+ * @param options - Array of function arguments
338
+ * @returns CallResult
339
+ */
340
+ async $call<Fn extends MethodNames<M>>(
341
+ fn: Fn,
342
+ params: MethodParameters<M, Fn>,
343
+ options: object = {},
344
+ ): Promise<{
345
+ decodedResult?: any;
346
+ decodedEvents?: ReturnType<Contract<M>['$decodeEvents']>;
347
+ } & SendAndProcessReturnType> {
348
+ const opt = { ...this.$options, ...options };
349
+ const fnACI = this._getFunctionACI(fn);
350
+ const contractId = this.$options.address;
351
+ const { onNode } = opt;
352
+
353
+ if (fn == null) throw new MissingFunctionNameError();
354
+ if (fn === 'init' && opt.callStatic === false) throw new InvalidMethodInvocationError('"init" can be called only via dryRun');
355
+ if (fn !== 'init' && opt.amount > 0 && fnACI.payable === false) throw new NotPayableFunctionError(opt.amount, fn);
356
+
357
+ let callerId;
358
+ try {
359
+ callerId = opt.onAccount.address;
360
+ } catch (error) {
361
+ const useFallbackAccount = opt.callStatic === true && (
362
+ (error instanceof TypeError && error.message === 'Account should be an address (ak-prefixed string), or instance of AccountBase, got undefined instead')
363
+ || (error instanceof NoWalletConnectedError)
364
+ );
365
+ if (!useFallbackAccount) throw error;
366
+ callerId = DRY_RUN_ACCOUNT.pub;
367
+ }
368
+ const callData = this._calldata.encode(this._name, fn, params);
369
+
370
+ let res: any;
371
+ if (opt.callStatic === true) {
372
+ if (typeof opt.top === 'number') {
373
+ opt.top = (await getKeyBlock(opt.top, { onNode })).hash;
374
+ }
375
+ const txOpt = { ...opt, onNode, callData };
376
+ if (opt.nonce == null && opt.top != null) {
377
+ opt.nonce = (await getAccount(callerId, { hash: opt.top, onNode })).nonce + 1;
378
+ }
379
+ let tx;
380
+ if (fn === 'init') {
381
+ if (this.$options.bytecode == null) throw new IllegalArgumentError('Can\'t dry-run "init" without bytecode');
382
+ tx = await _buildTx(
383
+ Tag.ContractCreateTx,
384
+ { ...txOpt, code: this.$options.bytecode, ownerId: callerId },
385
+ );
386
+ } else {
387
+ if (contractId == null) throw new MissingContractAddressError('Can\'t dry-run contract without address');
388
+ tx = await _buildTx(Tag.ContractCallTx, { ...txOpt, callerId, contractId });
389
+ }
390
+
391
+ const { callObj, ...dryRunOther } = await txDryRun(tx, callerId, opt);
392
+ if (callObj == null) throw new UnexpectedTsError();
393
+ this._handleCallError({
394
+ returnType: callObj.returnType as ContractCallReturnType,
395
+ returnValue: callObj.returnValue as Encoded.ContractBytearray,
396
+ }, tx);
397
+ res = { ...dryRunOther, tx: unpackTx(tx), result: callObj };
398
+ } else {
399
+ if (contractId == null) throw new MissingContractAddressError('Can\'t call contract without address');
400
+ const tx = await _buildTx(Tag.ContractCallTx, {
401
+ ...opt,
402
+ gasLimit: opt.gasLimit ?? await this._estimateGas(fn, params, opt),
403
+ callerId,
404
+ contractId,
405
+ callData,
406
+ });
407
+ res = await this._sendAndProcess(tx, opt);
408
+ }
409
+ if (opt.callStatic === true || res.txData.blockHeight != null) {
410
+ res.decodedResult = fnACI.returns != null && fnACI.returns !== 'unit' && fn !== 'init'
411
+ && this._calldata.decode(this._name, fn, res.result.returnValue);
412
+ res.decodedEvents = this.$decodeEvents(res.result.log, opt);
413
+ }
414
+ return res;
415
+ }
416
+
417
+ /**
418
+ * @param ctAddress - Contract address that emitted event
419
+ * @param nameHash - Hash of emitted event name
420
+ * @param options - Options
421
+ * @returns Contract name
422
+ * @throws {@link MissingEventDefinitionError}
423
+ * @throws {@link AmbiguousEventDefinitionError}
424
+ */
425
+ protected _getContractNameByEvent(
426
+ ctAddress: Encoded.ContractAddress,
427
+ nameHash: BigInt,
428
+ { contractAddressToName }: {
429
+ contractAddressToName?: { [key: Encoded.ContractAddress]: string };
430
+ },
431
+ ): string {
432
+ const addressToName = { ...this.$options.contractAddressToName, ...contractAddressToName };
433
+ if (addressToName[ctAddress] != null) return addressToName[ctAddress];
434
+
435
+ // TODO: consider using a third-party library
436
+ const isEqual = (a: any, b: any): boolean => JSON.stringify(a) === JSON.stringify(b);
437
+
438
+ const matchedEvents = [this._aci.encodedAci, ...this._aci.externalEncodedAci]
439
+ .filter(({ contract }) => contract?.event)
440
+ .map(({ contract }) => [contract.name, contract.event.variant])
441
+ .map(([name, events]) => events.map((event: {}) => (
442
+ [name, Object.keys(event)[0], Object.values(event)[0]]
443
+ )))
444
+ .flat()
445
+ .filter(([, eventName]) => BigInt(`0x${calcHash(eventName).toString('hex')}`) === nameHash)
446
+ .filter(([, , type], idx, arr) => !arr.slice(0, idx).some((el) => isEqual(el[2], type)));
447
+ switch (matchedEvents.length) {
448
+ case 0: throw new MissingEventDefinitionError(nameHash.toString(), ctAddress);
449
+ case 1: return matchedEvents[0][0];
450
+ default: throw new AmbiguousEventDefinitionError(ctAddress, matchedEvents);
451
+ }
452
+ }
453
+
454
+ /**
455
+ * Decode Events
456
+ * @param events - Array of encoded events (callRes.result.log)
457
+ * @param options - Options
458
+ * @returns DecodedEvents
459
+ */
460
+ $decodeEvents(
461
+ events: Event[],
462
+ { omitUnknown, ...opt }: { omitUnknown?: boolean } &
463
+ Parameters<Contract<M>['_getContractNameByEvent']>[2] = {},
464
+ ): DecodedEvent[] {
465
+ return events
466
+ .map((event) => {
467
+ const topics = event.topics.map((t: string | number) => BigInt(t));
468
+ let contractName;
469
+ try {
470
+ contractName = this._getContractNameByEvent(event.address, topics[0], opt);
471
+ } catch (error) {
472
+ if ((omitUnknown ?? false) && error instanceof MissingEventDefinitionError) return null;
473
+ throw error;
474
+ }
475
+ const decoded = this._calldata.decodeEvent(contractName, event.data, topics);
476
+ const [name, args] = Object.entries(decoded)[0];
477
+ return {
478
+ name,
479
+ args,
480
+ contract: {
481
+ name: contractName,
482
+ address: event.address,
483
+ },
484
+ };
485
+ }).filter((e: DecodedEvent | null): e is DecodedEvent => e != null);
486
+ }
487
+
488
+ static async initialize<M extends ContractMethodsBase>(
489
+ {
490
+ onCompiler,
491
+ onNode,
492
+ sourceCode,
493
+ bytecode,
494
+ aci,
495
+ address,
496
+ fileSystem,
497
+ validateBytecode,
498
+ ...otherOptions
499
+ }: Omit<ConstructorParameters<typeof Contract>[0], 'aci' | 'address'> & {
500
+ validateBytecode?: boolean;
501
+ aci?: Aci;
502
+ address?: Encoded.ContractAddress | AensName;
503
+ },
504
+ ): Promise<ContractWithMethods<M>> {
505
+ if (aci == null && sourceCode != null) {
506
+ // TODO: should be fixed when the compiledAci interface gets updated
507
+ aci = await onCompiler.generateACI({ code: sourceCode, options: { fileSystem } }) as Aci;
508
+ }
509
+ if (aci == null) throw new MissingContractDefError();
510
+
511
+ if (address != null) {
512
+ address = await resolveName(
513
+ address,
514
+ 'contract_pubkey',
515
+ { resolveByNode: true, onNode },
516
+ ) as Encoded.ContractAddress;
517
+ }
518
+
519
+ if (address == null && sourceCode == null && bytecode == null) {
520
+ throw new MissingContractAddressError('Can\'t create instance by ACI without address');
521
+ }
522
+
523
+ if (address != null) {
524
+ const contract = await getContract(address, { onNode });
525
+ if (contract.active == null) throw new InactiveContractError(address);
526
+ }
527
+
528
+ if (validateBytecode != null) {
529
+ if (address == null) throw new MissingContractAddressError('Can\'t validate bytecode without contract address');
530
+ const onChanBytecode = (await getContractByteCode(address, { onNode })).bytecode;
531
+ const isValid: boolean = sourceCode != null
532
+ ? await onCompiler.validateByteCode(
533
+ { bytecode: onChanBytecode, source: sourceCode, options: { fileSystem } },
534
+ ).then(() => true, () => false)
535
+ : bytecode === onChanBytecode;
536
+ if (!isValid) throw new BytecodeMismatchError(sourceCode != null ? 'source code' : 'bytecode');
537
+ }
538
+
539
+ return new ContractWithMethods<M>({
540
+ onCompiler, onNode, sourceCode, bytecode, aci, address, fileSystem, ...otherOptions,
541
+ });
542
+ }
543
+
544
+ _aci: Aci;
545
+
546
+ _name: string;
547
+
548
+ _calldata: Calldata;
549
+
550
+ $options: {
551
+ sourceCode?: string;
552
+ bytecode?: Encoded.ContractBytearray;
553
+ address?: Encoded.ContractAddress;
554
+ onCompiler: CompilerHttp;
555
+ onNode: Node;
556
+ omitUnknown?: boolean;
557
+ contractAddressToName?: { [key: Encoded.ContractAddress]: string };
558
+ [key: string]: any;
559
+ };
560
+
561
+ constructor({ aci, ...otherOptions }: {
562
+ onAccount?: AccountBase;
563
+ onCompiler: CompilerHttp;
564
+ onNode: Node;
565
+ sourceCode?: string;
566
+ bytecode?: Encoded.ContractBytearray;
567
+ aci: Aci;
568
+ address?: Encoded.ContractAddress;
569
+ fileSystem?: Record<string, string>;
570
+ [key: string]: any;
571
+ }) {
572
+ this._aci = aci;
573
+ this._name = aci.encodedAci.contract.name;
574
+ this._calldata = new Calldata([aci.encodedAci, ...aci.externalEncodedAci]);
575
+ this.$options = { callStatic: false, ...otherOptions };
576
+
577
+ /**
578
+ * Generate proto function based on contract function using Contract ACI schema
579
+ * All function can be called like:
580
+ * ```js
581
+ * await contract.testFunction()
582
+ * ```
583
+ * then sdk will decide to use dry-run or send tx
584
+ * on-chain base on if function stateful or not.
585
+ * Also, you can manually do that:
586
+ * ```js
587
+ * await contract.testFunction({ callStatic: true }) // use call-static (dry-run)
588
+ * await contract.testFunction({ callStatic: false }) // send tx on-chain
589
+ * ```
590
+ */
591
+ Object.assign(
592
+ this,
593
+ Object.fromEntries(this._aci.encodedAci.contract.functions
594
+ .map(({ name, arguments: aciArgs, stateful }: FunctionACI) => {
595
+ const callStatic = name !== 'init' && !stateful;
596
+ return [
597
+ name,
598
+ async (...args: any) => {
599
+ const options = args.length === aciArgs.length + 1 ? args.pop() : {};
600
+ if (typeof options !== 'object') throw new TypeError(`Options should be an object: ${options}`);
601
+ if (name === 'init') return this.$deploy(args, { callStatic, ...options });
602
+ return this.$call(name, args, { callStatic, ...options });
603
+ },
604
+ ];
605
+ })),
606
+ );
607
+ }
608
+ }
609
+
610
+ interface ContractWithMethodsClass {
611
+ new <M extends ContractMethodsBase>(
612
+ options: ConstructorParameters<typeof Contract>[0],
613
+ ): ContractWithMethods<M>;
614
+ initialize: typeof Contract['initialize'];
615
+ }
616
+
617
+ // eslint-disable-next-line @typescript-eslint/no-redeclare
618
+ const ContractWithMethods: ContractWithMethodsClass = Contract as any;
619
+
620
+ export default ContractWithMethods;