@aeternity/aepp-sdk 12.0.0 → 12.1.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 (283) hide show
  1. package/dist/aepp-sdk.browser-script.js +1 -1
  2. package/dist/aepp-sdk.browser-script.js.LICENSE.txt +0 -15
  3. package/dist/aepp-sdk.browser-script.js.map +1 -1
  4. package/dist/aepp-sdk.browser.js +2 -1
  5. package/dist/aepp-sdk.browser.js.LICENSE.txt +1 -0
  6. package/dist/aepp-sdk.browser.js.map +1 -1
  7. package/dist/aepp-sdk.js +20764 -1
  8. package/dist/aepp-sdk.js.map +1 -1
  9. package/es/AeSdk.d.ts +7 -7
  10. package/es/AeSdk.mjs.map +1 -1
  11. package/es/AeSdkAepp.d.ts +4 -3
  12. package/es/AeSdkAepp.mjs +2 -1
  13. package/es/AeSdkAepp.mjs.map +1 -1
  14. package/es/AeSdkBase.d.ts +22 -21
  15. package/es/AeSdkBase.mjs +25 -21
  16. package/es/AeSdkBase.mjs.map +1 -1
  17. package/es/AeSdkWallet.d.ts +4 -3
  18. package/es/AeSdkWallet.mjs +5 -1
  19. package/es/AeSdkWallet.mjs.map +1 -1
  20. package/es/Node.d.ts +7 -10
  21. package/es/Node.mjs +63 -57
  22. package/es/Node.mjs.map +1 -1
  23. package/es/account/Base.d.ts +7 -4
  24. package/es/account/Base.mjs +3 -3
  25. package/es/account/Base.mjs.map +1 -1
  26. package/es/account/Memory.d.ts +5 -4
  27. package/es/account/Memory.mjs +24 -2
  28. package/es/account/Memory.mjs.map +1 -1
  29. package/es/account/Rpc.d.ts +6 -6
  30. package/es/account/Rpc.mjs +3 -2
  31. package/es/account/Rpc.mjs.map +1 -1
  32. package/es/aens.d.ts +27 -14
  33. package/es/aens.mjs +27 -21
  34. package/es/aens.mjs.map +1 -1
  35. package/es/aepp-wallet-communication/connection/Browser.d.ts +2 -1
  36. package/es/aepp-wallet-communication/connection/Browser.mjs +5 -2
  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 +1 -0
  40. package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -1
  41. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.d.ts +1 -0
  42. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs +5 -1
  43. package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs.map +1 -1
  44. package/es/aepp-wallet-communication/connection-proxy.d.ts +1 -0
  45. package/es/aepp-wallet-communication/connection-proxy.mjs +1 -0
  46. package/es/aepp-wallet-communication/connection-proxy.mjs.map +1 -1
  47. package/es/aepp-wallet-communication/rpc/RpcClient.d.ts +1 -0
  48. package/es/aepp-wallet-communication/rpc/RpcClient.mjs +5 -5
  49. package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -1
  50. package/es/aepp-wallet-communication/rpc/types.d.ts +8 -8
  51. package/es/aepp-wallet-communication/rpc/types.mjs.map +1 -1
  52. package/es/aepp-wallet-communication/schema.d.ts +17 -2
  53. package/es/aepp-wallet-communication/schema.mjs +54 -17
  54. package/es/aepp-wallet-communication/schema.mjs.map +1 -1
  55. package/es/aepp-wallet-communication/wallet-detector.d.ts +2 -1
  56. package/es/aepp-wallet-communication/wallet-detector.mjs +2 -3
  57. package/es/aepp-wallet-communication/wallet-detector.mjs.map +1 -1
  58. package/es/apis/node/models/index.d.ts +6 -2
  59. package/es/apis/node/models/index.mjs.map +1 -1
  60. package/es/apis/node/models/mappers.mjs +4 -2
  61. package/es/apis/node/models/mappers.mjs.map +1 -1
  62. package/es/chain.d.ts +92 -64
  63. package/es/chain.mjs +190 -154
  64. package/es/chain.mjs.map +1 -1
  65. package/es/channel/handlers.d.ts +3 -3
  66. package/es/channel/handlers.mjs +42 -44
  67. package/es/channel/handlers.mjs.map +1 -1
  68. package/es/channel/index.d.ts +43 -52
  69. package/es/channel/index.mjs +46 -49
  70. package/es/channel/index.mjs.map +1 -1
  71. package/es/channel/internal.d.ts +16 -15
  72. package/es/channel/internal.mjs +67 -62
  73. package/es/channel/internal.mjs.map +1 -1
  74. package/es/contract/Compiler.d.ts +1 -0
  75. package/es/contract/Compiler.mjs +5 -4
  76. package/es/contract/Compiler.mjs.map +1 -1
  77. package/es/contract/aci.d.ts +17 -15
  78. package/es/contract/aci.mjs +58 -45
  79. package/es/contract/aci.mjs.map +1 -1
  80. package/es/contract/ga.d.ts +16 -15
  81. package/es/contract/ga.mjs +12 -7
  82. package/es/contract/ga.mjs.map +1 -1
  83. package/es/contract/methods.d.ts +9 -6
  84. package/es/contract/methods.mjs +9 -6
  85. package/es/contract/methods.mjs.map +1 -1
  86. package/es/deprecated/index.d.ts +143 -0
  87. package/es/deprecated/index.mjs +162 -0
  88. package/es/deprecated/index.mjs.map +1 -0
  89. package/es/deprecated/methods.d.ts +18 -0
  90. package/es/deprecated/methods.mjs +26 -0
  91. package/es/deprecated/methods.mjs.map +1 -0
  92. package/es/index.d.ts +4 -1
  93. package/es/index.mjs +4 -1
  94. package/es/index.mjs.map +1 -1
  95. package/es/oracle.d.ts +69 -62
  96. package/es/oracle.mjs +121 -103
  97. package/es/oracle.mjs.map +1 -1
  98. package/es/spend.d.ts +16 -15
  99. package/es/spend.mjs +19 -30
  100. package/es/spend.mjs.map +1 -1
  101. package/es/tx/builder/address.d.ts +25 -0
  102. package/es/tx/builder/address.mjs +45 -0
  103. package/es/tx/builder/address.mjs.map +1 -0
  104. package/es/tx/builder/constants.d.ts +55 -26
  105. package/es/tx/builder/constants.mjs +60 -38
  106. package/es/tx/builder/constants.mjs.map +1 -1
  107. package/es/tx/builder/field-types/coin-amount.d.ts +13 -0
  108. package/es/tx/builder/field-types/coin-amount.mjs +26 -0
  109. package/es/tx/builder/field-types/coin-amount.mjs.map +1 -0
  110. package/es/tx/builder/field-types/deposit.d.ts +15 -0
  111. package/es/tx/builder/field-types/deposit.mjs +19 -0
  112. package/es/tx/builder/field-types/deposit.mjs.map +1 -0
  113. package/es/tx/builder/field-types/fee.d.ts +25 -0
  114. package/es/tx/{min-fee.mjs → builder/field-types/fee.mjs} +62 -60
  115. package/es/tx/builder/field-types/fee.mjs.map +1 -0
  116. package/es/tx/builder/field-types/field.d.ts +6 -0
  117. package/es/tx/builder/field-types/field.mjs +15 -0
  118. package/es/tx/builder/field-types/field.mjs.map +1 -0
  119. package/es/tx/builder/field-types/gas-limit.d.ts +12 -0
  120. package/es/tx/builder/field-types/gas-limit.mjs +33 -0
  121. package/es/tx/builder/field-types/gas-limit.mjs.map +1 -0
  122. package/es/tx/builder/field-types/gas-price.d.ts +8 -0
  123. package/es/tx/builder/field-types/gas-price.mjs +18 -0
  124. package/es/tx/builder/field-types/gas-price.mjs.map +1 -0
  125. package/es/tx/builder/field-types/index.d.ts +70 -0
  126. package/es/tx/builder/field-types/index.mjs +25 -0
  127. package/es/tx/builder/field-types/index.mjs.map +1 -0
  128. package/es/tx/builder/field-types/name-fee.d.ts +20 -0
  129. package/es/tx/builder/field-types/name-fee.mjs +24 -0
  130. package/es/tx/builder/field-types/name-fee.mjs.map +1 -0
  131. package/es/tx/builder/field-types/name-id.d.ts +14 -0
  132. package/es/tx/builder/field-types/name-id.mjs +19 -0
  133. package/es/tx/builder/field-types/name-id.mjs.map +1 -0
  134. package/es/tx/builder/field-types/name.d.ts +13 -0
  135. package/es/tx/builder/field-types/name.mjs +18 -0
  136. package/es/tx/builder/field-types/name.mjs.map +1 -0
  137. package/es/tx/builder/field-types/short-u-int.d.ts +6 -0
  138. package/es/tx/builder/field-types/short-u-int.mjs +12 -0
  139. package/es/tx/builder/field-types/short-u-int.mjs.map +1 -0
  140. package/es/tx/builder/field-types/u-int.d.ts +8 -0
  141. package/es/tx/builder/field-types/u-int.mjs +14 -0
  142. package/es/tx/builder/field-types/u-int.mjs.map +1 -0
  143. package/es/tx/builder/helpers.d.ts +27 -33
  144. package/es/tx/builder/helpers.mjs +41 -47
  145. package/es/tx/builder/helpers.mjs.map +1 -1
  146. package/es/tx/builder/index.d.ts +25 -12
  147. package/es/tx/builder/index.mjs +74 -83
  148. package/es/tx/builder/index.mjs.map +1 -1
  149. package/es/tx/builder/schema.d.ts +995 -144
  150. package/es/tx/builder/schema.mjs +121 -170
  151. package/es/tx/builder/schema.mjs.map +1 -1
  152. package/es/tx/index.d.ts +28 -27
  153. package/es/tx/index.mjs +97 -117
  154. package/es/tx/index.mjs.map +1 -1
  155. package/es/tx/validator.d.ts +4 -3
  156. package/es/tx/validator.mjs +79 -92
  157. package/es/tx/validator.mjs.map +1 -1
  158. package/es/typings/@aeternity__argon2-browser/index.d.mjs.map +1 -1
  159. package/es/typings/@aeternity__uuid/index.d.mjs.map +1 -1
  160. package/es/typings/bip32-path/index.d.mjs.map +1 -1
  161. package/es/typings/blakejs/index.d.mjs.map +1 -1
  162. package/es/typings/sha-js/index.d.mjs +2 -0
  163. package/es/typings/sha-js/index.d.mjs.map +1 -0
  164. package/es/typings/tweetnacl-auth/index.d.mjs.map +1 -1
  165. package/es/utils/amount-formatter.d.ts +9 -9
  166. package/es/utils/amount-formatter.mjs +17 -17
  167. package/es/utils/amount-formatter.mjs.map +1 -1
  168. package/es/utils/autorest.mjs +7 -7
  169. package/es/utils/autorest.mjs.map +1 -1
  170. package/es/utils/bignumber.mjs +2 -1
  171. package/es/utils/bignumber.mjs.map +1 -1
  172. package/es/utils/bytes.mjs +1 -1
  173. package/es/utils/bytes.mjs.map +1 -1
  174. package/es/utils/crypto.d.ts +8 -23
  175. package/es/utils/crypto.mjs +15 -41
  176. package/es/utils/crypto.mjs.map +1 -1
  177. package/es/utils/encoder-types.d.ts +61 -0
  178. package/es/utils/encoder-types.mjs +36 -0
  179. package/es/utils/encoder-types.mjs.map +1 -0
  180. package/es/utils/encoder.d.ts +6 -7
  181. package/es/utils/encoder.mjs +42 -26
  182. package/es/utils/encoder.mjs.map +1 -1
  183. package/es/utils/errors.d.ts +1 -11
  184. package/es/utils/errors.mjs +4 -20
  185. package/es/utils/errors.mjs.map +1 -1
  186. package/es/utils/hd-wallet.d.ts +18 -2
  187. package/es/utils/hd-wallet.mjs +64 -34
  188. package/es/utils/hd-wallet.mjs.map +1 -1
  189. package/es/utils/json-big.mjs +2 -2
  190. package/es/utils/json-big.mjs.map +1 -1
  191. package/es/utils/keystore.mjs +4 -2
  192. package/es/utils/keystore.mjs.map +1 -1
  193. package/es/utils/mptree.d.ts +2 -2
  194. package/es/utils/mptree.mjs +11 -6
  195. package/es/utils/mptree.mjs.map +1 -1
  196. package/es/utils/other.d.ts +8 -2
  197. package/es/utils/other.mjs +15 -3
  198. package/es/utils/other.mjs.map +1 -1
  199. package/es/utils/semver-satisfies.d.ts +1 -1
  200. package/es/utils/semver-satisfies.mjs +2 -2
  201. package/es/utils/semver-satisfies.mjs.map +1 -1
  202. package/es/utils/string.mjs.map +1 -1
  203. package/package.json +35 -33
  204. package/src/AeSdk.ts +30 -27
  205. package/src/AeSdkAepp.ts +93 -84
  206. package/src/AeSdkBase.ts +148 -130
  207. package/src/AeSdkWallet.ts +172 -156
  208. package/src/Node.ts +108 -102
  209. package/src/account/Base.ts +42 -32
  210. package/src/account/Memory.ts +45 -30
  211. package/src/account/Rpc.ts +32 -30
  212. package/src/aens.ts +124 -108
  213. package/src/aepp-wallet-communication/connection/Browser.ts +18 -15
  214. package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +22 -21
  215. package/src/aepp-wallet-communication/connection/BrowserWindowMessage.ts +63 -52
  216. package/src/aepp-wallet-communication/connection-proxy.ts +8 -7
  217. package/src/aepp-wallet-communication/rpc/RpcClient.ts +67 -61
  218. package/src/aepp-wallet-communication/rpc/types.ts +32 -32
  219. package/src/aepp-wallet-communication/schema.ts +117 -74
  220. package/src/aepp-wallet-communication/wallet-detector.ts +29 -28
  221. package/src/apis/node/code-model-v4.yaml +54 -20
  222. package/src/apis/node/models/index.ts +6 -2
  223. package/src/apis/node/models/mappers.ts +4 -2
  224. package/src/chain.ts +286 -228
  225. package/src/channel/handlers.ts +424 -372
  226. package/src/channel/index.ts +285 -251
  227. package/src/channel/internal.ts +248 -232
  228. package/src/contract/Compiler.ts +22 -21
  229. package/src/contract/aci.ts +267 -258
  230. package/src/contract/ga.ts +93 -72
  231. package/src/contract/methods.ts +32 -27
  232. package/src/deprecated/index.ts +170 -0
  233. package/src/deprecated/methods.ts +25 -0
  234. package/src/index.ts +37 -32
  235. package/src/oracle.ts +211 -189
  236. package/src/spend.ts +82 -70
  237. package/src/tx/builder/address.ts +50 -0
  238. package/src/tx/builder/constants.ts +82 -52
  239. package/src/tx/builder/field-types/coin-amount.ts +27 -0
  240. package/src/tx/builder/field-types/deposit.ts +21 -0
  241. package/src/tx/builder/field-types/fee.ts +143 -0
  242. package/src/tx/builder/field-types/field.ts +9 -0
  243. package/src/tx/builder/field-types/gas-limit.ts +41 -0
  244. package/src/tx/builder/field-types/gas-price.ts +16 -0
  245. package/src/tx/builder/field-types/index.ts +45 -0
  246. package/src/tx/builder/field-types/name-fee.ts +32 -0
  247. package/src/tx/builder/field-types/name-id.ts +20 -0
  248. package/src/tx/builder/field-types/name.ts +18 -0
  249. package/src/tx/builder/field-types/short-u-int.ts +11 -0
  250. package/src/tx/builder/field-types/u-int.ts +16 -0
  251. package/src/tx/builder/helpers.ts +112 -117
  252. package/src/tx/builder/index.ts +203 -197
  253. package/src/tx/builder/schema.ts +421 -465
  254. package/src/tx/index.ts +128 -135
  255. package/src/tx/validator.ts +165 -161
  256. package/src/typings/@aeternity__argon2-browser/index.d.ts +1 -1
  257. package/src/typings/@aeternity__uuid/index.d.ts +3 -1
  258. package/src/typings/bip32-path/index.d.ts +6 -6
  259. package/src/typings/blakejs/index.d.ts +4 -32
  260. package/src/typings/sha-js/index.d.ts +5 -0
  261. package/src/typings/tweetnacl-auth/index.d.ts +2 -2
  262. package/src/utils/amount-formatter.ts +41 -41
  263. package/src/utils/autorest.ts +57 -54
  264. package/src/utils/bignumber.ts +7 -6
  265. package/src/utils/bytes.ts +19 -19
  266. package/src/utils/crypto.ts +82 -94
  267. package/src/utils/encoder-types.ts +63 -0
  268. package/src/utils/encoder.ts +104 -56
  269. package/src/utils/errors.ts +246 -264
  270. package/src/utils/hd-wallet.ts +114 -82
  271. package/src/utils/json-big.ts +16 -15
  272. package/src/utils/keystore.ts +65 -62
  273. package/src/utils/mptree.ts +59 -56
  274. package/src/utils/other.ts +26 -18
  275. package/src/utils/semver-satisfies.ts +15 -11
  276. package/src/utils/string.ts +10 -10
  277. package/es/tx/builder/field-types.d.ts +0 -62
  278. package/es/tx/builder/field-types.mjs +0 -126
  279. package/es/tx/builder/field-types.mjs.map +0 -1
  280. package/es/tx/min-fee.d.ts +0 -20
  281. package/es/tx/min-fee.mjs.map +0 -1
  282. package/src/tx/builder/field-types.ts +0 -111
  283. package/src/tx/min-fee.ts +0 -136
@@ -19,18 +19,20 @@ import _aeternityAeppCalldata from '@aeternity/aepp-calldata';
19
19
  const {
20
20
  Encoder: Calldata
21
21
  } = _aeternityAeppCalldata;
22
- import { DRY_RUN_ACCOUNT, GAS_MAX, TX_TYPE, AMOUNT } from "../tx/builder/schema.mjs";
22
+ import { DRY_RUN_ACCOUNT, AMOUNT } from "../tx/builder/schema.mjs";
23
+ import { Tag } from "../tx/builder/constants.mjs";
23
24
  import { buildContractIdByContractTx, unpackTx } from "../tx/builder/index.mjs";
24
25
  import { _buildTx } from "../tx/index.mjs";
25
26
  import { send } from "../spend.mjs";
26
27
  import { decode } from "../utils/encoder.mjs";
27
- import { MissingContractDefError, MissingContractAddressError, InactiveContractError, BytecodeMismatchError, DuplicateContractError, MissingFunctionNameError, InvalidMethodInvocationError, NotPayableFunctionError, TypeError, NodeInvocationError, IllegalArgumentError, NoSuchContractFunctionError, MissingEventDefinitionError, AmbiguousEventDefinitionError, UnexpectedTsError } from "../utils/errors.mjs";
28
- import { hash } from "../utils/crypto.mjs";
28
+ import { MissingContractDefError, MissingContractAddressError, InactiveContractError, BytecodeMismatchError, DuplicateContractError, MissingFunctionNameError, InvalidMethodInvocationError, NotPayableFunctionError, TypeError, NodeInvocationError, IllegalArgumentError, NoSuchContractFunctionError, MissingEventDefinitionError, AmbiguousEventDefinitionError, UnexpectedTsError, InternalError } from "../utils/errors.mjs";
29
+ import { hash as calcHash } from "../utils/crypto.mjs";
29
30
  import { getAccount, getContract, getContractByteCode, getKeyBlock, resolveName, txDryRun } from "../chain.mjs";
30
31
 
31
32
  /**
32
33
  * Generate contract ACI object with predefined js methods for contract usage - can be used for
33
34
  * creating a reference to already deployed contracts
35
+ * @category contract
34
36
  * @param options - Options object
35
37
  * @returns JS Contract API
36
38
  * @example
@@ -108,13 +110,23 @@ export default async function getContractInstance(_ref) {
108
110
  fileSystem,
109
111
  ...otherOptions
110
112
  },
111
- compile: async function (_options) {},
112
- _estimateGas: async function (_name, _params, _options) {},
113
- deploy: async function (_params, _options) {},
114
- call: async function (_fn, _params, _options) {},
113
+
114
+ /* eslint-disable @typescript-eslint/no-unused-vars */
115
+
116
+ /* eslint-disable @typescript-eslint/no-empty-function */
117
+ async compile(_options) {},
118
+
119
+ async _estimateGas(_name, _params, _options) {},
120
+
121
+ async deploy(_params, _options) {},
122
+
123
+ async call(_fn, _params, _options) {},
115
124
 
116
125
  decodeEvents(_events, options) {},
117
126
 
127
+ /* eslint-enable @typescript-eslint/no-unused-vars */
128
+
129
+ /* eslint-enable @typescript-eslint/no-empty-function */
118
130
  methods: undefined
119
131
  };
120
132
 
@@ -149,6 +161,32 @@ export default async function getContractInstance(_ref) {
149
161
  return instance.bytecode;
150
162
  };
151
163
 
164
+ const handleCallError = (_ref2, transaction) => {
165
+ let {
166
+ returnType,
167
+ returnValue
168
+ } = _ref2;
169
+ let message;
170
+
171
+ switch (returnType) {
172
+ case 'ok':
173
+ return;
174
+
175
+ case 'revert':
176
+ message = instance.calldata.decodeFateString(returnValue);
177
+ break;
178
+
179
+ case 'error':
180
+ message = decode(returnValue).toString();
181
+ break;
182
+
183
+ default:
184
+ throw new InternalError(`Unknown return type: ${returnType}`);
185
+ }
186
+
187
+ throw new NodeInvocationError(message, transaction);
188
+ };
189
+
152
190
  const sendAndProcess = async (tx, options) => {
153
191
  options = { ...instance.options,
154
192
  ...options
@@ -173,29 +211,6 @@ export default async function getContractInstance(_ref) {
173
211
  };
174
212
  };
175
213
 
176
- const handleCallError = (_ref2, transaction) => {
177
- let {
178
- returnType,
179
- returnValue
180
- } = _ref2;
181
- let message;
182
-
183
- switch (returnType) {
184
- case 'ok':
185
- return;
186
-
187
- case 'revert':
188
- message = instance.calldata.decodeFateString(returnValue);
189
- break;
190
-
191
- case 'error':
192
- message = decode(returnValue).toString();
193
- break;
194
- }
195
-
196
- throw new NodeInvocationError(message, transaction);
197
- };
198
-
199
214
  instance._estimateGas = async (name, params, options) => {
200
215
  const {
201
216
  result: {
@@ -223,12 +238,12 @@ export default async function getContractInstance(_ref) {
223
238
  const opt = { ...instance.options,
224
239
  ...options
225
240
  };
226
- if (instance.bytecode == null) await instance.compile(opt); // @ts-expect-error
241
+ if (instance.bytecode == null) await instance.compile(opt); // @ts-expect-error TODO: need to fix compatibility between return types of `deploy` and `call`
227
242
 
228
- if (opt.callStatic === true) return await instance.call('init', params, opt);
243
+ if (opt.callStatic === true) return instance.call('init', params, opt);
229
244
  if (instance.deployInfo.address != null) throw new DuplicateContractError();
230
245
  const ownerId = await opt.onAccount.address(options);
231
- const tx = await _buildTx(TX_TYPE.contractCreate, { ...opt,
246
+ const tx = await _buildTx(Tag.ContractCreateTx, { ...opt,
232
247
  gasLimit: (_opt$gasLimit = opt.gasLimit) !== null && _opt$gasLimit !== void 0 ? _opt$gasLimit : await instance._estimateGas('init', params, opt),
233
248
  callData: instance.calldata.encode(instance._name, 'init', params),
234
249
  code: instance.bytecode,
@@ -293,14 +308,13 @@ export default async function getContractInstance(_ref) {
293
308
  if (contractId == null && fn !== 'init') throw new InvalidMethodInvocationError('You need to deploy contract before calling!');
294
309
  if (fn !== 'init' && opt.amount > 0 && fnACI.payable === false) throw new NotPayableFunctionError(opt.amount, fn);
295
310
  const callerId = await Promise.resolve().then(() => opt.onAccount.address(opt)).catch(error => {
296
- if (opt.callStatic === true) return DRY_RUN_ACCOUNT.pub;else throw error;
311
+ if (opt.callStatic === true) return DRY_RUN_ACCOUNT.pub;
312
+ throw error;
297
313
  });
298
314
  const callData = instance.calldata.encode(instance._name, fn, params);
299
315
  let res;
300
316
 
301
317
  if (opt.callStatic === true) {
302
- var _opt$gasLimit2;
303
-
304
318
  if (typeof opt.top === 'number') {
305
319
  opt.top = (await getKeyBlock(opt.top, {
306
320
  onNode
@@ -309,7 +323,6 @@ export default async function getContractInstance(_ref) {
309
323
 
310
324
  const txOpt = { ...opt,
311
325
  onNode,
312
- gasLimit: (_opt$gasLimit2 = opt.gasLimit) !== null && _opt$gasLimit2 !== void 0 ? _opt$gasLimit2 : GAS_MAX,
313
326
  callData
314
327
  };
315
328
 
@@ -320,10 +333,10 @@ export default async function getContractInstance(_ref) {
320
333
  })).nonce + 1;
321
334
  }
322
335
 
323
- const tx = await (fn === 'init' ? _buildTx(TX_TYPE.contractCreate, { ...txOpt,
336
+ const tx = await (fn === 'init' ? _buildTx(Tag.ContractCreateTx, { ...txOpt,
324
337
  code: instance.bytecode,
325
338
  ownerId: callerId
326
- }) : _buildTx(TX_TYPE.contractCall, { ...txOpt,
339
+ }) : _buildTx(Tag.ContractCallTx, { ...txOpt,
327
340
  callerId,
328
341
  contractId
329
342
  }));
@@ -344,11 +357,11 @@ export default async function getContractInstance(_ref) {
344
357
  result: callObj
345
358
  };
346
359
  } else {
347
- var _opt$gasLimit3;
360
+ var _opt$gasLimit2;
348
361
 
349
- const tx = await _buildTx(TX_TYPE.contractCall, { ...opt,
362
+ const tx = await _buildTx(Tag.ContractCallTx, { ...opt,
350
363
  onNode,
351
- gasLimit: (_opt$gasLimit3 = opt.gasLimit) !== null && _opt$gasLimit3 !== void 0 ? _opt$gasLimit3 : await instance._estimateGas(fn, params, opt),
364
+ gasLimit: (_opt$gasLimit2 = opt.gasLimit) !== null && _opt$gasLimit2 !== void 0 ? _opt$gasLimit2 : await instance._estimateGas(fn, params, opt),
352
365
  callerId,
353
366
  contractId,
354
367
  callData
@@ -396,7 +409,7 @@ export default async function getContractInstance(_ref) {
396
409
  return events.map(event => [name, Object.keys(event)[0]]);
397
410
  }).flat().filter(_ref7 => {
398
411
  let [, eventName] = _ref7;
399
- return BigInt('0x' + hash(eventName).toString('hex')) === nameHash;
412
+ return BigInt(`0x${calcHash(eventName).toString('hex')}`) === nameHash;
400
413
  });
401
414
 
402
415
  switch (matchedEvents.length) {
@@ -476,11 +489,11 @@ export default async function getContractInstance(_ref) {
476
489
 
477
490
  const options = args.length === aciArgs.length + 1 ? args.pop() : {};
478
491
  if (typeof options !== 'object') throw new TypeError(`Options should be an object: ${options}`);
479
- if (name === 'init') return await instance.deploy(args, {
492
+ if (name === 'init') return instance.deploy(args, {
480
493
  callStatic,
481
494
  ...options
482
495
  });
483
- return await instance.call(name, args, {
496
+ return instance.call(name, args, {
484
497
  callStatic,
485
498
  ...options
486
499
  });
@@ -1 +1 @@
1
- {"version":3,"file":"aci.mjs","names":["DRY_RUN_ACCOUNT","GAS_MAX","TX_TYPE","AMOUNT","buildContractIdByContractTx","unpackTx","_buildTx","send","decode","MissingContractDefError","MissingContractAddressError","InactiveContractError","BytecodeMismatchError","DuplicateContractError","MissingFunctionNameError","InvalidMethodInvocationError","NotPayableFunctionError","TypeError","NodeInvocationError","IllegalArgumentError","NoSuchContractFunctionError","MissingEventDefinitionError","AmbiguousEventDefinitionError","UnexpectedTsError","hash","getAccount","getContract","getContractByteCode","getKeyBlock","resolveName","txDryRun","getContractInstance","onAccount","onCompiler","onNode","source","bytecode","aci","_aci","contractAddress","fileSystem","validateBytecode","otherOptions","generateACI","code","options","resolveByNode","contract","active","instance","_name","encodedAci","name","calldata","Calldata","externalEncodedAci","deployInfo","address","amount","callStatic","compile","_options","_estimateGas","_params","deploy","call","_fn","decodeEvents","_events","methods","undefined","onChanBytecode","isValid","validateByteCode","then","compileContract","sendAndProcess","tx","txData","result","rawTx","blockHeight","callInfo","getTransactionInfoByHash","Object","assign","handleCallError","transaction","returnType","returnValue","message","decodeFateString","toString","params","gasUsed","Math","floor","opt","ownerId","contractCreate","gasLimit","callData","encode","contractId","freeze","owner","getFunctionACI","fn","functions","find","f","payable","fnACI","callerId","Promise","resolve","catch","error","pub","res","top","txOpt","nonce","contractCall","callObj","dryRunOther","decodedResult","returns","decodedEvents","log","getContractNameByEvent","nameHash","contractAddressToName","addressToName","matchedEvents","filter","event","map","variant","events","keys","flat","eventName","BigInt","length","omitUnknown","topics","t","contractName","decoded","decodeEvent","data","args","entries","e","fromEntries","arguments","aciArgs","stateful","genHandler","pop","get"],"sources":["../../src/contract/aci.ts"],"sourcesContent":["/*\n* ISC License (ISC)\n* Copyright (c) 2022 aeternity developers\n*\n* Permission to use, copy, modify, and/or distribute this software for any\n* purpose with or without fee is hereby granted, provided that the above\n* copyright notice and this permission notice appear in all copies.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n* AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n* PERFORMANCE OF THIS SOFTWARE.\n*/\n// @ts-expect-error TODO remove\nimport { Encoder as Calldata } from '@aeternity/aepp-calldata'\nimport { DRY_RUN_ACCOUNT, GAS_MAX, TX_TYPE, AMOUNT, AensName } from '../tx/builder/schema'\nimport { buildContractIdByContractTx, unpackTx } from '../tx/builder'\nimport { _buildTx } from '../tx'\nimport { send } from '../spend'\nimport { decode, EncodedData, EncodingType } from '../utils/encoder'\nimport {\n MissingContractDefError,\n MissingContractAddressError,\n InactiveContractError,\n BytecodeMismatchError,\n DuplicateContractError,\n MissingFunctionNameError,\n InvalidMethodInvocationError,\n NotPayableFunctionError,\n TypeError,\n NodeInvocationError,\n IllegalArgumentError,\n NoSuchContractFunctionError,\n MissingEventDefinitionError,\n AmbiguousEventDefinitionError,\n UnexpectedTsError\n} from '../utils/errors'\nimport { hash } from '../utils/crypto'\nimport { Aci as BaseAci } from '../apis/compiler'\nimport Compiler from './Compiler'\nimport Node from '../Node'\nimport {\n getAccount, getContract, getContractByteCode, getKeyBlock, resolveName, txDryRun\n} from '../chain'\nimport AccountBase from '../account/Base'\n\ninterface FunctionACI {\n arguments: any[]\n name: string\n payable: boolean\n returns: string\n stateful: boolean\n}\n\ninterface Aci extends BaseAci {\n encodedAci: {\n contract: {\n name: string\n event: any\n kind: string\n state: any\n type_defs: any[]\n functions: FunctionACI[]\n }\n }\n externalEncodedAci: any[]\n}\n\ninterface Event {\n address: EncodedData<'ct'>\n data: string\n topics: Array<string | number>\n}\n\ninterface DecodedEvent {\n name: string\n args: unknown\n contract: {\n name: string\n address: EncodedData<'ct'>\n }\n}\n\ntype TxData = Awaited<ReturnType<typeof send>>\n\nexport interface ContractInstance {\n _aci: Aci\n _name: string\n calldata: any\n source?: string\n bytecode?: EncodedData<'cb'>\n deployInfo: {\n address?: EncodedData<'ct'>\n result?: {\n callerId: string\n callerNonce: string\n contractId: string\n gasPrice: bigint\n gasUsed: number\n height: number\n log: any[]\n returnType: string\n returnValue: string\n }\n owner?: EncodedData<'ak'>\n transaction?: string\n rawTx?: string\n txData?: TxData\n }\n options: any\n compile: (options?: {}) => Promise<EncodedData<'cb'>>\n _estimateGas: (name: string, params: any[], options: object) => Promise<number>\n deploy: (params?: any[], options?: object) => Promise<any>\n call: (fn: string, params?: any[], options?: {}) => Promise<{\n hash: string\n tx: any\n txData: TxData\n rawTx: string\n result: {\n callerId: EncodedData<'ak'>\n callerNonce: number\n contractId: EncodedData<'ct'>\n gasPrice: number\n gasUsed: number\n height: number\n log: any[]\n returnType: string\n returnValue: string\n }\n decodedResult: any\n decodedEvents: DecodedEvent[]\n }>\n decodeEvents: (\n events: Event[], options?: { omitUnknown?: boolean, contractAddressToName?: any }\n ) => DecodedEvent[]\n methods: any\n}\n\ntype ContractCallReturnType = 'ok' | 'error' | 'revert'\n\n/**\n * Generate contract ACI object with predefined js methods for contract usage - can be used for\n * creating a reference to already deployed contracts\n * @param options - Options object\n * @returns JS Contract API\n * @example\n * ```js\n * const contractIns = await aeSdk.getContractInstance({ source })\n * await contractIns.deploy([321]) or await contractIns.methods.init(321)\n * const callResult = await contractIns.call('setState', [123]) or\n * await contractIns.methods.setState.send(123, options)\n * const staticCallResult = await contractIns.call('setState', [123], { callStatic: true }) or\n * await contractIns.methods.setState.get(123, options)\n * ```\n * Also you can call contract like: `await contractIns.methods.setState(123, options)`\n * Then sdk decide to make on-chain or static call(dry-run API) transaction based on function is\n * stateful or not\n */\nexport default async function getContractInstance ({\n onAccount,\n onCompiler,\n onNode,\n source,\n bytecode,\n aci: _aci,\n contractAddress,\n fileSystem = {},\n validateBytecode,\n ...otherOptions\n}: {\n onAccount: AccountBase\n onCompiler: Compiler\n onNode: Node\n source?: string\n bytecode?: EncodedData<'cb'>\n aci?: Aci\n contractAddress?: EncodedData<'ct'> | AensName\n fileSystem?: Record<string, string>\n validateBytecode?: boolean\n [key: string]: any\n}): Promise<ContractInstance> {\n if (_aci == null && source != null) {\n // TODO: should be fixed when the compiledAci interface gets updated\n _aci = await onCompiler.generateACI({ code: source, options: { fileSystem } }) as Aci\n }\n if (_aci == null) throw new MissingContractDefError()\n\n if (contractAddress != null) {\n contractAddress = await resolveName(\n contractAddress, 'contract_pubkey', { resolveByNode: true, onNode }\n ) as EncodedData<'ct'>\n }\n\n if (contractAddress == null && source == null && bytecode == null) {\n throw new MissingContractAddressError('Can\\'t create instance by ACI without address')\n }\n\n if (contractAddress != null) {\n const contract = await getContract(contractAddress, { onNode })\n if (contract.active == null) throw new InactiveContractError(contractAddress)\n }\n\n const instance: ContractInstance = {\n _aci,\n _name: _aci.encodedAci.contract.name,\n calldata: new Calldata([_aci.encodedAci, ..._aci.externalEncodedAci]),\n source,\n bytecode,\n deployInfo: { address: contractAddress },\n options: {\n onAccount,\n onCompiler,\n onNode,\n amount: AMOUNT,\n callStatic: false,\n fileSystem,\n ...otherOptions\n },\n compile: async function (_options?: {}): Promise<any> {},\n _estimateGas: async function (\n _name: string, _params: any[], _options: object\n ): Promise<any> {},\n deploy: async function (_params?: any[], _options?: any): Promise<any> {},\n call: async function (_fn: string, _params?: any[], _options?: {}): Promise<any> {},\n decodeEvents (_events: Event[], options?: { omitUnknown?: boolean }): any {},\n methods: undefined\n }\n\n if (validateBytecode != null) {\n if (contractAddress == null) throw new MissingContractAddressError('Can\\'t validate bytecode without contract address')\n const onChanBytecode = (await getContractByteCode(contractAddress, { onNode })).bytecode\n const isValid: boolean = source != null\n ? await onCompiler.validateByteCode(\n { bytecode: onChanBytecode, source, options: instance.options }\n ).then(() => true, () => false)\n : bytecode === onChanBytecode\n if (!isValid) throw new BytecodeMismatchError(source != null ? 'source' : 'bytecode')\n }\n\n /**\n * Compile contract\n * @returns bytecode\n */\n instance.compile = async (options = {}): Promise<EncodedData<'cb'>> => {\n if (instance.bytecode != null) throw new IllegalArgumentError('Contract already compiled')\n if (instance.source == null) throw new IllegalArgumentError('Can\\'t compile without source code')\n instance.bytecode = (await onCompiler.compileContract({\n code: instance.source, options: { ...instance.options, ...options }\n })).bytecode as EncodedData<'cb'>\n return instance.bytecode\n }\n\n const sendAndProcess = async (tx: EncodedData<'tx'>, options: any): Promise<{\n result?: ContractInstance['deployInfo']['result']\n hash: TxData['hash']\n tx: Awaited<ReturnType<typeof unpackTx<TX_TYPE.contractCall | TX_TYPE.contractCreate>>>\n txData: TxData\n rawTx: EncodedData<'tx'>\n }> => {\n options = { ...instance.options, ...options }\n const txData = await send(tx, options)\n const result = {\n hash: txData.hash,\n tx: unpackTx<TX_TYPE.contractCall | TX_TYPE.contractCreate>(txData.rawTx),\n txData,\n rawTx: txData.rawTx\n }\n if (txData.blockHeight == null) return result\n const { callInfo } = await onNode.getTransactionInfoByHash(txData.hash)\n Object.assign(result.txData, callInfo) // TODO: don't duplicate data in result\n // @ts-expect-error TODO api should be updated to match types\n handleCallError(callInfo, tx)\n return { ...result, result: callInfo }\n }\n const handleCallError = (\n { returnType, returnValue }: {\n returnType: ContractCallReturnType\n returnValue: EncodedData<EncodingType>\n },\n transaction: string): void => {\n let message: string\n switch (returnType) {\n case 'ok': return\n case 'revert':\n message = instance.calldata.decodeFateString(returnValue)\n break\n case 'error':\n message = decode(returnValue).toString()\n break\n }\n throw new NodeInvocationError(message, transaction)\n }\n\n instance._estimateGas = async (\n name: string, params: any[], options: object): Promise<number> => {\n const { result: { gasUsed } } =\n await instance.call(name, params, { ...options, callStatic: true })\n // taken from https://github.com/aeternity/aepp-sdk-js/issues/1286#issuecomment-977814771\n return Math.floor(gasUsed * 1.25)\n }\n\n /**\n * Deploy contract\n * @param params - Contract init function arguments array\n * @param options - Options\n * @returns deploy info\n */\n instance.deploy = async (params = [],\n options:\n Parameters<typeof instance.compile>[0] &\n Parameters<typeof instance.call>[2] &\n Parameters<AccountBase['address']>[0] &\n Parameters<typeof sendAndProcess>[1]\n ): Promise<ContractInstance['deployInfo']> => {\n const opt = { ...instance.options, ...options }\n if (instance.bytecode == null) await instance.compile(opt)\n // @ts-expect-error\n if (opt.callStatic === true) return await instance.call('init', params, opt)\n if (instance.deployInfo.address != null) throw new DuplicateContractError()\n\n const ownerId = await opt.onAccount.address(options)\n const tx = await _buildTx(TX_TYPE.contractCreate, {\n ...opt,\n gasLimit: opt.gasLimit ?? await instance._estimateGas('init', params, opt),\n callData: instance.calldata.encode(instance._name, 'init', params),\n code: instance.bytecode,\n ownerId,\n onNode\n })\n const contractId = buildContractIdByContractTx(tx)\n const { hash, rawTx, result, txData } = await sendAndProcess(tx, opt)\n instance.deployInfo = Object.freeze({\n result,\n owner: ownerId,\n transaction: hash,\n rawTx,\n txData,\n address: contractId\n })\n return instance.deployInfo\n }\n\n /**\n * Get function schema from contract ACI object\n * @param name - Function name\n * @returns function ACI\n */\n function getFunctionACI (name: string): Partial<FunctionACI> {\n const fn = instance._aci.encodedAci.contract.functions.find(\n (f: { name: string }) => f.name === name)\n if (fn != null) {\n return fn\n }\n if (name === 'init') return { payable: false }\n throw new NoSuchContractFunctionError(`Function ${name} doesn't exist in contract`)\n }\n\n /**\n * Call contract function\n * @param fn - Function name\n * @param params - Array of function arguments\n * @param options - Array of function arguments\n * @returns CallResult\n */\n instance.call = async (fn: string, params: any[] = [], options: object = {}) => {\n const opt = { ...instance.options, ...options }\n const fnACI = getFunctionACI(fn)\n const contractId = instance.deployInfo.address\n\n if (fn == null) throw new MissingFunctionNameError()\n if (fn === 'init' && opt.callStatic === false) throw new InvalidMethodInvocationError('\"init\" can be called only via dryRun')\n if (contractId == null && fn !== 'init') throw new InvalidMethodInvocationError('You need to deploy contract before calling!')\n if (fn !== 'init' && opt.amount > 0 && fnACI.payable === false) throw new NotPayableFunctionError(opt.amount, fn)\n\n const callerId = await Promise.resolve()\n .then(() => opt.onAccount.address(opt))\n .catch((error: any) => {\n if (opt.callStatic === true) return DRY_RUN_ACCOUNT.pub\n else throw error\n }) as EncodedData<'ak'>\n const callData = instance.calldata.encode(instance._name, fn, params)\n\n let res: any\n if (opt.callStatic === true) {\n if (typeof opt.top === 'number') {\n opt.top = (await getKeyBlock(opt.top, { onNode })).hash\n }\n const txOpt = {\n ...opt,\n onNode,\n gasLimit: opt.gasLimit ?? GAS_MAX,\n callData\n }\n if (opt.nonce == null && opt.top != null) {\n opt.nonce = (await getAccount(callerId, { hash: opt.top, onNode })).nonce + 1\n }\n const tx = await (fn === 'init'\n ? _buildTx(TX_TYPE.contractCreate, { ...txOpt, code: instance.bytecode, ownerId: callerId })\n : _buildTx(TX_TYPE.contractCall, { ...txOpt, callerId, contractId }))\n\n const { callObj, ...dryRunOther } = await txDryRun(tx, callerId, { onNode, ...opt })\n if (callObj == null) throw new UnexpectedTsError()\n handleCallError({\n returnType: callObj.returnType as ContractCallReturnType,\n returnValue: callObj.returnValue as EncodedData<EncodingType>\n }, tx)\n res = { ...dryRunOther, tx: unpackTx(tx), result: callObj }\n } else {\n const tx = await _buildTx(TX_TYPE.contractCall, {\n ...opt,\n onNode,\n gasLimit: opt.gasLimit ?? await instance._estimateGas(fn, params, opt),\n callerId,\n contractId,\n callData\n })\n res = await sendAndProcess(tx, opt)\n }\n if (opt.callStatic === true || res.txData.blockHeight != null) {\n res.decodedResult = fnACI.returns != null && fnACI.returns !== 'unit' && fn !== 'init' &&\n instance.calldata.decode(instance._name, fn, res.result.returnValue)\n res.decodedEvents = instance.decodeEvents(res.result.log, opt)\n }\n return res\n }\n\n /**\n * @param address - Contract address that emitted event\n * @param nameHash - Hash of emitted event name\n * @param options - Options\n * @returns Contract name\n * @throws {@link MissingEventDefinitionError}\n * @throws {@link AmbiguousEventDefinitionError}\n */\n function getContractNameByEvent (\n address: EncodedData<'ct'>,\n nameHash: BigInt,\n { contractAddressToName }: { contractAddressToName?: { [key: EncodedData<'ct'>]: string } }\n ): string {\n const addressToName = { ...instance.options.contractAddressToName, ...contractAddressToName }\n if (addressToName[address] != null) return addressToName[address]\n\n const matchedEvents = [\n instance._aci.encodedAci,\n ...instance._aci.externalEncodedAci\n ]\n .filter(({ contract }) => contract?.event)\n .map(({ contract }) => [contract.name, contract.event.variant])\n .map(([name, events]) => events.map((event: {}) => [name, Object.keys(event)[0]]))\n .flat()\n .filter(([, eventName]) => BigInt('0x' + hash(eventName).toString('hex')) === nameHash)\n switch (matchedEvents.length) {\n case 0: throw new MissingEventDefinitionError(nameHash.toString(), address)\n case 1: return matchedEvents[0][0]\n default: throw new AmbiguousEventDefinitionError(address, matchedEvents)\n }\n }\n\n /**\n * Decode Events\n * @param events - Array of encoded events (callRes.result.log)\n * @param options - Options\n * @returns DecodedEvents\n */\n instance.decodeEvents = (\n events: Event[],\n { omitUnknown, ...opt }: { omitUnknown?: boolean } = {}\n ): DecodedEvent[] => events\n .map(event => {\n const topics = event.topics.map((t: string | number) => BigInt(t))\n let contractName\n try {\n contractName = getContractNameByEvent(event.address, topics[0], opt)\n } catch (error) {\n if ((omitUnknown ?? false) && error instanceof MissingEventDefinitionError) return null\n throw error\n }\n const decoded = instance.calldata.decodeEvent(contractName, event.data, topics)\n const [name, args] = Object.entries(decoded)[0]\n return {\n name,\n args,\n contract: {\n name: contractName,\n address: event.address\n }\n }\n }).filter((e: DecodedEvent | null): e is DecodedEvent => e != null)\n\n /**\n * Generate proto function based on contract function using Contract ACI schema\n * All function can be called like:\n * ```js\n * await contract.methods.testFunction()\n * ```\n * then sdk will decide to use dry-run or send tx\n * on-chain base on if function stateful or not.\n * Also, you can manually do that:\n * ```js\n * await contract.methods.testFunction.get() // use call-static (dry-run)\n * await contract.methods.testFunction.send() // send tx on-chain\n * ```\n */\n instance.methods = Object.fromEntries(instance._aci.encodedAci.contract.functions\n .map(({ name, arguments: aciArgs, stateful }: FunctionACI) => {\n const genHandler = (callStatic: boolean) => async (...args: any[]) => {\n const options = args.length === aciArgs.length + 1 ? args.pop() : {}\n if (typeof options !== 'object') throw new TypeError(`Options should be an object: ${options as string}`)\n if (name === 'init') return await instance.deploy(args, { callStatic, ...options })\n return await instance.call(name, args, { callStatic, ...options })\n }\n return [\n name,\n Object.assign(\n genHandler(name === 'init' ? false : !stateful),\n {\n get: genHandler(true),\n send: genHandler(false)\n }\n )\n ]\n })\n )\n\n return instance\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"aci.mjs","names":["DRY_RUN_ACCOUNT","AMOUNT","Tag","buildContractIdByContractTx","unpackTx","_buildTx","send","decode","MissingContractDefError","MissingContractAddressError","InactiveContractError","BytecodeMismatchError","DuplicateContractError","MissingFunctionNameError","InvalidMethodInvocationError","NotPayableFunctionError","TypeError","NodeInvocationError","IllegalArgumentError","NoSuchContractFunctionError","MissingEventDefinitionError","AmbiguousEventDefinitionError","UnexpectedTsError","InternalError","hash","calcHash","getAccount","getContract","getContractByteCode","getKeyBlock","resolveName","txDryRun","getContractInstance","onAccount","onCompiler","onNode","source","bytecode","aci","_aci","contractAddress","fileSystem","validateBytecode","otherOptions","generateACI","code","options","resolveByNode","contract","active","instance","_name","encodedAci","name","calldata","Calldata","externalEncodedAci","deployInfo","address","amount","callStatic","compile","_options","_estimateGas","_params","deploy","call","_fn","decodeEvents","_events","methods","undefined","onChanBytecode","isValid","validateByteCode","then","compileContract","handleCallError","transaction","returnType","returnValue","message","decodeFateString","toString","sendAndProcess","tx","txData","result","rawTx","blockHeight","callInfo","getTransactionInfoByHash","Object","assign","params","gasUsed","Math","floor","opt","ownerId","ContractCreateTx","gasLimit","callData","encode","contractId","freeze","owner","getFunctionACI","fn","functions","find","f","payable","fnACI","callerId","Promise","resolve","catch","error","pub","res","top","txOpt","nonce","ContractCallTx","callObj","dryRunOther","decodedResult","returns","decodedEvents","log","getContractNameByEvent","nameHash","contractAddressToName","addressToName","matchedEvents","filter","event","map","variant","events","keys","flat","eventName","BigInt","length","omitUnknown","topics","t","contractName","decoded","decodeEvent","data","args","entries","e","fromEntries","arguments","aciArgs","stateful","genHandler","pop","get"],"sources":["../../src/contract/aci.ts"],"sourcesContent":["/*\n* ISC License (ISC)\n* Copyright (c) 2022 aeternity developers\n*\n* Permission to use, copy, modify, and/or distribute this software for any\n* purpose with or without fee is hereby granted, provided that the above\n* copyright notice and this permission notice appear in all copies.\n*\n* THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n* AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n* PERFORMANCE OF THIS SOFTWARE.\n*/\n// @ts-expect-error TODO remove\nimport { Encoder as Calldata } from '@aeternity/aepp-calldata';\nimport { DRY_RUN_ACCOUNT, AMOUNT } from '../tx/builder/schema';\nimport { Tag, AensName } from '../tx/builder/constants';\nimport { buildContractIdByContractTx, unpackTx } from '../tx/builder';\nimport { _buildTx } from '../tx';\nimport { send } from '../spend';\nimport { decode, Encoded } from '../utils/encoder';\nimport {\n MissingContractDefError,\n MissingContractAddressError,\n InactiveContractError,\n BytecodeMismatchError,\n DuplicateContractError,\n MissingFunctionNameError,\n InvalidMethodInvocationError,\n NotPayableFunctionError,\n TypeError,\n NodeInvocationError,\n IllegalArgumentError,\n NoSuchContractFunctionError,\n MissingEventDefinitionError,\n AmbiguousEventDefinitionError,\n UnexpectedTsError,\n InternalError,\n} from '../utils/errors';\nimport { hash as calcHash } from '../utils/crypto';\nimport { Aci as BaseAci } from '../apis/compiler';\nimport { ContractCallReturnType } from '../apis/node';\nimport Compiler from './Compiler';\nimport Node from '../Node';\nimport {\n getAccount, getContract, getContractByteCode, getKeyBlock, resolveName, txDryRun,\n} from '../chain';\nimport AccountBase from '../account/Base';\n\ninterface FunctionACI {\n arguments: any[];\n name: string;\n payable: boolean;\n returns: string;\n stateful: boolean;\n}\n\ninterface Aci extends BaseAci {\n encodedAci: {\n contract: {\n name: string;\n event: any;\n kind: string;\n state: any;\n type_defs: any[];\n functions: FunctionACI[];\n };\n };\n externalEncodedAci: any[];\n}\n\ninterface Event {\n address: Encoded.ContractAddress;\n data: string;\n topics: Array<string | number>;\n}\n\ninterface DecodedEvent {\n name: string;\n args: unknown;\n contract: {\n name: string;\n address: Encoded.ContractAddress;\n };\n}\n\ntype TxData = Awaited<ReturnType<typeof send>>;\n\nexport interface ContractInstance {\n _aci: Aci;\n _name: string;\n calldata: any;\n source?: string;\n bytecode?: Encoded.ContractBytearray;\n deployInfo: {\n address?: Encoded.ContractAddress;\n result?: {\n callerId: string;\n callerNonce: string;\n contractId: string;\n gasPrice: bigint;\n gasUsed: number;\n height: number;\n log: any[];\n returnType: ContractCallReturnType;\n returnValue: string;\n };\n owner?: Encoded.AccountAddress;\n transaction?: string;\n rawTx?: string;\n txData?: TxData;\n };\n options: any;\n compile: (options?: {}) => Promise<Encoded.ContractBytearray>;\n _estimateGas: (name: string, params: any[], options: object) => Promise<number>;\n deploy: (params?: any[], options?: object) => Promise<any>;\n call: (fn: string, params?: any[], options?: {}) => Promise<{\n hash: string;\n tx: any;\n txData: TxData;\n rawTx: string;\n result: {\n callerId: Encoded.AccountAddress;\n callerNonce: number;\n contractId: Encoded.ContractAddress;\n gasPrice: number;\n gasUsed: number;\n height: number;\n log: any[];\n returnType: ContractCallReturnType;\n returnValue: string;\n };\n decodedResult: any;\n decodedEvents: DecodedEvent[];\n }>;\n decodeEvents: (\n events: Event[], options?: { omitUnknown?: boolean; contractAddressToName?: any }\n ) => DecodedEvent[];\n methods: any;\n}\n\n/**\n * Generate contract ACI object with predefined js methods for contract usage - can be used for\n * creating a reference to already deployed contracts\n * @category contract\n * @param options - Options object\n * @returns JS Contract API\n * @example\n * ```js\n * const contractIns = await aeSdk.getContractInstance({ source })\n * await contractIns.deploy([321]) or await contractIns.methods.init(321)\n * const callResult = await contractIns.call('setState', [123]) or\n * await contractIns.methods.setState.send(123, options)\n * const staticCallResult = await contractIns.call('setState', [123], { callStatic: true }) or\n * await contractIns.methods.setState.get(123, options)\n * ```\n * Also you can call contract like: `await contractIns.methods.setState(123, options)`\n * Then sdk decide to make on-chain or static call(dry-run API) transaction based on function is\n * stateful or not\n */\nexport default async function getContractInstance({\n onAccount,\n onCompiler,\n onNode,\n source,\n bytecode,\n aci: _aci,\n contractAddress,\n fileSystem = {},\n validateBytecode,\n ...otherOptions\n}: {\n onAccount?: AccountBase;\n onCompiler: Compiler;\n onNode: Node;\n source?: string;\n bytecode?: Encoded.ContractBytearray;\n aci?: Aci;\n contractAddress?: Encoded.ContractAddress | AensName;\n fileSystem?: Record<string, string>;\n validateBytecode?: boolean;\n [key: string]: any;\n}): Promise<ContractInstance> {\n if (_aci == null && source != null) {\n // TODO: should be fixed when the compiledAci interface gets updated\n _aci = await onCompiler.generateACI({ code: source, options: { fileSystem } }) as Aci;\n }\n if (_aci == null) throw new MissingContractDefError();\n\n if (contractAddress != null) {\n contractAddress = await resolveName(\n contractAddress,\n 'contract_pubkey',\n { resolveByNode: true, onNode },\n ) as Encoded.ContractAddress;\n }\n\n if (contractAddress == null && source == null && bytecode == null) {\n throw new MissingContractAddressError('Can\\'t create instance by ACI without address');\n }\n\n if (contractAddress != null) {\n const contract = await getContract(contractAddress, { onNode });\n if (contract.active == null) throw new InactiveContractError(contractAddress);\n }\n\n const instance: ContractInstance = {\n _aci,\n _name: _aci.encodedAci.contract.name,\n calldata: new Calldata([_aci.encodedAci, ..._aci.externalEncodedAci]),\n source,\n bytecode,\n deployInfo: { address: contractAddress },\n options: {\n onAccount,\n onCompiler,\n onNode,\n amount: AMOUNT,\n callStatic: false,\n fileSystem,\n ...otherOptions,\n },\n /* eslint-disable @typescript-eslint/no-unused-vars */\n /* eslint-disable @typescript-eslint/no-empty-function */\n async compile(_options?: {}): Promise<any> {},\n async _estimateGas(_name: string, _params: any[], _options: object): Promise<any> {},\n async deploy(_params?: any[], _options?: any): Promise<any> {},\n async call(_fn: string, _params?: any[], _options?: {}): Promise<any> {},\n decodeEvents(_events: Event[], options?: { omitUnknown?: boolean }): any {},\n /* eslint-enable @typescript-eslint/no-unused-vars */\n /* eslint-enable @typescript-eslint/no-empty-function */\n methods: undefined,\n };\n\n if (validateBytecode != null) {\n if (contractAddress == null) throw new MissingContractAddressError('Can\\'t validate bytecode without contract address');\n const onChanBytecode = (await getContractByteCode(contractAddress, { onNode })).bytecode;\n const isValid: boolean = source != null\n ? await onCompiler.validateByteCode(\n { bytecode: onChanBytecode, source, options: instance.options },\n ).then(() => true, () => false)\n : bytecode === onChanBytecode;\n if (!isValid) throw new BytecodeMismatchError(source != null ? 'source' : 'bytecode');\n }\n\n /**\n * Compile contract\n * @returns bytecode\n */\n instance.compile = async (options = {}): Promise<Encoded.ContractBytearray> => {\n if (instance.bytecode != null) throw new IllegalArgumentError('Contract already compiled');\n if (instance.source == null) throw new IllegalArgumentError('Can\\'t compile without source code');\n instance.bytecode = (await onCompiler.compileContract({\n code: instance.source, options: { ...instance.options, ...options },\n })).bytecode as Encoded.ContractBytearray;\n return instance.bytecode;\n };\n\n const handleCallError = (\n { returnType, returnValue }: {\n returnType: ContractCallReturnType;\n returnValue: Encoded.ContractBytearray;\n },\n transaction: string,\n ): void => {\n let message: string;\n switch (returnType) {\n case 'ok': return;\n case 'revert':\n message = instance.calldata.decodeFateString(returnValue);\n break;\n case 'error':\n message = decode(returnValue).toString();\n break;\n default:\n throw new InternalError(`Unknown return type: ${returnType}`);\n }\n throw new NodeInvocationError(message, transaction);\n };\n\n const sendAndProcess = async (tx: Encoded.Transaction, options: any): Promise<{\n result?: ContractInstance['deployInfo']['result'];\n hash: TxData['hash'];\n tx: Awaited<ReturnType<typeof unpackTx<Tag.ContractCallTx | Tag.ContractCreateTx>>>;\n txData: TxData;\n rawTx: Encoded.Transaction;\n }> => {\n options = { ...instance.options, ...options };\n const txData = await send(tx, options);\n const result = {\n hash: txData.hash,\n tx: unpackTx<Tag.ContractCallTx | Tag.ContractCreateTx>(txData.rawTx),\n txData,\n rawTx: txData.rawTx,\n };\n if (txData.blockHeight == null) return result;\n const { callInfo } = await onNode.getTransactionInfoByHash(txData.hash);\n Object.assign(result.txData, callInfo); // TODO: don't duplicate data in result\n // @ts-expect-error TODO api should be updated to match types\n handleCallError(callInfo, tx);\n return { ...result, result: callInfo };\n };\n\n instance._estimateGas = async (name: string, params: any[], options: object): Promise<number> => {\n const { result: { gasUsed } } = await instance\n .call(name, params, { ...options, callStatic: true });\n // taken from https://github.com/aeternity/aepp-sdk-js/issues/1286#issuecomment-977814771\n return Math.floor(gasUsed * 1.25);\n };\n\n /**\n * Deploy contract\n * @param params - Contract init function arguments array\n * @param options - Options\n * @returns deploy info\n */\n instance.deploy = async (\n params = [],\n options?:\n Parameters<typeof instance.compile>[0] &\n Parameters<typeof instance.call>[2] &\n Parameters<AccountBase['address']>[0] &\n Parameters<typeof sendAndProcess>[1],\n ): Promise<ContractInstance['deployInfo']> => {\n const opt = { ...instance.options, ...options };\n if (instance.bytecode == null) await instance.compile(opt);\n // @ts-expect-error TODO: need to fix compatibility between return types of `deploy` and `call`\n if (opt.callStatic === true) return instance.call('init', params, opt);\n if (instance.deployInfo.address != null) throw new DuplicateContractError();\n\n const ownerId = await opt.onAccount.address(options);\n const tx = await _buildTx(Tag.ContractCreateTx, {\n ...opt,\n gasLimit: opt.gasLimit ?? await instance._estimateGas('init', params, opt),\n callData: instance.calldata.encode(instance._name, 'init', params),\n code: instance.bytecode,\n ownerId,\n onNode,\n });\n const contractId = buildContractIdByContractTx(tx);\n const {\n hash, rawTx, result, txData,\n } = await sendAndProcess(tx, opt);\n instance.deployInfo = Object.freeze({\n result,\n owner: ownerId,\n transaction: hash,\n rawTx,\n txData,\n address: contractId,\n });\n return instance.deployInfo;\n };\n\n /**\n * Get function schema from contract ACI object\n * @param name - Function name\n * @returns function ACI\n */\n function getFunctionACI(name: string): Partial<FunctionACI> {\n const fn = instance._aci.encodedAci.contract.functions.find(\n (f: { name: string }) => f.name === name,\n );\n if (fn != null) {\n return fn;\n }\n if (name === 'init') return { payable: false };\n throw new NoSuchContractFunctionError(`Function ${name} doesn't exist in contract`);\n }\n\n /**\n * Call contract function\n * @param fn - Function name\n * @param params - Array of function arguments\n * @param options - Array of function arguments\n * @returns CallResult\n */\n instance.call = async (fn: string, params: any[] = [], options: object = {}) => {\n const opt = { ...instance.options, ...options };\n const fnACI = getFunctionACI(fn);\n const contractId = instance.deployInfo.address;\n\n if (fn == null) throw new MissingFunctionNameError();\n if (fn === 'init' && opt.callStatic === false) throw new InvalidMethodInvocationError('\"init\" can be called only via dryRun');\n if (contractId == null && fn !== 'init') throw new InvalidMethodInvocationError('You need to deploy contract before calling!');\n if (fn !== 'init' && opt.amount > 0 && fnACI.payable === false) throw new NotPayableFunctionError(opt.amount, fn);\n\n const callerId = await Promise.resolve()\n .then(() => opt.onAccount.address(opt))\n .catch((error: any) => {\n if (opt.callStatic === true) return DRY_RUN_ACCOUNT.pub;\n throw error;\n }) as Encoded.AccountAddress;\n const callData = instance.calldata.encode(instance._name, fn, params);\n\n let res: any;\n if (opt.callStatic === true) {\n if (typeof opt.top === 'number') {\n opt.top = (await getKeyBlock(opt.top, { onNode })).hash;\n }\n const txOpt = { ...opt, onNode, callData };\n if (opt.nonce == null && opt.top != null) {\n opt.nonce = (await getAccount(callerId, { hash: opt.top, onNode })).nonce + 1;\n }\n const tx = await (fn === 'init'\n ? _buildTx(Tag.ContractCreateTx, { ...txOpt, code: instance.bytecode, ownerId: callerId })\n : _buildTx(Tag.ContractCallTx, { ...txOpt, callerId, contractId }));\n\n const { callObj, ...dryRunOther } = await txDryRun(tx, callerId, { onNode, ...opt });\n if (callObj == null) throw new UnexpectedTsError();\n handleCallError({\n returnType: callObj.returnType as ContractCallReturnType,\n returnValue: callObj.returnValue as Encoded.ContractBytearray,\n }, tx);\n res = { ...dryRunOther, tx: unpackTx(tx), result: callObj };\n } else {\n const tx = await _buildTx(Tag.ContractCallTx, {\n ...opt,\n onNode,\n gasLimit: opt.gasLimit ?? await instance._estimateGas(fn, params, opt),\n callerId,\n contractId,\n callData,\n });\n res = await sendAndProcess(tx, opt);\n }\n if (opt.callStatic === true || res.txData.blockHeight != null) {\n res.decodedResult = fnACI.returns != null && fnACI.returns !== 'unit' && fn !== 'init'\n && instance.calldata.decode(instance._name, fn, res.result.returnValue);\n res.decodedEvents = instance.decodeEvents(res.result.log, opt);\n }\n return res;\n };\n\n /**\n * @param address - Contract address that emitted event\n * @param nameHash - Hash of emitted event name\n * @param options - Options\n * @returns Contract name\n * @throws {@link MissingEventDefinitionError}\n * @throws {@link AmbiguousEventDefinitionError}\n */\n function getContractNameByEvent(\n address: Encoded.ContractAddress,\n nameHash: BigInt,\n { contractAddressToName }: {\n contractAddressToName?: { [key: Encoded.ContractAddress]: string };\n },\n ): string {\n const addressToName = { ...instance.options.contractAddressToName, ...contractAddressToName };\n if (addressToName[address] != null) return addressToName[address];\n\n const matchedEvents = [\n instance._aci.encodedAci,\n ...instance._aci.externalEncodedAci,\n ]\n .filter(({ contract }) => contract?.event)\n .map(({ contract }) => [contract.name, contract.event.variant])\n .map(([name, events]) => events.map((event: {}) => [name, Object.keys(event)[0]]))\n .flat()\n .filter(([, eventName]) => BigInt(`0x${calcHash(eventName).toString('hex')}`) === nameHash);\n switch (matchedEvents.length) {\n case 0: throw new MissingEventDefinitionError(nameHash.toString(), address);\n case 1: return matchedEvents[0][0];\n default: throw new AmbiguousEventDefinitionError(address, matchedEvents);\n }\n }\n\n /**\n * Decode Events\n * @param events - Array of encoded events (callRes.result.log)\n * @param options - Options\n * @returns DecodedEvents\n */\n instance.decodeEvents = (\n events: Event[],\n { omitUnknown, ...opt }: { omitUnknown?: boolean } = {},\n ): DecodedEvent[] => events\n .map((event) => {\n const topics = event.topics.map((t: string | number) => BigInt(t));\n let contractName;\n try {\n contractName = getContractNameByEvent(event.address, topics[0], opt);\n } catch (error) {\n if ((omitUnknown ?? false) && error instanceof MissingEventDefinitionError) return null;\n throw error;\n }\n const decoded = instance.calldata.decodeEvent(contractName, event.data, topics);\n const [name, args] = Object.entries(decoded)[0];\n return {\n name,\n args,\n contract: {\n name: contractName,\n address: event.address,\n },\n };\n }).filter((e: DecodedEvent | null): e is DecodedEvent => e != null);\n\n /**\n * Generate proto function based on contract function using Contract ACI schema\n * All function can be called like:\n * ```js\n * await contract.methods.testFunction()\n * ```\n * then sdk will decide to use dry-run or send tx\n * on-chain base on if function stateful or not.\n * Also, you can manually do that:\n * ```js\n * await contract.methods.testFunction.get() // use call-static (dry-run)\n * await contract.methods.testFunction.send() // send tx on-chain\n * ```\n */\n instance.methods = Object.fromEntries(instance._aci.encodedAci.contract.functions\n .map(({ name, arguments: aciArgs, stateful }: FunctionACI) => {\n const genHandler = (callStatic: boolean) => async (...args: any[]) => {\n const options = args.length === aciArgs.length + 1 ? args.pop() : {};\n if (typeof options !== 'object') throw new TypeError(`Options should be an object: ${options as string}`);\n if (name === 'init') return instance.deploy(args, { callStatic, ...options });\n return instance.call(name, args, { callStatic, ...options });\n };\n return [\n name,\n Object.assign(\n genHandler(name === 'init' ? false : !stateful),\n {\n get: genHandler(true),\n send: genHandler(false),\n },\n ),\n ];\n }));\n\n return instance;\n}\n"],"mappings":"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"}
@@ -1,9 +1,6 @@
1
- /**
2
- * Generalized Account module - routines to use generalized account
3
- */
4
- import { TX_TYPE } from '../tx/builder/schema';
1
+ import { Tag } from '../tx/builder/constants';
5
2
  import { BuildTxOptions } from '../tx';
6
- import { EncodedData } from '../utils/encoder';
3
+ import { Encoded } from '../utils/encoder';
7
4
  import AccountBase from '../account/Base';
8
5
  import { SendOptions } from '../spend';
9
6
  import Node from '../Node';
@@ -11,13 +8,15 @@ import { getAccount } from '../chain';
11
8
  import Compiler from './Compiler';
12
9
  /**
13
10
  * Check if account is GA
11
+ * @category contract
14
12
  * @param address - Account address
15
13
  * @param options - Options
16
14
  * @returns if account is GA
17
15
  */
18
- export declare function isGA(address: EncodedData<'ak'>, options: Parameters<typeof getAccount>[1]): Promise<boolean>;
16
+ export declare function isGA(address: Encoded.AccountAddress, options: Parameters<typeof getAccount>[1]): Promise<boolean>;
19
17
  /**
20
18
  * Convert current account to GA
19
+ * @category contract
21
20
  * @param authFnName - Authorization function name
22
21
  * @param source - Auth contract source code
23
22
  * @param args - init arguments
@@ -25,12 +24,12 @@ export declare function isGA(address: EncodedData<'ak'>, options: Parameters<typ
25
24
  * @returns General Account Object
26
25
  */
27
26
  export declare function createGeneralizedAccount(authFnName: string, source: string, args: any[], { onAccount, onCompiler, onNode, ...options }: CreateGeneralizedAccountOptions): Promise<Readonly<{
28
- owner: EncodedData<'ak'>;
29
- transaction: EncodedData<'th'>;
30
- rawTx: EncodedData<'tx'>;
31
- gaContractId: EncodedData<'ct'>;
27
+ owner: Encoded.AccountAddress;
28
+ transaction: Encoded.TxHash;
29
+ rawTx: Encoded.Transaction;
30
+ gaContractId: Encoded.ContractAddress;
32
31
  }>>;
33
- interface CreateGeneralizedAccountOptions extends BuildTxOptions<TX_TYPE.gaAttach, 'authFun' | 'callData' | 'code' | 'ownerId' | 'gasLimit'>, SendOptions {
32
+ interface CreateGeneralizedAccountOptions extends BuildTxOptions<Tag.GaAttachTx, 'authFun' | 'callData' | 'code' | 'ownerId' | 'gasLimit'>, SendOptions {
34
33
  onAccount: AccountBase;
35
34
  onCompiler: Compiler;
36
35
  onNode: Node;
@@ -38,6 +37,7 @@ interface CreateGeneralizedAccountOptions extends BuildTxOptions<TX_TYPE.gaAttac
38
37
  }
39
38
  /**
40
39
  * Create a metaTx transaction
40
+ * @category contract
41
41
  * @param rawTransaction - Inner transaction
42
42
  * @param authData - Object with gaMeta params
43
43
  * @param authFnName - Authorization function name
@@ -45,24 +45,25 @@ interface CreateGeneralizedAccountOptions extends BuildTxOptions<TX_TYPE.gaAttac
45
45
  * @param options.onAccount - Account to use
46
46
  * @returns Transaction string
47
47
  */
48
- export declare function createMetaTx(rawTransaction: EncodedData<'tx'>, authData: {
48
+ export declare function createMetaTx(rawTransaction: Encoded.Transaction, authData: {
49
49
  gasLimit?: number;
50
- callData?: EncodedData<'cb'>;
50
+ callData?: Encoded.ContractBytearray;
51
51
  source?: string;
52
52
  args?: any[];
53
53
  }, authFnName: string, { onAccount, onCompiler, onNode, ...options }: {
54
54
  onAccount: AccountBase;
55
55
  onCompiler: Compiler;
56
56
  onNode: Node;
57
- } & Parameters<AccountBase['address']>[0]): Promise<EncodedData<'tx'>>;
57
+ } & Parameters<AccountBase['address']>[0]): Promise<Encoded.Transaction>;
58
58
  /**
59
59
  * Build a transaction hash the same as `Auth.tx_hash`
60
+ * @category contract
60
61
  * @param transaction - tx-encoded transaction
61
62
  * @param options - Options
62
63
  * @param options.onNode - Node to use
63
64
  * @returns Transaction hash
64
65
  */
65
- export declare function buildAuthTxHash(transaction: EncodedData<'tx'>, { onNode }: {
66
+ export declare function buildAuthTxHash(transaction: Encoded.Transaction, { onNode }: {
66
67
  onNode: Node;
67
68
  }): Promise<Uint8Array>;
68
69
  export {};
@@ -23,7 +23,8 @@ const {
23
23
  /**
24
24
  * Generalized Account module - routines to use generalized account
25
25
  */
26
- import { TX_TYPE, MAX_AUTH_FUN_GAS } from "../tx/builder/schema.mjs";
26
+ import { MAX_AUTH_FUN_GAS } from "../tx/builder/schema.mjs";
27
+ import { Tag } from "../tx/builder/constants.mjs";
27
28
  import { buildContractIdByContractTx, buildTx, unpackTx } from "../tx/builder/index.mjs";
28
29
  import { _buildTx, getVmVersion, prepareTxParams } from "../tx/index.mjs";
29
30
  import { hash } from "../utils/crypto.mjs";
@@ -36,6 +37,7 @@ import { getAccount } from "../chain.mjs";
36
37
 
37
38
  /**
38
39
  * Check if account is GA
40
+ * @category contract
39
41
  * @param address - Account address
40
42
  * @param options - Options
41
43
  * @returns if account is GA
@@ -48,6 +50,7 @@ export async function isGA(address, options) {
48
50
  }
49
51
  /**
50
52
  * Convert current account to GA
53
+ * @category contract
51
54
  * @param authFnName - Authorization function name
52
55
  * @param source - Auth contract source code
53
56
  * @param args - init arguments
@@ -74,7 +77,7 @@ export async function createGeneralizedAccount(authFnName, source, args, _ref) {
74
77
  onNode,
75
78
  source
76
79
  });
77
- const tx = await _buildTx(TX_TYPE.gaAttach, { ...options,
80
+ const tx = await _buildTx(Tag.GaAttachTx, { ...options,
78
81
  onNode,
79
82
  code: await contract.compile(),
80
83
  gasLimit: (_options$gasLimit = options.gasLimit) !== null && _options$gasLimit !== void 0 ? _options$gasLimit : await contract._estimateGas('init', args, options),
@@ -102,6 +105,7 @@ export async function createGeneralizedAccount(authFnName, source, args, _ref) {
102
105
 
103
106
  /**
104
107
  * Create a metaTx transaction
108
+ * @category contract
105
109
  * @param rawTransaction - Inner transaction
106
110
  * @param authData - Object with gaMeta params
107
111
  * @param authFnName - Authorization function name
@@ -122,7 +126,7 @@ export async function createMetaTx(rawTransaction, authData, authFnName, _ref2)
122
126
  const wrapInEmptySignedTx = tx => buildTx({
123
127
  encodedTx: tx,
124
128
  signatures: []
125
- }, TX_TYPE.signed);
129
+ }, Tag.SignedTx);
126
130
 
127
131
  if (Object.keys(authData).length <= 0) throw new MissingParamError('authData is required');
128
132
  const gasLimit = (_authData$gasLimit = authData.gasLimit) !== null && _authData$gasLimit !== void 0 ? _authData$gasLimit : MAX_AUTH_FUN_GAS;
@@ -134,7 +138,6 @@ export async function createMetaTx(rawTransaction, authData, authFnName, _ref2)
134
138
  const authCallData = (_authData$callData = authData.callData) !== null && _authData$callData !== void 0 ? _authData$callData : await (async () => {
135
139
  if (authData.source == null || authData.args == null) throw new InvalidAuthDataError('Auth data must contain source code and arguments.');
136
140
  const contract = await getContractInstance({
137
- onAccount,
138
141
  onCompiler,
139
142
  onNode,
140
143
  source: authData.source
@@ -143,7 +146,7 @@ export async function createMetaTx(rawTransaction, authData, authFnName, _ref2)
143
146
  })();
144
147
  const {
145
148
  abiVersion
146
- } = await getVmVersion(TX_TYPE.contractCall, {
149
+ } = await getVmVersion(Tag.ContractCallTx, {
147
150
  onNode
148
151
  });
149
152
  const wrappedTx = wrapInEmptySignedTx(unpackTx(rawTransaction));
@@ -151,6 +154,7 @@ export async function createMetaTx(rawTransaction, authData, authFnName, _ref2)
151
154
  tx: { ...wrappedTx,
152
155
  tx: wrappedTx.txObject
153
156
  },
157
+ // TODO: accept an address instead
154
158
  gaId: await onAccount.address(options),
155
159
  abiVersion,
156
160
  authData: authCallData,
@@ -160,18 +164,19 @@ export async function createMetaTx(rawTransaction, authData, authFnName, _ref2)
160
164
 
161
165
  const {
162
166
  fee
163
- } = await prepareTxParams(TX_TYPE.gaMeta, { ...params,
167
+ } = await prepareTxParams(Tag.GaMetaTx, { ...params,
164
168
  onNode
165
169
  });
166
170
  const {
167
171
  rlpEncoded: metaTxRlp
168
172
  } = buildTx({ ...params,
169
173
  fee
170
- }, TX_TYPE.gaMeta);
174
+ }, Tag.GaMetaTx);
171
175
  return wrapInEmptySignedTx(metaTxRlp).tx;
172
176
  }
173
177
  /**
174
178
  * Build a transaction hash the same as `Auth.tx_hash`
179
+ * @category contract
175
180
  * @param transaction - tx-encoded transaction
176
181
  * @param options - Options
177
182
  * @param options.onNode - Node to use
@@ -1 +1 @@
1
- {"version":3,"file":"ga.mjs","names":["TX_TYPE","MAX_AUTH_FUN_GAS","buildContractIdByContractTx","buildTx","unpackTx","_buildTx","getVmVersion","prepareTxParams","hash","decode","IllegalArgumentError","MissingParamError","InvalidAuthDataError","concatBuffers","getContractInstance","send","getAccount","isGA","address","options","contractId","createGeneralizedAccount","authFnName","source","args","onAccount","onCompiler","onNode","ownerId","contract","tx","gaAttach","code","compile","gasLimit","_estimateGas","callData","calldata","encode","_name","authFun","transaction","rawTx","Object","freeze","owner","gaContractId","createMetaTx","rawTransaction","authData","wrapInEmptySignedTx","encodedTx","signatures","signed","keys","length","authCallData","abiVersion","contractCall","wrappedTx","params","txObject","gaId","vsn","fee","gaMeta","rlpEncoded","metaTxRlp","buildAuthTxHash","networkId","getStatus","Uint8Array","from"],"sources":["../../src/contract/ga.ts"],"sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2022 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\n/**\n * Generalized Account module - routines to use generalized account\n */\n\nimport { TX_TYPE, MAX_AUTH_FUN_GAS, TxSchema } from '../tx/builder/schema'\nimport { buildContractIdByContractTx, buildTx, BuiltTx, TxUnpacked, unpackTx } from '../tx/builder'\nimport { _buildTx, BuildTxOptions, getVmVersion, prepareTxParams } from '../tx'\nimport { hash } from '../utils/crypto'\nimport { decode, EncodedData } from '../utils/encoder'\nimport { IllegalArgumentError, MissingParamError, InvalidAuthDataError } from '../utils/errors'\nimport { concatBuffers } from '../utils/other'\nimport AccountBase from '../account/Base'\nimport { getContractInstance } from './methods'\nimport { send, SendOptions } from '../spend'\nimport Node from '../Node'\nimport { getAccount } from '../chain'\nimport Compiler from './Compiler'\n\n/**\n * Check if account is GA\n * @param address - Account address\n * @param options - Options\n * @returns if account is GA\n */\nexport async function isGA (\n address: EncodedData<'ak'>, options: Parameters<typeof getAccount>[1]\n): Promise<boolean> {\n const { contractId } = await getAccount(address, options)\n return contractId != null\n}\n\n/**\n * Convert current account to GA\n * @param authFnName - Authorization function name\n * @param source - Auth contract source code\n * @param args - init arguments\n * @param options - Options\n * @returns General Account Object\n */\nexport async function createGeneralizedAccount (\n authFnName: string,\n source: string,\n args: any[],\n { onAccount, onCompiler, onNode, ...options }: CreateGeneralizedAccountOptions\n): Promise<Readonly<{\n owner: EncodedData<'ak'>\n transaction: EncodedData<'th'>\n rawTx: EncodedData<'tx'>\n gaContractId: EncodedData<'ct'>\n }>> {\n const ownerId = await onAccount.address(options)\n if (await isGA(ownerId, { onNode })) throw new IllegalArgumentError(`Account ${ownerId} is already GA`)\n\n const contract = await getContractInstance({ onAccount, onCompiler, onNode, source })\n\n const tx = await _buildTx(TX_TYPE.gaAttach, {\n ...options,\n onNode,\n code: await contract.compile(),\n gasLimit: options.gasLimit ?? await contract._estimateGas('init', args, options),\n ownerId,\n callData: contract.calldata.encode(contract._name, 'init', args),\n authFun: hash(authFnName)\n })\n const contractId = buildContractIdByContractTx(tx)\n const { hash: transaction, rawTx } = await send(tx, { onNode, onAccount, onCompiler, ...options })\n\n return Object.freeze({\n owner: ownerId,\n transaction,\n rawTx,\n gaContractId: contractId\n })\n}\n\ninterface CreateGeneralizedAccountOptions extends\n BuildTxOptions<TX_TYPE.gaAttach, 'authFun' | 'callData' | 'code' | 'ownerId' | 'gasLimit'>,\n SendOptions {\n onAccount: AccountBase\n onCompiler: Compiler\n onNode: Node\n gasLimit?: number\n}\n\n/**\n * Create a metaTx transaction\n * @param rawTransaction - Inner transaction\n * @param authData - Object with gaMeta params\n * @param authFnName - Authorization function name\n * @param options - Options\n * @param options.onAccount - Account to use\n * @returns Transaction string\n */\nexport async function createMetaTx (\n rawTransaction: EncodedData<'tx'>,\n authData: {\n gasLimit?: number\n callData?: EncodedData<'cb'>\n source?: string\n args?: any[]\n },\n authFnName: string,\n { onAccount, onCompiler, onNode, ...options }:\n { onAccount: AccountBase, onCompiler: Compiler, onNode: Node }\n & Parameters<AccountBase['address']>[0]\n): Promise<EncodedData<'tx'>> {\n const wrapInEmptySignedTx = (\n tx: EncodedData<'tx'> | Uint8Array | TxUnpacked<TxSchema>\n ): BuiltTx<TxSchema, 'tx'> => buildTx({ encodedTx: tx, signatures: [] }, TX_TYPE.signed)\n\n if (Object.keys(authData).length <= 0) throw new MissingParamError('authData is required')\n\n const gasLimit = authData.gasLimit ?? MAX_AUTH_FUN_GAS\n if (gasLimit > MAX_AUTH_FUN_GAS) {\n throw new InvalidAuthDataError(`the maximum gasLimit value for ga authFun is ${MAX_AUTH_FUN_GAS}, got ${gasLimit}`)\n }\n\n const authCallData = authData.callData ?? await (async () => {\n if (authData.source == null || authData.args == null) throw new InvalidAuthDataError('Auth data must contain source code and arguments.')\n const contract = await getContractInstance({\n onAccount, onCompiler, onNode, source: authData.source\n })\n return contract.calldata.encode(contract._name, authFnName, authData.args)\n })()\n\n const { abiVersion } = await getVmVersion(TX_TYPE.contractCall, { onNode })\n const wrappedTx = wrapInEmptySignedTx(unpackTx<TX_TYPE.signed>(rawTransaction))\n const params = {\n ...options,\n tx: {\n ...wrappedTx,\n tx: wrappedTx.txObject\n },\n gaId: await onAccount.address(options),\n abiVersion,\n authData: authCallData,\n gasLimit,\n vsn: 2\n }\n // @ts-expect-error createMetaTx needs to be integrated into tx builder\n const { fee } = await prepareTxParams(TX_TYPE.gaMeta, { ...params, onNode })\n const { rlpEncoded: metaTxRlp } = buildTx({ ...params, fee }, TX_TYPE.gaMeta)\n return wrapInEmptySignedTx(metaTxRlp).tx\n}\n\n/**\n * Build a transaction hash the same as `Auth.tx_hash`\n * @param transaction - tx-encoded transaction\n * @param options - Options\n * @param options.onNode - Node to use\n * @returns Transaction hash\n */\nexport async function buildAuthTxHash (\n transaction: EncodedData<'tx'>,\n { onNode }: { onNode: Node }\n): Promise<Uint8Array> {\n const { networkId } = await onNode.getStatus()\n return new Uint8Array(hash(\n concatBuffers([Buffer.from(networkId), decode(transaction)])\n ))\n}\n"],"mappings":";;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;SAESA,O,EAASC,gB;SACTC,2B,EAA6BC,O,EAA8BC,Q;SAC3DC,Q,EAA0BC,Y,EAAcC,e;SACxCC,I;SACAC,M;SACAC,oB,EAAsBC,iB,EAAmBC,oB;SACzCC,a;SAEAC,mB;SACAC,I;SAEAC,U;;AAGT;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeC,IAAf,CACLC,OADK,EACuBC,OADvB,EAEa;EAClB,MAAM;IAAEC;EAAF,IAAiB,MAAMJ,UAAU,CAACE,OAAD,EAAUC,OAAV,CAAvC;EACA,OAAOC,UAAU,IAAI,IAArB;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,eAAeC,wBAAf,CACLC,UADK,EAELC,MAFK,EAGLC,IAHK,QAUD;EAAA;;EAAA,IANJ;IAAEC,SAAF;IAAaC,UAAb;IAAyBC,MAAzB;IAAiC,GAAGR;EAApC,CAMI;EACJ,MAAMS,OAAO,GAAG,MAAMH,SAAS,CAACP,OAAV,CAAkBC,OAAlB,CAAtB;EACA,IAAI,MAAMF,IAAI,CAACW,OAAD,EAAU;IAAED;EAAF,CAAV,CAAd,EAAqC,MAAM,IAAIjB,oBAAJ,CAA0B,WAAUkB,OAAQ,gBAA5C,CAAN;EAErC,MAAMC,QAAQ,GAAG,MAAMf,mBAAmB,CAAC;IAAEW,SAAF;IAAaC,UAAb;IAAyBC,MAAzB;IAAiCJ;EAAjC,CAAD,CAA1C;EAEA,MAAMO,EAAE,GAAG,MAAMzB,QAAQ,CAACL,OAAO,CAAC+B,QAAT,EAAmB,EAC1C,GAAGZ,OADuC;IAE1CQ,MAF0C;IAG1CK,IAAI,EAAE,MAAMH,QAAQ,CAACI,OAAT,EAH8B;IAI1CC,QAAQ,uBAAEf,OAAO,CAACe,QAAV,iEAAsB,MAAML,QAAQ,CAACM,YAAT,CAAsB,MAAtB,EAA8BX,IAA9B,EAAoCL,OAApC,CAJM;IAK1CS,OAL0C;IAM1CQ,QAAQ,EAAEP,QAAQ,CAACQ,QAAT,CAAkBC,MAAlB,CAAyBT,QAAQ,CAACU,KAAlC,EAAyC,MAAzC,EAAiDf,IAAjD,CANgC;IAO1CgB,OAAO,EAAEhC,IAAI,CAACc,UAAD;EAP6B,CAAnB,CAAzB;EASA,MAAMF,UAAU,GAAGlB,2BAA2B,CAAC4B,EAAD,CAA9C;EACA,MAAM;IAAEtB,IAAI,EAAEiC,WAAR;IAAqBC;EAArB,IAA+B,MAAM3B,IAAI,CAACe,EAAD,EAAK;IAAEH,MAAF;IAAUF,SAAV;IAAqBC,UAArB;IAAiC,GAAGP;EAApC,CAAL,CAA/C;EAEA,OAAOwB,MAAM,CAACC,MAAP,CAAc;IACnBC,KAAK,EAAEjB,OADY;IAEnBa,WAFmB;IAGnBC,KAHmB;IAInBI,YAAY,EAAE1B;EAJK,CAAd,CAAP;AAMD;;AAWD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAe2B,YAAf,CACLC,cADK,EAELC,QAFK,EAQL3B,UARK,SAYuB;EAAA;;EAAA,IAH5B;IAAEG,SAAF;IAAaC,UAAb;IAAyBC,MAAzB;IAAiC,GAAGR;EAApC,CAG4B;;EAC5B,MAAM+B,mBAAmB,GACvBpB,EAD0B,IAEE3B,OAAO,CAAC;IAAEgD,SAAS,EAAErB,EAAb;IAAiBsB,UAAU,EAAE;EAA7B,CAAD,EAAoCpD,OAAO,CAACqD,MAA5C,CAFrC;;EAIA,IAAIV,MAAM,CAACW,IAAP,CAAYL,QAAZ,EAAsBM,MAAtB,IAAgC,CAApC,EAAuC,MAAM,IAAI5C,iBAAJ,CAAsB,sBAAtB,CAAN;EAEvC,MAAMuB,QAAQ,yBAAGe,QAAQ,CAACf,QAAZ,mEAAwBjC,gBAAtC;;EACA,IAAIiC,QAAQ,GAAGjC,gBAAf,EAAiC;IAC/B,MAAM,IAAIW,oBAAJ,CAA0B,gDAA+CX,gBAAiB,SAAQiC,QAAS,EAA3G,CAAN;EACD;;EAED,MAAMsB,YAAY,yBAAGP,QAAQ,CAACb,QAAZ,mEAAwB,MAAM,CAAC,YAAY;IAC3D,IAAIa,QAAQ,CAAC1B,MAAT,IAAmB,IAAnB,IAA2B0B,QAAQ,CAACzB,IAAT,IAAiB,IAAhD,EAAsD,MAAM,IAAIZ,oBAAJ,CAAyB,mDAAzB,CAAN;IACtD,MAAMiB,QAAQ,GAAG,MAAMf,mBAAmB,CAAC;MACzCW,SADyC;MAC9BC,UAD8B;MAClBC,MADkB;MACVJ,MAAM,EAAE0B,QAAQ,CAAC1B;IADP,CAAD,CAA1C;IAGA,OAAOM,QAAQ,CAACQ,QAAT,CAAkBC,MAAlB,CAAyBT,QAAQ,CAACU,KAAlC,EAAyCjB,UAAzC,EAAqD2B,QAAQ,CAACzB,IAA9D,CAAP;EACD,CAN+C,GAAhD;EAQA,MAAM;IAAEiC;EAAF,IAAiB,MAAMnD,YAAY,CAACN,OAAO,CAAC0D,YAAT,EAAuB;IAAE/B;EAAF,CAAvB,CAAzC;EACA,MAAMgC,SAAS,GAAGT,mBAAmB,CAAC9C,QAAQ,CAAiB4C,cAAjB,CAAT,CAArC;EACA,MAAMY,MAAM,GAAG,EACb,GAAGzC,OADU;IAEbW,EAAE,EAAE,EACF,GAAG6B,SADD;MAEF7B,EAAE,EAAE6B,SAAS,CAACE;IAFZ,CAFS;IAMbC,IAAI,EAAE,MAAMrC,SAAS,CAACP,OAAV,CAAkBC,OAAlB,CANC;IAObsC,UAPa;IAQbR,QAAQ,EAAEO,YARG;IASbtB,QATa;IAUb6B,GAAG,EAAE;EAVQ,CAAf,CAtB4B,CAkC5B;;EACA,MAAM;IAAEC;EAAF,IAAU,MAAMzD,eAAe,CAACP,OAAO,CAACiE,MAAT,EAAiB,EAAE,GAAGL,MAAL;IAAajC;EAAb,CAAjB,CAArC;EACA,MAAM;IAAEuC,UAAU,EAAEC;EAAd,IAA4BhE,OAAO,CAAC,EAAE,GAAGyD,MAAL;IAAaI;EAAb,CAAD,EAAqBhE,OAAO,CAACiE,MAA7B,CAAzC;EACA,OAAOf,mBAAmB,CAACiB,SAAD,CAAnB,CAA+BrC,EAAtC;AACD;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,eAAesC,eAAf,CACL3B,WADK,SAGgB;EAAA,IADrB;IAAEd;EAAF,CACqB;EACrB,MAAM;IAAE0C;EAAF,IAAgB,MAAM1C,MAAM,CAAC2C,SAAP,EAA5B;EACA,OAAO,IAAIC,UAAJ,CAAe/D,IAAI,CACxBK,aAAa,CAAC,CAAC,QAAO2D,IAAP,CAAYH,SAAZ,CAAD,EAAyB5D,MAAM,CAACgC,WAAD,CAA/B,CAAD,CADW,CAAnB,CAAP;AAGD"}
1
+ {"version":3,"file":"ga.mjs","names":["MAX_AUTH_FUN_GAS","Tag","buildContractIdByContractTx","buildTx","unpackTx","_buildTx","getVmVersion","prepareTxParams","hash","decode","IllegalArgumentError","MissingParamError","InvalidAuthDataError","concatBuffers","getContractInstance","send","getAccount","isGA","address","options","contractId","createGeneralizedAccount","authFnName","source","args","onAccount","onCompiler","onNode","ownerId","contract","tx","GaAttachTx","code","compile","gasLimit","_estimateGas","callData","calldata","encode","_name","authFun","transaction","rawTx","Object","freeze","owner","gaContractId","createMetaTx","rawTransaction","authData","wrapInEmptySignedTx","encodedTx","signatures","SignedTx","keys","length","authCallData","abiVersion","ContractCallTx","wrappedTx","params","txObject","gaId","vsn","fee","GaMetaTx","rlpEncoded","metaTxRlp","buildAuthTxHash","networkId","getStatus","Uint8Array","from"],"sources":["../../src/contract/ga.ts"],"sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2022 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\n/**\n * Generalized Account module - routines to use generalized account\n */\n\nimport { MAX_AUTH_FUN_GAS, TxSchema } from '../tx/builder/schema';\nimport { Tag } from '../tx/builder/constants';\nimport {\n buildContractIdByContractTx, buildTx, BuiltTx, TxUnpacked, unpackTx,\n} from '../tx/builder';\nimport {\n _buildTx, BuildTxOptions, getVmVersion, prepareTxParams,\n} from '../tx';\nimport { hash } from '../utils/crypto';\nimport { decode, Encoded, Encoding } from '../utils/encoder';\nimport { IllegalArgumentError, MissingParamError, InvalidAuthDataError } from '../utils/errors';\nimport { concatBuffers } from '../utils/other';\nimport AccountBase from '../account/Base';\nimport { getContractInstance } from './methods';\nimport { send, SendOptions } from '../spend';\nimport Node from '../Node';\nimport { getAccount } from '../chain';\nimport Compiler from './Compiler';\n\n/**\n * Check if account is GA\n * @category contract\n * @param address - Account address\n * @param options - Options\n * @returns if account is GA\n */\nexport async function isGA(\n address: Encoded.AccountAddress,\n options: Parameters<typeof getAccount>[1],\n): Promise<boolean> {\n const { contractId } = await getAccount(address, options);\n return contractId != null;\n}\n\n/**\n * Convert current account to GA\n * @category contract\n * @param authFnName - Authorization function name\n * @param source - Auth contract source code\n * @param args - init arguments\n * @param options - Options\n * @returns General Account Object\n */\nexport async function createGeneralizedAccount(\n authFnName: string,\n source: string,\n args: any[],\n {\n onAccount, onCompiler, onNode, ...options\n }: CreateGeneralizedAccountOptions,\n): Promise<Readonly<{\n owner: Encoded.AccountAddress;\n transaction: Encoded.TxHash;\n rawTx: Encoded.Transaction;\n gaContractId: Encoded.ContractAddress;\n }>> {\n const ownerId = await onAccount.address(options);\n if (await isGA(ownerId, { onNode })) throw new IllegalArgumentError(`Account ${ownerId} is already GA`);\n\n const contract = await getContractInstance({\n onAccount, onCompiler, onNode, source,\n });\n\n const tx = await _buildTx(Tag.GaAttachTx, {\n ...options,\n onNode,\n code: await contract.compile(),\n gasLimit: options.gasLimit ?? await contract._estimateGas('init', args, options),\n ownerId,\n callData: contract.calldata.encode(contract._name, 'init', args),\n authFun: hash(authFnName),\n });\n const contractId = buildContractIdByContractTx(tx);\n const { hash: transaction, rawTx } = await send(tx, {\n onNode, onAccount, onCompiler, ...options,\n });\n\n return Object.freeze({\n owner: ownerId,\n transaction,\n rawTx,\n gaContractId: contractId,\n });\n}\n\ninterface CreateGeneralizedAccountOptions extends\n BuildTxOptions<Tag.GaAttachTx, 'authFun' | 'callData' | 'code' | 'ownerId' | 'gasLimit'>,\n SendOptions {\n onAccount: AccountBase;\n onCompiler: Compiler;\n onNode: Node;\n gasLimit?: number;\n}\n\n/**\n * Create a metaTx transaction\n * @category contract\n * @param rawTransaction - Inner transaction\n * @param authData - Object with gaMeta params\n * @param authFnName - Authorization function name\n * @param options - Options\n * @param options.onAccount - Account to use\n * @returns Transaction string\n */\nexport async function createMetaTx(\n rawTransaction: Encoded.Transaction,\n authData: {\n gasLimit?: number;\n callData?: Encoded.ContractBytearray;\n source?: string;\n args?: any[];\n },\n authFnName: string,\n {\n onAccount, onCompiler, onNode, ...options\n }:\n { onAccount: AccountBase; onCompiler: Compiler; onNode: Node }\n & Parameters<AccountBase['address']>[0],\n): Promise<Encoded.Transaction> {\n const wrapInEmptySignedTx = (\n tx: Encoded.Transaction | Uint8Array | TxUnpacked<TxSchema>,\n ): BuiltTx<TxSchema, Encoding.Transaction> => (\n buildTx({ encodedTx: tx, signatures: [] }, Tag.SignedTx)\n );\n\n if (Object.keys(authData).length <= 0) throw new MissingParamError('authData is required');\n\n const gasLimit = authData.gasLimit ?? MAX_AUTH_FUN_GAS;\n if (gasLimit > MAX_AUTH_FUN_GAS) {\n throw new InvalidAuthDataError(`the maximum gasLimit value for ga authFun is ${MAX_AUTH_FUN_GAS}, got ${gasLimit}`);\n }\n\n const authCallData = authData.callData ?? await (async () => {\n if (authData.source == null || authData.args == null) throw new InvalidAuthDataError('Auth data must contain source code and arguments.');\n const contract = await getContractInstance({\n onCompiler, onNode, source: authData.source,\n });\n return contract.calldata.encode(contract._name, authFnName, authData.args);\n })();\n\n const { abiVersion } = await getVmVersion(Tag.ContractCallTx, { onNode });\n const wrappedTx = wrapInEmptySignedTx(unpackTx<Tag.SignedTx>(rawTransaction));\n const params = {\n ...options,\n tx: {\n ...wrappedTx,\n tx: wrappedTx.txObject,\n },\n // TODO: accept an address instead\n gaId: await onAccount.address(options),\n abiVersion,\n authData: authCallData,\n gasLimit,\n vsn: 2,\n };\n // @ts-expect-error createMetaTx needs to be integrated into tx builder\n const { fee } = await prepareTxParams(Tag.GaMetaTx, { ...params, onNode });\n const { rlpEncoded: metaTxRlp } = buildTx({ ...params, fee }, Tag.GaMetaTx);\n return wrapInEmptySignedTx(metaTxRlp).tx;\n}\n\n/**\n * Build a transaction hash the same as `Auth.tx_hash`\n * @category contract\n * @param transaction - tx-encoded transaction\n * @param options - Options\n * @param options.onNode - Node to use\n * @returns Transaction hash\n */\nexport async function buildAuthTxHash(\n transaction: Encoded.Transaction,\n { onNode }: { onNode: Node },\n): Promise<Uint8Array> {\n const { networkId } = await onNode.getStatus();\n return new Uint8Array(hash(\n concatBuffers([Buffer.from(networkId), decode(transaction)]),\n ));\n}\n"],"mappings":"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"}