@aeternity/aepp-sdk 13.0.0-alpha.0 → 13.0.0-beta.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 (481) hide show
  1. package/bin/aesophia_cli +0 -0
  2. package/dist/aepp-sdk.browser-script.js +1 -1
  3. package/dist/aepp-sdk.browser-script.js.map +1 -1
  4. package/dist/aepp-sdk.browser.js +1 -1
  5. package/dist/aepp-sdk.browser.js.map +1 -1
  6. package/dist/aepp-sdk.js +5595 -2249
  7. package/dist/aepp-sdk.js.map +1 -1
  8. package/es/AeSdk.mjs.map +1 -1
  9. package/es/AeSdkAepp.mjs.map +1 -1
  10. package/es/AeSdkBase.d.ts +3 -3
  11. package/es/AeSdkBase.mjs +4 -0
  12. package/es/AeSdkBase.mjs.map +1 -1
  13. package/es/AeSdkMethods.d.ts +12 -14
  14. package/es/AeSdkMethods.mjs +6 -8
  15. package/es/AeSdkMethods.mjs.map +1 -1
  16. package/es/AeSdkWallet.mjs +1 -1
  17. package/es/AeSdkWallet.mjs.map +1 -1
  18. package/es/Node.d.ts +9 -4
  19. package/es/Node.mjs +12 -6
  20. package/es/Node.mjs.map +1 -1
  21. package/es/account/Base.d.ts +13 -8
  22. package/es/account/Base.mjs +0 -17
  23. package/es/account/Base.mjs.map +1 -1
  24. package/es/account/Generalized.mjs +14 -25
  25. package/es/account/Generalized.mjs.map +1 -1
  26. package/es/account/Ledger.mjs +2 -1
  27. package/es/account/Ledger.mjs.map +1 -1
  28. package/es/account/LedgerFactory.mjs.map +1 -1
  29. package/es/account/Memory.d.ts +2 -1
  30. package/es/account/Memory.mjs +11 -22
  31. package/es/account/Memory.mjs.map +1 -1
  32. package/es/account/Rpc.mjs.map +1 -1
  33. package/es/aens.d.ts +12 -14
  34. package/es/aens.mjs +22 -32
  35. package/es/aens.mjs.map +1 -1
  36. package/es/aepp-wallet-communication/connection/Browser.mjs +0 -16
  37. package/es/aepp-wallet-communication/connection/Browser.mjs.map +1 -1
  38. package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +1 -0
  39. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +19 -20
  40. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -1
  41. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs +0 -16
  42. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs.map +1 -1
  43. package/es/aepp-wallet-communication/connection-proxy.mjs +0 -17
  44. package/es/aepp-wallet-communication/connection-proxy.mjs.map +1 -1
  45. package/es/aepp-wallet-communication/rpc/RpcClient.mjs +5 -6
  46. package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -1
  47. package/es/aepp-wallet-communication/rpc/types.d.ts +6 -2
  48. package/es/aepp-wallet-communication/rpc/types.mjs.map +1 -1
  49. package/es/aepp-wallet-communication/schema.mjs.map +1 -1
  50. package/es/aepp-wallet-communication/wallet-detector.mjs +0 -16
  51. package/es/aepp-wallet-communication/wallet-detector.mjs.map +1 -1
  52. package/es/apis/compiler/compiler.d.ts +1 -1
  53. package/es/apis/compiler/compiler.mjs +4 -20
  54. package/es/apis/compiler/compiler.mjs.map +1 -1
  55. package/es/apis/compiler/models/index.d.ts +3 -2
  56. package/es/apis/compiler/models/index.mjs.map +1 -1
  57. package/es/apis/compiler/models/mappers.d.ts +1 -1
  58. package/es/apis/compiler/models/mappers.mjs +19 -2
  59. package/es/apis/compiler/models/mappers.mjs.map +1 -1
  60. package/es/apis/node/models/index.d.ts +15 -15
  61. package/es/apis/node/models/index.mjs.map +1 -1
  62. package/es/apis/node/models/mappers.d.ts +1 -1
  63. package/es/apis/node/models/mappers.mjs +2 -1
  64. package/es/apis/node/models/mappers.mjs.map +1 -1
  65. package/es/apis/node/models/parameters.d.ts +2 -2
  66. package/es/apis/node/models/parameters.mjs +2 -2
  67. package/es/apis/node/models/parameters.mjs.map +1 -1
  68. package/es/apis/node/node.mjs +3 -19
  69. package/es/apis/node/node.mjs.map +1 -1
  70. package/es/chain.d.ts +17 -9
  71. package/es/chain.mjs +23 -23
  72. package/es/chain.mjs.map +1 -1
  73. package/es/channel/Base.d.ts +27 -9
  74. package/es/channel/Base.mjs +27 -27
  75. package/es/channel/Base.mjs.map +1 -1
  76. package/es/channel/Contract.d.ts +8 -7
  77. package/es/channel/Contract.mjs +8 -21
  78. package/es/channel/Contract.mjs.map +1 -1
  79. package/es/channel/Spend.d.ts +5 -1
  80. package/es/channel/Spend.mjs +4 -18
  81. package/es/channel/Spend.mjs.map +1 -1
  82. package/es/channel/handlers.mjs +16 -26
  83. package/es/channel/handlers.mjs.map +1 -1
  84. package/es/channel/internal.d.ts +19 -2
  85. package/es/channel/internal.mjs +22 -20
  86. package/es/channel/internal.mjs.map +1 -1
  87. package/es/contract/Contract.d.ts +43 -123
  88. package/es/contract/Contract.mjs +230 -250
  89. package/es/contract/Contract.mjs.map +1 -1
  90. package/es/contract/compiler/Base.d.ts +74 -0
  91. package/es/contract/compiler/Base.mjs +5 -0
  92. package/es/contract/compiler/Base.mjs.map +1 -0
  93. package/es/contract/compiler/Cli.d.ts +23 -0
  94. package/es/contract/compiler/Cli.mjs +149 -0
  95. package/es/contract/compiler/Cli.mjs.map +1 -0
  96. package/es/contract/compiler/Http.d.ts +32 -0
  97. package/es/contract/compiler/Http.mjs +94 -0
  98. package/es/contract/compiler/Http.mjs.map +1 -0
  99. package/es/contract/compiler/HttpNode.d.ts +17 -0
  100. package/es/contract/compiler/HttpNode.mjs +26 -0
  101. package/es/contract/compiler/HttpNode.mjs.map +1 -0
  102. package/es/contract/compiler/getFileSystem.d.ts +6 -0
  103. package/es/contract/compiler/getFileSystem.mjs +40 -0
  104. package/es/contract/compiler/getFileSystem.mjs.map +1 -0
  105. package/es/contract/delegation-signature.d.ts +43 -0
  106. package/es/contract/delegation-signature.mjs +45 -0
  107. package/es/contract/delegation-signature.mjs.map +1 -0
  108. package/es/contract/ga.d.ts +27 -10
  109. package/es/contract/ga.mjs +63 -29
  110. package/es/contract/ga.mjs.map +1 -1
  111. package/es/index-browser.d.ts +40 -0
  112. package/es/index-browser.mjs +41 -0
  113. package/es/index-browser.mjs.map +1 -0
  114. package/es/index.d.ts +4 -38
  115. package/es/index.mjs +4 -53
  116. package/es/index.mjs.map +1 -1
  117. package/es/oracle.d.ts +12 -17
  118. package/es/oracle.mjs +29 -49
  119. package/es/oracle.mjs.map +1 -1
  120. package/es/spend.d.ts +19 -27
  121. package/es/spend.mjs +21 -46
  122. package/es/spend.mjs.map +1 -1
  123. package/es/tx/builder/SchemaTypes.d.ts +37 -0
  124. package/es/tx/builder/SchemaTypes.mjs +2 -0
  125. package/es/tx/builder/SchemaTypes.mjs.map +1 -0
  126. package/es/tx/builder/constants.d.ts +31 -2
  127. package/es/tx/builder/constants.mjs +34 -3
  128. package/es/tx/builder/constants.mjs.map +1 -1
  129. package/es/tx/builder/field-types/abi-version.d.ts +19 -0
  130. package/es/tx/builder/field-types/abi-version.mjs +40 -0
  131. package/es/tx/builder/field-types/abi-version.mjs.map +1 -0
  132. package/es/tx/builder/field-types/address.d.ts +5 -6
  133. package/es/tx/builder/field-types/address.mjs +17 -8
  134. package/es/tx/builder/field-types/address.mjs.map +1 -1
  135. package/es/tx/builder/field-types/array.d.ts +7 -0
  136. package/es/tx/builder/field-types/array.mjs +11 -0
  137. package/es/tx/builder/field-types/array.mjs.map +1 -0
  138. package/es/tx/builder/field-types/boolean.d.ts +6 -0
  139. package/es/tx/builder/field-types/boolean.mjs +13 -0
  140. package/es/tx/builder/field-types/boolean.mjs.map +1 -0
  141. package/es/tx/builder/field-types/coin-amount.d.ts +4 -5
  142. package/es/tx/builder/field-types/coin-amount.mjs +4 -5
  143. package/es/tx/builder/field-types/coin-amount.mjs.map +1 -1
  144. package/es/tx/builder/field-types/ct-version.d.ts +49 -0
  145. package/es/tx/builder/field-types/ct-version.mjs +76 -0
  146. package/es/tx/builder/field-types/ct-version.mjs.map +1 -0
  147. package/es/tx/builder/field-types/deposit.d.ts +3 -2
  148. package/es/tx/builder/field-types/deposit.mjs +3 -2
  149. package/es/tx/builder/field-types/deposit.mjs.map +1 -1
  150. package/es/tx/builder/field-types/encoded.d.ts +6 -0
  151. package/es/tx/builder/field-types/encoded.mjs +21 -0
  152. package/es/tx/builder/field-types/encoded.mjs.map +1 -0
  153. package/es/tx/builder/field-types/entry.d.ts +11 -0
  154. package/es/tx/builder/field-types/entry.mjs +34 -0
  155. package/es/tx/builder/field-types/entry.mjs.map +1 -0
  156. package/es/tx/builder/field-types/enumeration.d.ts +5 -3
  157. package/es/tx/builder/field-types/enumeration.mjs +11 -2
  158. package/es/tx/builder/field-types/enumeration.mjs.map +1 -1
  159. package/es/tx/builder/field-types/fee.d.ts +12 -7
  160. package/es/tx/builder/field-types/fee.mjs +28 -20
  161. package/es/tx/builder/field-types/fee.mjs.map +1 -1
  162. package/es/tx/builder/field-types/field.mjs.map +1 -1
  163. package/es/tx/builder/field-types/gas-limit.d.ts +7 -3
  164. package/es/tx/builder/field-types/gas-limit.mjs +13 -8
  165. package/es/tx/builder/field-types/gas-limit.mjs.map +1 -1
  166. package/es/tx/builder/field-types/gas-price.d.ts +3 -1
  167. package/es/tx/builder/field-types/gas-price.mjs.map +1 -1
  168. package/es/tx/builder/field-types/index.d.ts +107 -30
  169. package/es/tx/builder/field-types/index.mjs +38 -12
  170. package/es/tx/builder/field-types/index.mjs.map +1 -1
  171. package/es/tx/builder/field-types/map.d.ts +13 -0
  172. package/es/tx/builder/field-types/map.mjs +49 -0
  173. package/es/tx/builder/field-types/map.mjs.map +1 -0
  174. package/es/tx/builder/field-types/mptree.d.ts +42 -0
  175. package/es/tx/builder/field-types/mptree.mjs +266 -0
  176. package/es/tx/builder/field-types/mptree.mjs.map +1 -0
  177. package/es/tx/builder/field-types/name-fee.d.ts +2 -3
  178. package/es/tx/builder/field-types/name-fee.mjs +2 -2
  179. package/es/tx/builder/field-types/name-fee.mjs.map +1 -1
  180. package/es/tx/builder/field-types/name-id.mjs +2 -1
  181. package/es/tx/builder/field-types/name-id.mjs.map +1 -1
  182. package/es/tx/builder/field-types/name.mjs.map +1 -1
  183. package/es/tx/builder/field-types/nonce.d.ts +14 -0
  184. package/es/tx/builder/field-types/nonce.mjs +29 -0
  185. package/es/tx/builder/field-types/nonce.mjs.map +1 -0
  186. package/es/tx/builder/field-types/pointers.mjs +2 -2
  187. package/es/tx/builder/field-types/pointers.mjs.map +1 -1
  188. package/es/tx/builder/field-types/raw.d.ts +6 -0
  189. package/es/tx/builder/field-types/raw.mjs +13 -0
  190. package/es/tx/builder/field-types/raw.mjs.map +1 -0
  191. package/es/tx/builder/field-types/short-u-int-const.d.ts +7 -0
  192. package/es/tx/builder/field-types/short-u-int-const.mjs +20 -0
  193. package/es/tx/builder/field-types/short-u-int-const.mjs.map +1 -0
  194. package/es/tx/builder/field-types/short-u-int.mjs.map +1 -1
  195. package/es/tx/builder/field-types/string.d.ts +6 -0
  196. package/es/tx/builder/field-types/string.mjs +10 -0
  197. package/es/tx/builder/field-types/string.mjs.map +1 -0
  198. package/es/tx/builder/field-types/ttl.d.ts +11 -0
  199. package/es/tx/builder/field-types/ttl.mjs +21 -0
  200. package/es/tx/builder/field-types/ttl.mjs.map +1 -0
  201. package/es/tx/builder/field-types/u-int.d.ts +1 -2
  202. package/es/tx/builder/field-types/u-int.mjs.map +1 -1
  203. package/es/tx/builder/field-types/wrapped.d.ts +14 -0
  204. package/es/tx/builder/field-types/wrapped.mjs +22 -0
  205. package/es/tx/builder/field-types/wrapped.mjs.map +1 -0
  206. package/es/tx/builder/helpers.mjs.map +1 -1
  207. package/es/tx/builder/index.d.ts +18 -36
  208. package/es/tx/builder/index.mjs +65 -236
  209. package/es/tx/builder/index.mjs.map +1 -1
  210. package/es/tx/builder/schema.d.ts +2734 -1324
  211. package/es/tx/builder/schema.generated.d.ts +2011 -0
  212. package/es/tx/builder/schema.generated.mjs +2 -0
  213. package/es/tx/builder/schema.generated.mjs.map +1 -0
  214. package/es/tx/builder/schema.mjs +459 -223
  215. package/es/tx/builder/schema.mjs.map +1 -1
  216. package/es/tx/execution-cost.d.ts +35 -0
  217. package/es/tx/execution-cost.mjs +123 -0
  218. package/es/tx/execution-cost.mjs.map +1 -0
  219. package/es/tx/transaction-signer.d.ts +6 -0
  220. package/es/tx/transaction-signer.mjs +27 -0
  221. package/es/tx/transaction-signer.mjs.map +1 -0
  222. package/es/tx/validator.d.ts +3 -5
  223. package/es/tx/validator.mjs +91 -153
  224. package/es/tx/validator.mjs.map +1 -1
  225. package/es/utils/amount-formatter.mjs +0 -16
  226. package/es/utils/amount-formatter.mjs.map +1 -1
  227. package/es/utils/autorest.d.ts +3 -2
  228. package/es/utils/autorest.mjs +43 -11
  229. package/es/utils/autorest.mjs.map +1 -1
  230. package/es/utils/bytes.mjs +1 -17
  231. package/es/utils/bytes.mjs.map +1 -1
  232. package/es/utils/crypto.mjs +0 -16
  233. package/es/utils/crypto.mjs.map +1 -1
  234. package/es/utils/encoder.mjs.map +1 -1
  235. package/es/utils/errors.d.ts +16 -38
  236. package/es/utils/errors.mjs +3 -43
  237. package/es/utils/errors.mjs.map +1 -1
  238. package/es/utils/hd-wallet.mjs.map +1 -1
  239. package/es/utils/json-big.mjs.map +1 -1
  240. package/es/utils/keystore.mjs.map +1 -1
  241. package/es/utils/other.mjs.map +1 -1
  242. package/es/utils/semver-satisfies.mjs.map +1 -1
  243. package/es/utils/string.mjs +0 -17
  244. package/es/utils/string.mjs.map +1 -1
  245. package/package.json +52 -40
  246. package/src/AeSdkBase.ts +6 -3
  247. package/src/AeSdkMethods.ts +12 -18
  248. package/src/AeSdkWallet.ts +1 -1
  249. package/src/Node.ts +23 -9
  250. package/src/account/Base.ts +13 -24
  251. package/src/account/Generalized.ts +9 -24
  252. package/src/account/Ledger.ts +1 -1
  253. package/src/account/Memory.ts +15 -22
  254. package/src/aens.ts +34 -49
  255. package/src/aepp-wallet-communication/connection/Browser.ts +0 -17
  256. package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +18 -24
  257. package/src/aepp-wallet-communication/connection/BrowserWindowMessage.ts +0 -17
  258. package/src/aepp-wallet-communication/connection-proxy.ts +0 -17
  259. package/src/aepp-wallet-communication/rpc/RpcClient.ts +2 -2
  260. package/src/aepp-wallet-communication/rpc/types.ts +6 -2
  261. package/src/aepp-wallet-communication/wallet-detector.ts +0 -17
  262. package/src/apis/compiler/compiler.ts +3 -27
  263. package/src/apis/compiler/models/index.ts +3 -2
  264. package/src/apis/compiler/models/mappers.ts +15 -2
  265. package/src/apis/node/models/index.ts +16 -15
  266. package/src/apis/node/models/mappers.ts +2 -1
  267. package/src/apis/node/models/parameters.ts +2 -2
  268. package/src/apis/node/node.ts +3 -27
  269. package/src/chain.ts +33 -30
  270. package/src/channel/Base.ts +39 -31
  271. package/src/channel/Contract.ts +18 -32
  272. package/src/channel/Spend.ts +8 -18
  273. package/src/channel/handlers.ts +14 -26
  274. package/src/channel/internal.ts +41 -23
  275. package/src/contract/Contract.ts +188 -228
  276. package/src/contract/compiler/Base.ts +87 -0
  277. package/src/contract/compiler/Cli.ts +128 -0
  278. package/src/contract/compiler/Http.ts +105 -0
  279. package/src/contract/compiler/HttpNode.ts +26 -0
  280. package/src/contract/compiler/getFileSystem.ts +42 -0
  281. package/src/contract/delegation-signature.ts +56 -0
  282. package/src/contract/ga.ts +61 -37
  283. package/src/index-browser.ts +50 -0
  284. package/src/index.ts +4 -56
  285. package/src/oracle.ts +47 -57
  286. package/src/spend.ts +34 -68
  287. package/src/tx/builder/SchemaTypes.ts +79 -0
  288. package/src/tx/builder/constants.ts +34 -3
  289. package/src/tx/builder/field-types/abi-version.ts +44 -0
  290. package/src/tx/builder/field-types/address.ts +23 -13
  291. package/src/tx/builder/field-types/array.ts +19 -0
  292. package/src/tx/builder/field-types/boolean.ts +9 -0
  293. package/src/tx/builder/field-types/coin-amount.ts +8 -5
  294. package/src/tx/builder/field-types/ct-version.ts +83 -0
  295. package/src/tx/builder/field-types/deposit.ts +4 -2
  296. package/src/tx/builder/field-types/encoded.ts +27 -0
  297. package/src/tx/builder/field-types/entry.ts +36 -0
  298. package/src/tx/builder/field-types/enumeration.ts +15 -4
  299. package/src/tx/builder/field-types/fee.ts +41 -19
  300. package/src/tx/builder/field-types/gas-limit.ts +13 -8
  301. package/src/tx/builder/field-types/index.ts +60 -17
  302. package/src/tx/builder/field-types/map.ts +45 -0
  303. package/src/tx/builder/field-types/mptree.ts +243 -0
  304. package/src/tx/builder/field-types/name-fee.ts +3 -3
  305. package/src/tx/builder/field-types/name-id.ts +1 -1
  306. package/src/tx/builder/field-types/nonce.ts +40 -0
  307. package/src/tx/builder/field-types/pointers.ts +2 -2
  308. package/src/tx/builder/field-types/raw.ts +9 -0
  309. package/src/tx/builder/field-types/short-u-int-const.ts +30 -0
  310. package/src/tx/builder/field-types/string.ts +11 -0
  311. package/src/tx/builder/field-types/ttl.ts +24 -0
  312. package/src/tx/builder/field-types/u-int.ts +1 -3
  313. package/src/tx/builder/field-types/wrapped.ts +32 -0
  314. package/src/tx/builder/index.ts +82 -280
  315. package/src/tx/builder/schema.generated.ts +2013 -0
  316. package/src/tx/builder/schema.ts +536 -666
  317. package/src/tx/execution-cost.ts +146 -0
  318. package/src/tx/transaction-signer.ts +27 -0
  319. package/src/tx/validator.ts +100 -154
  320. package/src/utils/amount-formatter.ts +0 -16
  321. package/src/utils/autorest.ts +52 -11
  322. package/src/utils/bytes.ts +1 -17
  323. package/src/utils/crypto.ts +0 -16
  324. package/src/utils/errors.ts +18 -56
  325. package/src/utils/string.ts +0 -17
  326. package/types-legacy/ts4.2/AeSdkBase.d.ts +3 -3
  327. package/types-legacy/ts4.2/AeSdkMethods.d.ts +12 -14
  328. package/types-legacy/ts4.2/Node.d.ts +8 -4
  329. package/types-legacy/ts4.2/account/Base.d.ts +13 -8
  330. package/types-legacy/ts4.2/account/Memory.d.ts +2 -1
  331. package/types-legacy/ts4.2/aens.d.ts +12 -14
  332. package/types-legacy/ts4.2/aepp-wallet-communication/connection/BrowserRuntime.d.ts +1 -0
  333. package/types-legacy/ts4.2/aepp-wallet-communication/rpc/types.d.ts +6 -2
  334. package/types-legacy/ts4.2/apis/compiler/compiler.d.ts +1 -1
  335. package/types-legacy/ts4.2/apis/compiler/models/index.d.ts +3 -2
  336. package/types-legacy/ts4.2/apis/compiler/models/mappers.d.ts +1 -1
  337. package/types-legacy/ts4.2/apis/node/models/index.d.ts +15 -15
  338. package/types-legacy/ts4.2/apis/node/models/mappers.d.ts +1 -1
  339. package/types-legacy/ts4.2/apis/node/models/parameters.d.ts +2 -2
  340. package/types-legacy/ts4.2/chain.d.ts +17 -9
  341. package/types-legacy/ts4.2/channel/Base.d.ts +27 -9
  342. package/types-legacy/ts4.2/channel/Contract.d.ts +8 -7
  343. package/types-legacy/ts4.2/channel/Spend.d.ts +5 -1
  344. package/types-legacy/ts4.2/channel/internal.d.ts +22 -2
  345. package/types-legacy/ts4.2/contract/Contract.d.ts +42 -122
  346. package/types-legacy/ts4.2/contract/compiler/Base.d.ts +74 -0
  347. package/types-legacy/ts4.2/contract/compiler/Cli.d.ts +23 -0
  348. package/types-legacy/ts4.2/contract/compiler/Http.d.ts +32 -0
  349. package/types-legacy/ts4.2/contract/compiler/HttpNode.d.ts +17 -0
  350. package/types-legacy/ts4.2/contract/compiler/getFileSystem.d.ts +6 -0
  351. package/types-legacy/ts4.2/contract/delegation-signature.d.ts +43 -0
  352. package/types-legacy/ts4.2/contract/ga.d.ts +27 -10
  353. package/types-legacy/ts4.2/index-browser.d.ts +40 -0
  354. package/types-legacy/ts4.2/index.d.ts +4 -38
  355. package/types-legacy/ts4.2/oracle.d.ts +12 -17
  356. package/types-legacy/ts4.2/spend.d.ts +19 -27
  357. package/types-legacy/ts4.2/tx/builder/SchemaTypes.d.ts +37 -0
  358. package/types-legacy/ts4.2/tx/builder/constants.d.ts +31 -2
  359. package/types-legacy/ts4.2/tx/builder/field-types/abi-version.d.ts +19 -0
  360. package/types-legacy/ts4.2/tx/builder/field-types/address.d.ts +11 -12
  361. package/types-legacy/ts4.2/tx/builder/field-types/array.d.ts +7 -0
  362. package/types-legacy/ts4.2/tx/builder/field-types/boolean.d.ts +6 -0
  363. package/types-legacy/ts4.2/tx/builder/field-types/coin-amount.d.ts +4 -5
  364. package/types-legacy/ts4.2/tx/builder/field-types/ct-version.d.ts +72 -0
  365. package/types-legacy/ts4.2/tx/builder/field-types/deposit.d.ts +3 -2
  366. package/types-legacy/ts4.2/tx/builder/field-types/encoded.d.ts +6 -0
  367. package/types-legacy/ts4.2/tx/builder/field-types/entry.d.ts +11 -0
  368. package/types-legacy/ts4.2/tx/builder/field-types/enumeration.d.ts +5 -3
  369. package/types-legacy/ts4.2/tx/builder/field-types/fee.d.ts +12 -7
  370. package/types-legacy/ts4.2/tx/builder/field-types/gas-limit.d.ts +7 -3
  371. package/types-legacy/ts4.2/tx/builder/field-types/gas-price.d.ts +3 -1
  372. package/types-legacy/ts4.2/tx/builder/field-types/index.d.ts +113 -30
  373. package/types-legacy/ts4.2/tx/builder/field-types/map.d.ts +13 -0
  374. package/types-legacy/ts4.2/tx/builder/field-types/mptree.d.ts +48 -0
  375. package/types-legacy/ts4.2/tx/builder/field-types/name-fee.d.ts +2 -3
  376. package/types-legacy/ts4.2/tx/builder/field-types/nonce.d.ts +14 -0
  377. package/types-legacy/ts4.2/tx/builder/field-types/raw.d.ts +6 -0
  378. package/types-legacy/ts4.2/tx/builder/field-types/short-u-int-const.d.ts +7 -0
  379. package/types-legacy/ts4.2/tx/builder/field-types/string.d.ts +6 -0
  380. package/types-legacy/ts4.2/tx/builder/field-types/ttl.d.ts +11 -0
  381. package/types-legacy/ts4.2/tx/builder/field-types/u-int.d.ts +1 -2
  382. package/types-legacy/ts4.2/tx/builder/field-types/wrapped.d.ts +14 -0
  383. package/types-legacy/ts4.2/tx/builder/index.d.ts +21 -36
  384. package/types-legacy/ts4.2/tx/builder/schema.d.ts +2971 -2926
  385. package/types-legacy/ts4.2/tx/builder/schema.generated.d.ts +2011 -0
  386. package/types-legacy/ts4.2/tx/execution-cost.d.ts +35 -0
  387. package/types-legacy/ts4.2/tx/transaction-signer.d.ts +6 -0
  388. package/types-legacy/ts4.2/tx/validator.d.ts +3 -5
  389. package/types-legacy/ts4.2/utils/autorest.d.ts +3 -2
  390. package/types-legacy/ts4.2/utils/errors.d.ts +16 -38
  391. package/types-legacy/ts4.5/AeSdkBase.d.ts +3 -3
  392. package/types-legacy/ts4.5/AeSdkMethods.d.ts +12 -14
  393. package/types-legacy/ts4.5/Node.d.ts +8 -4
  394. package/types-legacy/ts4.5/account/Base.d.ts +13 -8
  395. package/types-legacy/ts4.5/account/Memory.d.ts +2 -1
  396. package/types-legacy/ts4.5/aens.d.ts +12 -14
  397. package/types-legacy/ts4.5/aepp-wallet-communication/connection/BrowserRuntime.d.ts +1 -0
  398. package/types-legacy/ts4.5/aepp-wallet-communication/rpc/types.d.ts +6 -2
  399. package/types-legacy/ts4.5/apis/compiler/compiler.d.ts +1 -1
  400. package/types-legacy/ts4.5/apis/compiler/models/index.d.ts +3 -2
  401. package/types-legacy/ts4.5/apis/compiler/models/mappers.d.ts +1 -1
  402. package/types-legacy/ts4.5/apis/node/models/index.d.ts +15 -15
  403. package/types-legacy/ts4.5/apis/node/models/mappers.d.ts +1 -1
  404. package/types-legacy/ts4.5/apis/node/models/parameters.d.ts +2 -2
  405. package/types-legacy/ts4.5/chain.d.ts +17 -9
  406. package/types-legacy/ts4.5/channel/Base.d.ts +27 -9
  407. package/types-legacy/ts4.5/channel/Contract.d.ts +8 -7
  408. package/types-legacy/ts4.5/channel/Spend.d.ts +5 -1
  409. package/types-legacy/ts4.5/channel/internal.d.ts +22 -2
  410. package/types-legacy/ts4.5/contract/Contract.d.ts +42 -122
  411. package/types-legacy/ts4.5/contract/compiler/Base.d.ts +74 -0
  412. package/types-legacy/ts4.5/contract/compiler/Cli.d.ts +23 -0
  413. package/types-legacy/ts4.5/contract/compiler/Http.d.ts +32 -0
  414. package/types-legacy/ts4.5/contract/compiler/HttpNode.d.ts +17 -0
  415. package/types-legacy/ts4.5/contract/compiler/getFileSystem.d.ts +6 -0
  416. package/types-legacy/ts4.5/contract/delegation-signature.d.ts +43 -0
  417. package/types-legacy/ts4.5/contract/ga.d.ts +27 -10
  418. package/types-legacy/ts4.5/index-browser.d.ts +40 -0
  419. package/types-legacy/ts4.5/index.d.ts +4 -38
  420. package/types-legacy/ts4.5/oracle.d.ts +12 -17
  421. package/types-legacy/ts4.5/spend.d.ts +19 -27
  422. package/types-legacy/ts4.5/tx/builder/SchemaTypes.d.ts +37 -0
  423. package/types-legacy/ts4.5/tx/builder/constants.d.ts +31 -2
  424. package/types-legacy/ts4.5/tx/builder/field-types/abi-version.d.ts +19 -0
  425. package/types-legacy/ts4.5/tx/builder/field-types/address.d.ts +11 -12
  426. package/types-legacy/ts4.5/tx/builder/field-types/array.d.ts +7 -0
  427. package/types-legacy/ts4.5/tx/builder/field-types/boolean.d.ts +6 -0
  428. package/types-legacy/ts4.5/tx/builder/field-types/coin-amount.d.ts +4 -5
  429. package/types-legacy/ts4.5/tx/builder/field-types/ct-version.d.ts +72 -0
  430. package/types-legacy/ts4.5/tx/builder/field-types/deposit.d.ts +3 -2
  431. package/types-legacy/ts4.5/tx/builder/field-types/encoded.d.ts +6 -0
  432. package/types-legacy/ts4.5/tx/builder/field-types/entry.d.ts +11 -0
  433. package/types-legacy/ts4.5/tx/builder/field-types/enumeration.d.ts +5 -3
  434. package/types-legacy/ts4.5/tx/builder/field-types/fee.d.ts +12 -7
  435. package/types-legacy/ts4.5/tx/builder/field-types/gas-limit.d.ts +7 -3
  436. package/types-legacy/ts4.5/tx/builder/field-types/gas-price.d.ts +3 -1
  437. package/types-legacy/ts4.5/tx/builder/field-types/index.d.ts +113 -30
  438. package/types-legacy/ts4.5/tx/builder/field-types/map.d.ts +13 -0
  439. package/types-legacy/ts4.5/tx/builder/field-types/mptree.d.ts +48 -0
  440. package/types-legacy/ts4.5/tx/builder/field-types/name-fee.d.ts +2 -3
  441. package/types-legacy/ts4.5/tx/builder/field-types/nonce.d.ts +14 -0
  442. package/types-legacy/ts4.5/tx/builder/field-types/raw.d.ts +6 -0
  443. package/types-legacy/ts4.5/tx/builder/field-types/short-u-int-const.d.ts +7 -0
  444. package/types-legacy/ts4.5/tx/builder/field-types/string.d.ts +6 -0
  445. package/types-legacy/ts4.5/tx/builder/field-types/ttl.d.ts +11 -0
  446. package/types-legacy/ts4.5/tx/builder/field-types/u-int.d.ts +1 -2
  447. package/types-legacy/ts4.5/tx/builder/field-types/wrapped.d.ts +14 -0
  448. package/types-legacy/ts4.5/tx/builder/index.d.ts +21 -36
  449. package/types-legacy/ts4.5/tx/builder/schema.d.ts +2971 -2926
  450. package/types-legacy/ts4.5/tx/builder/schema.generated.d.ts +2011 -0
  451. package/types-legacy/ts4.5/tx/execution-cost.d.ts +35 -0
  452. package/types-legacy/ts4.5/tx/transaction-signer.d.ts +6 -0
  453. package/types-legacy/ts4.5/tx/validator.d.ts +3 -5
  454. package/types-legacy/ts4.5/utils/autorest.d.ts +3 -2
  455. package/types-legacy/ts4.5/utils/errors.d.ts +16 -38
  456. package/es/contract/CompilerHttp.d.ts +0 -18
  457. package/es/contract/CompilerHttp.mjs +0 -63
  458. package/es/contract/CompilerHttp.mjs.map +0 -1
  459. package/es/tx/builder/field-types/addresses.d.ts +0 -6
  460. package/es/tx/builder/field-types/addresses.mjs +0 -13
  461. package/es/tx/builder/field-types/addresses.mjs.map +0 -1
  462. package/es/tx/index.d.ts +0 -34
  463. package/es/tx/index.mjs +0 -172
  464. package/es/tx/index.mjs.map +0 -1
  465. package/es/utils/mptree.d.ts +0 -26
  466. package/es/utils/mptree.mjs +0 -143
  467. package/es/utils/mptree.mjs.map +0 -1
  468. package/src/apis/compiler/code-model-v4.yaml +0 -2442
  469. package/src/apis/node/code-model-v4.yaml +0 -10080
  470. package/src/contract/CompilerHttp.ts +0 -67
  471. package/src/tx/builder/field-types/addresses.ts +0 -18
  472. package/src/tx/index.ts +0 -196
  473. package/src/utils/mptree.ts +0 -145
  474. package/types-legacy/ts4.2/contract/CompilerHttp.d.ts +0 -18
  475. package/types-legacy/ts4.2/tx/builder/field-types/addresses.d.ts +0 -6
  476. package/types-legacy/ts4.2/tx/index.d.ts +0 -34
  477. package/types-legacy/ts4.2/utils/mptree.d.ts +0 -32
  478. package/types-legacy/ts4.5/contract/CompilerHttp.d.ts +0 -18
  479. package/types-legacy/ts4.5/tx/builder/field-types/addresses.d.ts +0 -6
  480. package/types-legacy/ts4.5/tx/index.d.ts +0 -34
  481. package/types-legacy/ts4.5/utils/mptree.d.ts +0 -32
@@ -1,20 +1,3 @@
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
1
  /**
19
2
  * Contract module - routines to interact with the æternity contract
20
3
  *
@@ -25,9 +8,9 @@
25
8
  import { Encoder as Calldata } from '@aeternity/aepp-calldata';
26
9
  import { DRY_RUN_ACCOUNT } from '../tx/builder/schema';
27
10
  import { Tag, AensName } from '../tx/builder/constants';
28
- import { buildContractIdByContractTx, unpackTx } from '../tx/builder';
29
- import { _buildTx } from '../tx';
30
- import { send } from '../spend';
11
+ import {
12
+ buildContractIdByContractTx, unpackTx, buildTxAsync, BuildTxOptions, buildTxHash,
13
+ } from '../tx/builder';
31
14
  import { decode, Encoded } from '../utils/encoder';
32
15
  import {
33
16
  MissingContractDefError,
@@ -47,49 +30,30 @@ import {
47
30
  UnexpectedTsError,
48
31
  InternalError,
49
32
  NoWalletConnectedError,
33
+ ContractError,
50
34
  } from '../utils/errors';
51
35
  import { hash as calcHash } from '../utils/crypto';
52
- import { Aci as BaseAci } from '../apis/compiler';
53
36
  import {
54
- ContractCallObject as NodeContractCallObject, ContractCallReturnType, Event as NodeEvent,
37
+ ContractCallObject as NodeContractCallObject, Event as NodeEvent,
55
38
  } from '../apis/node';
56
- import CompilerHttp from './CompilerHttp';
39
+ import CompilerBase, { Aci } from './compiler/Base';
57
40
  import Node, { TransformNodeType } from '../Node';
58
41
  import {
59
- getAccount, getContract, getContractByteCode, getKeyBlock, resolveName, txDryRun,
42
+ getAccount, getContract, getContractByteCode, resolveName, txDryRun, sendTransaction,
43
+ SendTransactionOptions,
60
44
  } from '../chain';
61
45
  import AccountBase from '../account/Base';
62
- import { concatBuffers } from '../utils/other';
63
- import { isNameValid, produceNameId } from '../tx/builder/helpers';
46
+ import { TxUnpacked } from '../tx/builder/schema.generated';
64
47
 
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
- }
48
+ type ContractAci = NonNullable<Aci[0]['contract']>;
49
+ type FunctionAci = ContractAci['functions'][0];
86
50
 
87
51
  interface Event extends NodeEvent {
88
52
  address: Encoded.ContractAddress;
89
53
  data: Encoded.ContractBytearray;
90
54
  }
91
55
 
92
- export interface ContractCallObject extends NodeContractCallObject {
56
+ export interface ContractCallObject extends TransformNodeType<NodeContractCallObject> {
93
57
  returnValue: Encoded.ContractBytearray;
94
58
  log: Event[];
95
59
  }
@@ -103,12 +67,12 @@ interface DecodedEvent {
103
67
  };
104
68
  }
105
69
 
106
- type TxData = Awaited<ReturnType<typeof send>>;
70
+ type TxData = Awaited<ReturnType<typeof sendTransaction>>;
107
71
 
108
72
  interface SendAndProcessReturnType {
109
- result?: TransformNodeType<ContractCallObject>;
73
+ result?: ContractCallObject;
110
74
  hash: TxData['hash'];
111
- tx: Awaited<ReturnType<typeof unpackTx<Tag.ContractCallTx | Tag.ContractCreateTx>>>;
75
+ tx: TxUnpacked & { tag: Tag.ContractCallTx | Tag.ContractCreateTx };
112
76
  txData: TxData;
113
77
  rawTx: Encoded.Transaction;
114
78
  }
@@ -117,15 +81,12 @@ export interface ContractMethodsBase { [key: string]: (...args: any[]) => any }
117
81
 
118
82
  type MethodsToContractApi<M extends ContractMethodsBase> = {
119
83
  [Name in keyof M]:
120
- M[Name] extends (...args: infer Args) => infer Ret
84
+ M[Name] extends (...args: infer Args) => any
121
85
  ? (...args: [
122
86
  ...Args,
123
87
  ...[] | [Name extends 'init'
124
88
  ? Parameters<Contract<M>['$deploy']>[1] : Parameters<Contract<M>['$call']>[2]],
125
- ]) => Promise<
126
- Awaited<ReturnType<Contract<M>['$call']>> &
127
- { decodedResult?: Ret }
128
- >
89
+ ]) => ReturnType<Contract<M>['$call']>
129
90
  : never
130
91
  };
131
92
 
@@ -138,6 +99,15 @@ type MethodParameters<M extends ContractMethodsBase, Fn extends MethodNames<M>>
138
99
  ? M extends { init: any } ? Parameters<M['init']> : []
139
100
  : Parameters<M[Fn]>;
140
101
 
102
+ interface GetContractNameByEventOptions {
103
+ contractAddressToName?: { [key: Encoded.ContractAddress]: string };
104
+ }
105
+
106
+ interface GetCallResultByHashReturnType<M extends ContractMethodsBase, Fn extends MethodNames<M>> {
107
+ decodedResult: ReturnType<M[Fn]>;
108
+ decodedEvents?: ReturnType<Contract<M>['$decodeEvents']>;
109
+ }
110
+
141
111
  /**
142
112
  * Generate contract ACI object with predefined js methods for contract usage - can be used for
143
113
  * creating a reference to already deployed contracts
@@ -156,60 +126,6 @@ type MethodParameters<M extends ContractMethodsBase, Fn extends MethodNames<M>>
156
126
  * stateful or not
157
127
  */
158
128
  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
129
  /**
214
130
  * Compile contract
215
131
  * @returns bytecode
@@ -217,22 +133,28 @@ class Contract<M extends ContractMethodsBase> {
217
133
  async $compile(): Promise<Encoded.ContractBytearray> {
218
134
  if (this.$options.bytecode != null) return this.$options.bytecode;
219
135
  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;
136
+ if (this.$options.onCompiler == null) throw new IllegalArgumentError('Can\'t compile without compiler');
137
+ this.$options.bytecode = (await this.$options.onCompiler
138
+ .compileBySourceCode(this.$options.sourceCode, this.$options.fileSystem)
139
+ ).bytecode;
223
140
  return this.$options.bytecode;
224
141
  }
225
142
 
226
- protected _handleCallError(
227
- { returnType, returnValue }: {
228
- returnType: ContractCallReturnType;
229
- returnValue: Encoded.ContractBytearray;
230
- },
231
- transaction: string,
232
- ): void {
143
+ #getCallResult<Fn extends MethodNames<M>>(
144
+ { returnType, returnValue, log }: ContractCallObject,
145
+ fnName: Fn,
146
+ transaction: Encoded.Transaction | undefined,
147
+ options: Parameters<Contract<M>['$decodeEvents']>[1],
148
+ ): GetCallResultByHashReturnType<M, Fn> {
233
149
  let message: string;
234
150
  switch (returnType) {
235
- case 'ok': return;
151
+ case 'ok': {
152
+ const fnAci = this.#getFunctionAci(fnName);
153
+ return {
154
+ decodedResult: this._calldata.decode(this._name, fnAci.name, returnValue),
155
+ decodedEvents: this.$decodeEvents(log, options),
156
+ };
157
+ }
236
158
  case 'revert':
237
159
  message = this._calldata.decodeFateString(returnValue);
238
160
  break;
@@ -245,30 +167,43 @@ class Contract<M extends ContractMethodsBase> {
245
167
  throw new NodeInvocationError(message, transaction);
246
168
  }
247
169
 
248
- protected async _sendAndProcess(
170
+ async #sendAndProcess<Fn extends MethodNames<M>>(
249
171
  tx: Encoded.Transaction,
250
- options: any,
251
- ): Promise<SendAndProcessReturnType> {
252
- options = { ...this.$options, ...options };
253
- const txData = await send(tx, options);
254
- const result = {
172
+ fnName: Fn,
173
+ options: SendTransactionOptions & Parameters<Contract<M>['$getCallResultByTxHash']>[2],
174
+ ): Promise<SendAndProcessReturnType & Partial<GetCallResultByHashReturnType<M, Fn>>> {
175
+ const txData = await sendTransaction(tx, { ...this.$options, ...options });
176
+ return {
255
177
  hash: txData.hash,
256
178
  tx: unpackTx<Tag.ContractCallTx | Tag.ContractCreateTx>(txData.rawTx),
257
179
  txData,
258
180
  rawTx: txData.rawTx,
181
+ ...txData.blockHeight != null && (
182
+ await this.$getCallResultByTxHash(txData.hash, fnName, options)
183
+ ),
184
+ };
185
+ }
186
+
187
+ async $getCallResultByTxHash<Fn extends MethodNames<M>>(
188
+ hash: Encoded.TxHash,
189
+ fnName: Fn,
190
+ options?: Parameters<Contract<M>['$decodeEvents']>[1],
191
+ ): Promise<GetCallResultByHashReturnType<M, Fn> & { result: ContractCallObject }> {
192
+ const { callInfo } = await this.$options.onNode.getTransactionInfoByHash(hash);
193
+ if (callInfo == null) {
194
+ throw new ContractError(`callInfo is not available for transaction ${hash}`);
195
+ }
196
+ const callInfoTyped = callInfo as ContractCallObject;
197
+ return {
198
+ ...this.#getCallResult(callInfoTyped, fnName, undefined, options),
199
+ result: callInfoTyped,
259
200
  };
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
201
  }
267
202
 
268
203
  async _estimateGas<Fn extends MethodNames<M>>(
269
204
  name: Fn,
270
205
  params: MethodParameters<M, Fn>,
271
- options: object = {},
206
+ options: Omit<Parameters<Contract<M>['$call']>[2], 'callStatic'> = {},
272
207
  ): Promise<number> {
273
208
  const { result } = await this.$call(name, params, { ...options, callStatic: true });
274
209
  if (result == null) throw new UnexpectedTsError();
@@ -285,29 +220,41 @@ class Contract<M extends ContractMethodsBase> {
285
220
  */
286
221
  async $deploy(
287
222
  params: MethodParameters<M, 'init'>,
288
- options?: Parameters<Contract<M>['$call']>[2] & Parameters<Contract<M>['_sendAndProcess']>[1],
223
+ options?: Parameters<Contract<M>['$call']>[2]
224
+ & Partial<BuildTxOptions<Tag.ContractCreateTx, 'ownerId' | 'code' | 'callData'>>,
289
225
  ): Promise<Omit<SendAndProcessReturnType, 'hash'> & {
290
226
  transaction?: Encoded.TxHash;
291
227
  owner?: Encoded.AccountAddress;
292
228
  address?: Encoded.ContractAddress;
229
+ decodedEvents?: ReturnType<Contract<M>['$decodeEvents']>;
293
230
  }> {
294
- const opt = { ...this.$options, ...options };
231
+ const { callStatic, ...opt } = { ...this.$options, ...options };
295
232
  if (this.$options.bytecode == null) await this.$compile();
296
- if (opt.callStatic === true) return this.$call('init', params, opt);
233
+ if (callStatic === true) return this.$call('init', params, { ...opt, callStatic });
297
234
  if (this.$options.address != null) throw new DuplicateContractError();
298
235
 
236
+ if (opt.onAccount == null) throw new IllegalArgumentError('Can\'t deploy without account');
299
237
  const ownerId = opt.onAccount.address;
300
- const tx = await _buildTx(Tag.ContractCreateTx, {
238
+ if (this.$options.bytecode == null) throw new IllegalArgumentError('Can\'t deploy without bytecode');
239
+ const tx = await buildTxAsync({
301
240
  ...opt,
241
+ tag: Tag.ContractCreateTx,
302
242
  gasLimit: opt.gasLimit ?? await this._estimateGas('init', params, opt),
303
243
  callData: this._calldata.encode(this._name, 'init', params),
304
244
  code: this.$options.bytecode,
305
245
  ownerId,
306
246
  });
307
247
  this.$options.address = buildContractIdByContractTx(tx);
308
- const { hash, ...other } = await this._sendAndProcess(tx, opt);
248
+ const { hash, ...other } = await this.#sendAndProcess(
249
+ tx,
250
+ 'init',
251
+ { ...opt, onAccount: opt.onAccount },
252
+ );
309
253
  return {
310
254
  ...other,
255
+ ...other.result?.log != null && {
256
+ decodedEvents: this.$decodeEvents(other.result.log, opt),
257
+ },
311
258
  owner: ownerId,
312
259
  transaction: hash,
313
260
  address: this.$options.address,
@@ -319,14 +266,18 @@ class Contract<M extends ContractMethodsBase> {
319
266
  * @param name - Function name
320
267
  * @returns function ACI
321
268
  */
322
- protected _getFunctionACI(name: string): Partial<FunctionACI> {
323
- const fn = this._aci.encodedAci.contract.functions.find(
269
+ #getFunctionAci(name: string): FunctionAci {
270
+ const fn = this.#aciContract.functions.find(
324
271
  (f: { name: string }) => f.name === name,
325
272
  );
326
273
  if (fn != null) {
327
274
  return fn;
328
275
  }
329
- if (name === 'init') return { payable: false };
276
+ if (name === 'init') {
277
+ return {
278
+ arguments: [], name: 'init', payable: false, returns: 'unit', stateful: true,
279
+ };
280
+ }
330
281
  throw new NoSuchContractFunctionError(`Function ${name} doesn't exist in contract`);
331
282
  }
332
283
 
@@ -340,25 +291,29 @@ class Contract<M extends ContractMethodsBase> {
340
291
  async $call<Fn extends MethodNames<M>>(
341
292
  fn: Fn,
342
293
  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);
294
+ options: Partial<BuildTxOptions<Tag.ContractCallTx, 'callerId' | 'contractId' | 'callData'>>
295
+ & Parameters<Contract<M>['$decodeEvents']>[1]
296
+ & Omit<SendTransactionOptions, 'onAccount' | 'onNode'>
297
+ & Omit<Parameters<typeof txDryRun>[2], 'onNode'>
298
+ & { onAccount?: AccountBase; onNode?: Node; callStatic?: boolean } = {},
299
+ ): Promise<SendAndProcessReturnType & Partial<GetCallResultByHashReturnType<M, Fn>>> {
300
+ const { callStatic, top, ...opt } = { ...this.$options, ...options };
301
+ const fnAci = this.#getFunctionAci(fn);
350
302
  const contractId = this.$options.address;
351
303
  const { onNode } = opt;
352
304
 
353
305
  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);
306
+ if (fn === 'init' && callStatic !== true) throw new InvalidMethodInvocationError('"init" can be called only via dryRun');
307
+ if (fn !== 'init' && opt.amount != null && opt.amount > 0 && !fnAci.payable) {
308
+ throw new NotPayableFunctionError(opt.amount, fn);
309
+ }
356
310
 
357
311
  let callerId;
358
312
  try {
313
+ if (opt.onAccount == null) throw new InternalError('Use fallback account');
359
314
  callerId = opt.onAccount.address;
360
315
  } catch (error) {
361
- const useFallbackAccount = opt.callStatic === true && (
316
+ const useFallbackAccount = callStatic === true && (
362
317
  (error instanceof TypeError && error.message === 'Account should be an address (ak-prefixed string), or instance of AccountBase, got undefined instead')
363
318
  || (error instanceof NoWalletConnectedError)
364
319
  );
@@ -367,51 +322,53 @@ class Contract<M extends ContractMethodsBase> {
367
322
  }
368
323
  const callData = this._calldata.encode(this._name, fn, params);
369
324
 
370
- let res: any;
371
- if (opt.callStatic === true) {
372
- if (typeof opt.top === 'number') {
373
- opt.top = (await getKeyBlock(opt.top, { onNode })).hash;
325
+ if (callStatic === true) {
326
+ if (opt.nonce == null && top != null) {
327
+ const topKey = typeof top === 'number' ? 'height' : 'hash';
328
+ opt.nonce = (await getAccount(callerId, { [topKey]: top, onNode })).nonce + 1;
374
329
  }
375
330
  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
331
  let tx;
380
332
  if (fn === 'init') {
381
333
  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
- );
334
+ tx = await buildTxAsync({
335
+ ...txOpt, tag: Tag.ContractCreateTx, code: this.$options.bytecode, ownerId: callerId,
336
+ });
386
337
  } else {
387
338
  if (contractId == null) throw new MissingContractAddressError('Can\'t dry-run contract without address');
388
- tx = await _buildTx(Tag.ContractCallTx, { ...txOpt, callerId, contractId });
339
+ tx = await buildTxAsync({
340
+ ...txOpt, tag: Tag.ContractCallTx, callerId, contractId,
341
+ });
389
342
  }
390
343
 
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);
344
+ const { callObj, ...dryRunOther } = await txDryRun(tx, callerId, { ...opt, top });
345
+ if (callObj == null) {
346
+ throw new InternalError(`callObj is not available for transaction ${tx}`);
347
+ }
348
+ const callInfoTyped = callObj as ContractCallObject;
349
+ return {
350
+ ...dryRunOther,
351
+ ...this.#getCallResult(callInfoTyped, fn, tx, opt),
352
+ tx: unpackTx(tx),
353
+ result: callInfoTyped,
354
+ rawTx: tx,
355
+ hash: buildTxHash(tx),
356
+ txData: undefined as any,
357
+ };
413
358
  }
414
- return res;
359
+
360
+ if (top != null) throw new IllegalArgumentError('Can\'t handle `top` option in on-chain contract call');
361
+ if (contractId == null) throw new MissingContractAddressError('Can\'t call contract without address');
362
+ const tx = await buildTxAsync({
363
+ ...opt,
364
+ tag: Tag.ContractCallTx,
365
+ gasLimit: opt.gasLimit ?? await this._estimateGas(fn, params, opt),
366
+ callerId,
367
+ contractId,
368
+ callData,
369
+ });
370
+ if (opt.onAccount == null) throw new IllegalArgumentError('Can\'t call contract on chain without account');
371
+ return this.#sendAndProcess(tx, fn, { ...opt, onAccount: opt.onAccount });
415
372
  }
416
373
 
417
374
  /**
@@ -422,12 +379,10 @@ class Contract<M extends ContractMethodsBase> {
422
379
  * @throws {@link MissingEventDefinitionError}
423
380
  * @throws {@link AmbiguousEventDefinitionError}
424
381
  */
425
- protected _getContractNameByEvent(
382
+ #getContractNameByEvent(
426
383
  ctAddress: Encoded.ContractAddress,
427
384
  nameHash: BigInt,
428
- { contractAddressToName }: {
429
- contractAddressToName?: { [key: Encoded.ContractAddress]: string };
430
- },
385
+ { contractAddressToName }: GetContractNameByEventOptions,
431
386
  ): string {
432
387
  const addressToName = { ...this.$options.contractAddressToName, ...contractAddressToName };
433
388
  if (addressToName[ctAddress] != null) return addressToName[ctAddress];
@@ -435,9 +390,11 @@ class Contract<M extends ContractMethodsBase> {
435
390
  // TODO: consider using a third-party library
436
391
  const isEqual = (a: any, b: any): boolean => JSON.stringify(a) === JSON.stringify(b);
437
392
 
438
- const matchedEvents = [this._aci.encodedAci, ...this._aci.externalEncodedAci]
439
- .filter(({ contract }) => contract?.event)
440
- .map(({ contract }) => [contract.name, contract.event.variant])
393
+ const contracts = this._aci
394
+ .map(({ contract }) => contract)
395
+ .filter((contract) => contract?.event) as ContractAci[];
396
+ const matchedEvents = contracts
397
+ .map((contract) => [contract.name, contract.event.variant])
441
398
  .map(([name, events]) => events.map((event: {}) => (
442
399
  [name, Object.keys(event)[0], Object.values(event)[0]]
443
400
  )))
@@ -459,15 +416,14 @@ class Contract<M extends ContractMethodsBase> {
459
416
  */
460
417
  $decodeEvents(
461
418
  events: Event[],
462
- { omitUnknown, ...opt }: { omitUnknown?: boolean } &
463
- Parameters<Contract<M>['_getContractNameByEvent']>[2] = {},
419
+ { omitUnknown, ...opt }: { omitUnknown?: boolean } & GetContractNameByEventOptions = {},
464
420
  ): DecodedEvent[] {
465
421
  return events
466
422
  .map((event) => {
467
423
  const topics = event.topics.map((t: string | number) => BigInt(t));
468
424
  let contractName;
469
425
  try {
470
- contractName = this._getContractNameByEvent(event.address, topics[0], opt);
426
+ contractName = this.#getContractNameByEvent(event.address, topics[0], opt);
471
427
  } catch (error) {
472
428
  if ((omitUnknown ?? false) && error instanceof MissingEventDefinitionError) return null;
473
429
  throw error;
@@ -489,10 +445,11 @@ class Contract<M extends ContractMethodsBase> {
489
445
  {
490
446
  onCompiler,
491
447
  onNode,
492
- sourceCode,
493
448
  bytecode,
494
449
  aci,
495
450
  address,
451
+ sourceCodePath,
452
+ sourceCode,
496
453
  fileSystem,
497
454
  validateBytecode,
498
455
  ...otherOptions
@@ -502,9 +459,14 @@ class Contract<M extends ContractMethodsBase> {
502
459
  address?: Encoded.ContractAddress | AensName;
503
460
  },
504
461
  ): 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;
462
+ if (aci == null && onCompiler != null) {
463
+ let res;
464
+ if (sourceCodePath != null) res = await onCompiler.compile(sourceCodePath);
465
+ if (sourceCode != null) res = await onCompiler.compileBySourceCode(sourceCode, fileSystem);
466
+ if (res != null) {
467
+ aci = res.aci;
468
+ bytecode ??= res.bytecode;
469
+ }
508
470
  }
509
471
  if (aci == null) throw new MissingContractDefError();
510
472
 
@@ -525,14 +487,15 @@ class Contract<M extends ContractMethodsBase> {
525
487
  if (contract.active == null) throw new InactiveContractError(address);
526
488
  }
527
489
 
528
- if (validateBytecode != null) {
490
+ if (validateBytecode === true) {
529
491
  if (address == null) throw new MissingContractAddressError('Can\'t validate bytecode without contract address');
530
492
  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;
493
+ let isValid = false;
494
+ if (bytecode != null) isValid = bytecode === onChanBytecode;
495
+ else if (sourceCode != null) {
496
+ if (onCompiler == null) throw new IllegalArgumentError('Can\'t validate bytecode without compiler');
497
+ isValid = await onCompiler.validateBySourceCode(onChanBytecode, sourceCode, fileSystem);
498
+ }
536
499
  if (!isValid) throw new BytecodeMismatchError(sourceCode != null ? 'source code' : 'bytecode');
537
500
  }
538
501
 
@@ -543,36 +506,33 @@ class Contract<M extends ContractMethodsBase> {
543
506
 
544
507
  _aci: Aci;
545
508
 
509
+ #aciContract: ContractAci;
510
+
546
511
  _name: string;
547
512
 
548
513
  _calldata: Calldata;
549
514
 
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
- };
515
+ $options: Omit<ConstructorParameters<typeof Contract>[0], 'aci'>;
560
516
 
561
517
  constructor({ aci, ...otherOptions }: {
562
- onAccount?: AccountBase;
563
- onCompiler: CompilerHttp;
518
+ onCompiler?: CompilerBase;
564
519
  onNode: Node;
565
- sourceCode?: string;
566
520
  bytecode?: Encoded.ContractBytearray;
567
521
  aci: Aci;
568
522
  address?: Encoded.ContractAddress;
569
- fileSystem?: Record<string, string>;
570
- [key: string]: any;
571
- }) {
523
+ sourceCodePath?: Parameters<CompilerBase['compile']>[0];
524
+ sourceCode?: Parameters<CompilerBase['compileBySourceCode']>[0];
525
+ fileSystem?: Parameters<CompilerBase['compileBySourceCode']>[1];
526
+ } & Parameters<Contract<M>['$deploy']>[1]) {
572
527
  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 };
528
+ const aciLast = aci[aci.length - 1];
529
+ if (aciLast.contract == null) {
530
+ throw new IllegalArgumentError(`The last 'aci' item should have 'contract' key, got ${Object.keys(aciLast)} keys instead`);
531
+ }
532
+ this.#aciContract = aciLast.contract;
533
+ this._name = this.#aciContract.name;
534
+ this._calldata = new Calldata(aci);
535
+ this.$options = otherOptions;
576
536
 
577
537
  /**
578
538
  * Generate proto function based on contract function using Contract ACI schema
@@ -590,8 +550,8 @@ class Contract<M extends ContractMethodsBase> {
590
550
  */
591
551
  Object.assign(
592
552
  this,
593
- Object.fromEntries(this._aci.encodedAci.contract.functions
594
- .map(({ name, arguments: aciArgs, stateful }: FunctionACI) => {
553
+ Object.fromEntries(this.#aciContract.functions
554
+ .map(({ name, arguments: aciArgs, stateful }: FunctionAci) => {
595
555
  const callStatic = name !== 'init' && !stateful;
596
556
  return [
597
557
  name,