@aztec/aztec.js 0.76.4 → 0.77.0-testnet-ignition.21
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.
- package/dest/account/contract.d.ts +9 -5
- package/dest/account/contract.d.ts.map +1 -1
- package/dest/account/contract.js +15 -2
- package/dest/account/index.d.ts +2 -2
- package/dest/account/index.d.ts.map +1 -1
- package/dest/account/index.js +8 -1
- package/dest/account/interface.d.ts +5 -4
- package/dest/account/interface.d.ts.map +1 -1
- package/dest/account/interface.js +4 -3
- package/dest/account/wallet.d.ts +4 -3
- package/dest/account/wallet.d.ts.map +1 -1
- package/dest/account/wallet.js +3 -2
- package/dest/account_manager/deploy_account_method.d.ts +5 -5
- package/dest/account_manager/deploy_account_method.d.ts.map +1 -1
- package/dest/account_manager/deploy_account_method.js +22 -25
- package/dest/account_manager/deploy_account_sent_tx.d.ts +4 -3
- package/dest/account_manager/deploy_account_sent_tx.d.ts.map +1 -1
- package/dest/account_manager/deploy_account_sent_tx.js +16 -17
- package/dest/account_manager/index.d.ts +20 -11
- package/dest/account_manager/index.d.ts.map +1 -1
- package/dest/account_manager/index.js +89 -87
- package/dest/api/abi.d.ts +2 -3
- package/dest/api/abi.d.ts.map +1 -1
- package/dest/api/abi.js +1 -3
- package/dest/api/account.d.ts +1 -2
- package/dest/api/account.d.ts.map +1 -1
- package/dest/api/account.js +1 -2
- package/dest/api/addresses.d.ts +2 -2
- package/dest/api/addresses.d.ts.map +1 -1
- package/dest/api/addresses.js +2 -3
- package/dest/api/cheat_codes.d.ts +4 -4
- package/dest/api/cheat_codes.d.ts.map +1 -1
- package/dest/api/cheat_codes.js +10 -15
- package/dest/api/deployment.js +0 -1
- package/dest/api/entrypoint.js +0 -1
- package/dest/api/eth_address.js +0 -1
- package/dest/api/ethereum/anvil_test_watcher.d.ts +10 -6
- package/dest/api/ethereum/anvil_test_watcher.d.ts.map +1 -1
- package/dest/api/ethereum/anvil_test_watcher.js +43 -18
- package/dest/api/ethereum/chain_monitor.d.ts +6 -2
- package/dest/api/ethereum/chain_monitor.d.ts.map +1 -1
- package/dest/api/ethereum/chain_monitor.js +24 -8
- package/dest/api/ethereum/cheat_codes.d.ts +14 -3
- package/dest/api/ethereum/cheat_codes.d.ts.map +1 -1
- package/dest/api/ethereum/cheat_codes.js +106 -53
- package/dest/api/ethereum/index.d.ts +1 -1
- package/dest/api/ethereum/index.d.ts.map +1 -1
- package/dest/api/ethereum/index.js +1 -2
- package/dest/api/ethereum/l1_contracts.d.ts +1 -1
- package/dest/api/ethereum/l1_contracts.d.ts.map +1 -1
- package/dest/api/ethereum/l1_contracts.js +4 -6
- package/dest/api/ethereum/portal_manager.d.ts +16 -12
- package/dest/api/ethereum/portal_manager.d.ts.map +1 -1
- package/dest/api/ethereum/portal_manager.js +134 -115
- package/dest/api/fee.d.ts +0 -1
- package/dest/api/fee.d.ts.map +1 -1
- package/dest/api/fee.js +0 -2
- package/dest/api/fields.js +0 -1
- package/dest/api/interfaces/pxe.d.ts +1 -1
- package/dest/api/interfaces/pxe.d.ts.map +1 -1
- package/dest/api/interfaces/pxe.js +1 -2
- package/dest/api/log.js +0 -1
- package/dest/api/log_id.d.ts +1 -1
- package/dest/api/log_id.d.ts.map +1 -1
- package/dest/api/log_id.js +1 -2
- package/dest/api/tx_hash.d.ts +1 -1
- package/dest/api/tx_hash.d.ts.map +1 -1
- package/dest/api/tx_hash.js +1 -2
- package/dest/api/wallet.d.ts +1 -1
- package/dest/api/wallet.d.ts.map +1 -1
- package/dest/api/wallet.js +1 -2
- package/dest/contract/base_contract_interaction.d.ts +21 -5
- package/dest/contract/base_contract_interaction.d.ts.map +1 -1
- package/dest/contract/base_contract_interaction.js +97 -55
- package/dest/contract/batch_call.d.ts +3 -2
- package/dest/contract/batch_call.d.ts.map +1 -1
- package/dest/contract/batch_call.js +64 -40
- package/dest/contract/checker.d.ts +1 -1
- package/dest/contract/checker.d.ts.map +1 -1
- package/dest/contract/checker.js +29 -20
- package/dest/contract/contract.d.ts +4 -4
- package/dest/contract/contract.d.ts.map +1 -1
- package/dest/contract/contract.js +30 -28
- package/dest/contract/contract_base.d.ts +5 -5
- package/dest/contract/contract_base.d.ts.map +1 -1
- package/dest/contract/contract_base.js +22 -31
- package/dest/contract/contract_function_interaction.d.ts +9 -8
- package/dest/contract/contract_function_interaction.d.ts.map +1 -1
- package/dest/contract/contract_function_interaction.js +63 -51
- package/dest/contract/deploy_method.d.ts +14 -11
- package/dest/contract/deploy_method.d.ts.map +1 -1
- package/dest/contract/deploy_method.js +115 -87
- package/dest/contract/deploy_proven_tx.d.ts +6 -4
- package/dest/contract/deploy_proven_tx.d.ts.map +1 -1
- package/dest/contract/deploy_proven_tx.js +8 -11
- package/dest/contract/deploy_sent_tx.d.ts +8 -6
- package/dest/contract/deploy_sent_tx.d.ts.map +1 -1
- package/dest/contract/deploy_sent_tx.js +19 -22
- package/dest/contract/get_gas_limits.d.ts +2 -2
- package/dest/contract/get_gas_limits.d.ts.map +1 -1
- package/dest/contract/get_gas_limits.js +2 -4
- package/dest/contract/index.js +2 -4
- package/dest/{deployment → contract}/protocol_contracts.d.ts +4 -2
- package/dest/contract/protocol_contracts.d.ts.map +1 -0
- package/dest/contract/protocol_contracts.js +26 -0
- package/dest/contract/proven_tx.d.ts +3 -2
- package/dest/contract/proven_tx.d.ts.map +1 -1
- package/dest/contract/proven_tx.js +8 -11
- package/dest/contract/sent_tx.d.ts +3 -2
- package/dest/contract/sent_tx.d.ts.map +1 -1
- package/dest/contract/sent_tx.js +33 -35
- package/dest/contract/unsafe_contract.d.ts +3 -3
- package/dest/contract/unsafe_contract.d.ts.map +1 -1
- package/dest/contract/unsafe_contract.js +2 -10
- package/dest/deployment/broadcast_function.d.ts +3 -3
- package/dest/deployment/broadcast_function.d.ts.map +1 -1
- package/dest/deployment/broadcast_function.js +39 -32
- package/dest/deployment/contract_deployer.d.ts +3 -3
- package/dest/deployment/contract_deployer.d.ts.map +1 -1
- package/dest/deployment/contract_deployer.js +16 -15
- package/dest/deployment/deploy_instance.d.ts +3 -3
- package/dest/deployment/deploy_instance.d.ts.map +1 -1
- package/dest/deployment/deploy_instance.js +3 -5
- package/dest/deployment/index.js +0 -1
- package/dest/deployment/register_class.d.ts +3 -3
- package/dest/deployment/register_class.d.ts.map +1 -1
- package/dest/deployment/register_class.js +19 -14
- package/dest/entrypoint/default_entrypoint.d.ts +2 -2
- package/dest/entrypoint/default_entrypoint.d.ts.map +1 -1
- package/dest/entrypoint/default_entrypoint.js +11 -9
- package/dest/entrypoint/default_multi_call_entrypoint.d.ts +2 -2
- package/dest/entrypoint/default_multi_call_entrypoint.d.ts.map +1 -1
- package/dest/entrypoint/default_multi_call_entrypoint.js +68 -25
- package/dest/entrypoint/entrypoint.d.ts +7 -3
- package/dest/entrypoint/entrypoint.d.ts.map +1 -1
- package/dest/entrypoint/entrypoint.js +0 -1
- package/dest/entrypoint/payload.d.ts +8 -5
- package/dest/entrypoint/payload.d.ts.map +1 -1
- package/dest/entrypoint/payload.js +78 -85
- package/dest/fee/fee_juice_payment_method.d.ts +3 -3
- package/dest/fee/fee_juice_payment_method.d.ts.map +1 -1
- package/dest/fee/fee_juice_payment_method.js +5 -4
- package/dest/fee/fee_juice_payment_method_with_claim.d.ts +5 -4
- package/dest/fee/fee_juice_payment_method_with_claim.d.ts.map +1 -1
- package/dest/fee/fee_juice_payment_method_with_claim.js +18 -20
- package/dest/fee/fee_payment_method.d.ts +3 -3
- package/dest/fee/fee_payment_method.d.ts.map +1 -1
- package/dest/fee/fee_payment_method.js +3 -2
- package/dest/fee/private_fee_payment_method.d.ts +5 -5
- package/dest/fee/private_fee_payment_method.d.ts.map +1 -1
- package/dest/fee/private_fee_payment_method.js +40 -38
- package/dest/fee/public_fee_payment_method.d.ts +5 -5
- package/dest/fee/public_fee_payment_method.d.ts.map +1 -1
- package/dest/fee/public_fee_payment_method.js +38 -35
- package/dest/index.d.ts +25 -12
- package/dest/index.d.ts.map +1 -1
- package/dest/index.js +24 -14
- package/dest/rpc_clients/index.js +0 -1
- package/dest/rpc_clients/node/index.d.ts +2 -1
- package/dest/rpc_clients/node/index.d.ts.map +1 -1
- package/dest/rpc_clients/node/index.js +35 -18
- package/dest/rpc_clients/pxe_client.d.ts +2 -2
- package/dest/rpc_clients/pxe_client.d.ts.map +1 -1
- package/dest/rpc_clients/pxe_client.js +9 -7
- package/dest/utils/abi_types.d.ts +4 -1
- package/dest/utils/abi_types.d.ts.map +1 -1
- package/dest/utils/abi_types.js +1 -2
- package/dest/utils/authwit.d.ts +3 -2
- package/dest/utils/authwit.d.ts.map +1 -1
- package/dest/utils/authwit.js +18 -17
- package/dest/utils/aztec_cheatcodes.d.ts +4 -2
- package/dest/utils/aztec_cheatcodes.d.ts.map +1 -1
- package/dest/utils/aztec_cheatcodes.js +32 -41
- package/dest/utils/field_compressed_string.js +3 -5
- package/dest/utils/index.d.ts +1 -1
- package/dest/utils/index.d.ts.map +1 -1
- package/dest/utils/index.js +1 -2
- package/dest/utils/node.d.ts +3 -3
- package/dest/utils/node.d.ts.map +1 -1
- package/dest/utils/node.js +4 -6
- package/dest/utils/pub_key.d.ts +2 -1
- package/dest/utils/pub_key.d.ts.map +1 -1
- package/dest/utils/pub_key.js +2 -4
- package/dest/utils/pxe.d.ts +2 -2
- package/dest/utils/pxe.d.ts.map +1 -1
- package/dest/utils/pxe.js +3 -5
- package/dest/wallet/account_wallet.d.ts +8 -5
- package/dest/wallet/account_wallet.d.ts.map +1 -1
- package/dest/wallet/account_wallet.js +120 -83
- package/dest/wallet/account_wallet_with_private_key.d.ts +5 -5
- package/dest/wallet/account_wallet_with_private_key.d.ts.map +1 -1
- package/dest/wallet/account_wallet_with_private_key.js +10 -16
- package/dest/wallet/base_wallet.d.ts +19 -10
- package/dest/wallet/base_wallet.d.ts.map +1 -1
- package/dest/wallet/base_wallet.js +12 -13
- package/dest/wallet/index.d.ts +3 -3
- package/dest/wallet/index.d.ts.map +1 -1
- package/dest/wallet/index.js +2 -4
- package/dest/wallet/signerless_wallet.d.ts +7 -4
- package/dest/wallet/signerless_wallet.d.ts.map +1 -1
- package/dest/wallet/signerless_wallet.js +4 -6
- package/package.json +10 -14
- package/src/account/contract.ts +22 -5
- package/src/account/index.ts +2 -2
- package/src/account/interface.ts +5 -4
- package/src/account/wallet.ts +4 -3
- package/src/account_manager/deploy_account_method.ts +5 -5
- package/src/account_manager/deploy_account_sent_tx.ts +4 -3
- package/src/account_manager/index.ts +51 -24
- package/src/api/abi.ts +10 -3
- package/src/api/account.ts +8 -3
- package/src/api/addresses.ts +2 -2
- package/src/api/cheat_codes.ts +6 -6
- package/src/api/ethereum/anvil_test_watcher.ts +31 -7
- package/src/api/ethereum/chain_monitor.ts +9 -2
- package/src/api/ethereum/cheat_codes.ts +65 -24
- package/src/api/ethereum/index.ts +5 -1
- package/src/api/ethereum/l1_contracts.ts +1 -1
- package/src/api/ethereum/portal_manager.ts +27 -32
- package/src/api/fee.ts +0 -1
- package/src/api/interfaces/pxe.ts +1 -1
- package/src/api/log_id.ts +1 -1
- package/src/api/tx_hash.ts +1 -1
- package/src/api/wallet.ts +1 -1
- package/src/contract/base_contract_interaction.ts +35 -9
- package/src/contract/batch_call.ts +9 -7
- package/src/contract/checker.ts +1 -1
- package/src/contract/contract.ts +11 -4
- package/src/contract/contract_base.ts +3 -3
- package/src/contract/contract_function_interaction.ts +24 -13
- package/src/contract/deploy_method.ts +27 -18
- package/src/contract/deploy_proven_tx.ts +6 -4
- package/src/contract/deploy_sent_tx.ts +8 -6
- package/src/contract/get_gas_limits.ts +2 -2
- package/src/contract/protocol_contracts.ts +35 -0
- package/src/contract/proven_tx.ts +3 -2
- package/src/contract/sent_tx.ts +3 -2
- package/src/contract/unsafe_contract.ts +3 -3
- package/src/deployment/broadcast_function.ts +47 -40
- package/src/deployment/contract_deployer.ts +4 -3
- package/src/deployment/deploy_instance.ts +5 -5
- package/src/deployment/register_class.ts +25 -18
- package/src/entrypoint/default_entrypoint.ts +5 -5
- package/src/entrypoint/default_multi_call_entrypoint.ts +5 -4
- package/src/entrypoint/entrypoint.ts +7 -3
- package/src/entrypoint/payload.ts +11 -6
- package/src/fee/fee_juice_payment_method.ts +5 -3
- package/src/fee/fee_juice_payment_method_with_claim.ts +11 -10
- package/src/fee/fee_payment_method.ts +3 -3
- package/src/fee/private_fee_payment_method.ts +10 -11
- package/src/fee/public_fee_payment_method.ts +11 -11
- package/src/index.ts +35 -58
- package/src/rpc_clients/node/index.ts +2 -1
- package/src/rpc_clients/pxe_client.ts +2 -2
- package/src/utils/abi_types.ts +4 -7
- package/src/utils/authwit.ts +5 -2
- package/src/utils/aztec_cheatcodes.ts +5 -3
- package/src/utils/field_compressed_string.ts +1 -1
- package/src/utils/index.ts +1 -1
- package/src/utils/node.ts +3 -3
- package/src/utils/pub_key.ts +3 -2
- package/src/utils/pxe.ts +2 -2
- package/src/wallet/account_wallet.ts +8 -5
- package/src/wallet/account_wallet_with_private_key.ts +5 -4
- package/src/wallet/base_wallet.ts +37 -46
- package/src/wallet/index.ts +3 -3
- package/src/wallet/signerless_wallet.ts +7 -4
- package/dest/deployment/protocol_contracts.d.ts.map +0 -1
- package/dest/deployment/protocol_contracts.js +0 -14
- package/dest/fee/no_fee_payment_method.d.ts +0 -13
- package/dest/fee/no_fee_payment_method.d.ts.map +0 -1
- package/dest/fee/no_fee_payment_method.js +0 -17
- package/src/deployment/protocol_contracts.ts +0 -17
- package/src/fee/no_fee_payment_method.ts +0 -23
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
import { GasSettings } from '@aztec/circuits.js';
|
|
2
1
|
import { createLogger } from '@aztec/foundation/log';
|
|
3
|
-
import {
|
|
2
|
+
import { GasSettings } from '@aztec/stdlib/gas';
|
|
3
|
+
import { FeeJuicePaymentMethod } from '../fee/fee_juice_payment_method.js';
|
|
4
4
|
import { getGasLimits } from './get_gas_limits.js';
|
|
5
5
|
import { ProvenTx } from './proven_tx.js';
|
|
6
6
|
import { SentTx } from './sent_tx.js';
|
|
7
7
|
/**
|
|
8
8
|
* Base class for an interaction with a contract, be it a deployment, a function call, or a batch.
|
|
9
9
|
* Implements the sequence create/simulate/send.
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
*/ export class BaseContractInteraction {
|
|
11
|
+
wallet;
|
|
12
|
+
log;
|
|
13
|
+
capsules;
|
|
14
|
+
constructor(wallet){
|
|
13
15
|
this.wallet = wallet;
|
|
14
16
|
this.log = createLogger('aztecjs:contract_interaction');
|
|
17
|
+
this.capsules = [];
|
|
15
18
|
}
|
|
16
19
|
/**
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
async proveInternal(options = {}) {
|
|
20
|
+
* Creates a transaction execution request, simulates and proves it. Differs from .prove in
|
|
21
|
+
* that its result does not include the wallet nor the composed tx object, but only the proving result.
|
|
22
|
+
* This object can then be used to either create a ProvenTx ready to be sent, or directly send the transaction.
|
|
23
|
+
* @param options - optional arguments to be used in the creation of the transaction
|
|
24
|
+
* @returns The proving result.
|
|
25
|
+
*/ async proveInternal(options = {}) {
|
|
24
26
|
const txRequest = await this.create(options);
|
|
25
27
|
const txSimulationResult = await this.wallet.simulateTx(txRequest, !options.skipPublicSimulation, undefined, true);
|
|
26
28
|
return await this.wallet.proveTx(txRequest, txSimulationResult.privateExecutionResult);
|
|
27
29
|
}
|
|
28
30
|
// docs:start:prove
|
|
29
31
|
/**
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
async prove(options = {}) {
|
|
32
|
+
* Proves a transaction execution request and returns a tx object ready to be sent.
|
|
33
|
+
* @param options - optional arguments to be used in the creation of the transaction
|
|
34
|
+
* @returns The resulting transaction
|
|
35
|
+
*/ async prove(options = {}) {
|
|
35
36
|
// docs:end:prove
|
|
36
37
|
const txProvingResult = await this.proveInternal(options);
|
|
37
38
|
return new ProvenTx(this.wallet, txProvingResult.toTx());
|
|
38
39
|
}
|
|
39
40
|
// docs:start:send
|
|
40
41
|
/**
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
send(options = {}) {
|
|
42
|
+
* Sends a transaction to the contract function with the specified options.
|
|
43
|
+
* This function throws an error if called on an unconstrained function.
|
|
44
|
+
* It creates and signs the transaction if necessary, and returns a SentTx instance,
|
|
45
|
+
* which can be used to track the transaction status, receipt, and events.
|
|
46
|
+
* @param options - An optional object containing 'from' property representing
|
|
47
|
+
* the AztecAddress of the sender. If not provided, the default address is used.
|
|
48
|
+
* @returns A SentTx instance for tracking the transaction status and information.
|
|
49
|
+
*/ send(options = {}) {
|
|
50
50
|
// docs:end:send
|
|
51
|
-
const promise = (async ()
|
|
51
|
+
const promise = (async ()=>{
|
|
52
52
|
const txProvingResult = await this.proveInternal(options);
|
|
53
53
|
return this.wallet.sendTx(txProvingResult.toTx());
|
|
54
54
|
})();
|
|
@@ -56,37 +56,49 @@ export class BaseContractInteraction {
|
|
|
56
56
|
}
|
|
57
57
|
// docs:start:estimateGas
|
|
58
58
|
/**
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
async estimateGas(opts) {
|
|
59
|
+
* Estimates gas for a given tx request and returns gas limits for it.
|
|
60
|
+
* @param opts - Options.
|
|
61
|
+
* @param pad - Percentage to pad the suggested gas limits by, if empty, defaults to 10%.
|
|
62
|
+
* @returns Gas limits.
|
|
63
|
+
*/ async estimateGas(opts) {
|
|
65
64
|
// docs:end:estimateGas
|
|
66
|
-
const txRequest = await this.create({
|
|
67
|
-
|
|
65
|
+
const txRequest = await this.create({
|
|
66
|
+
...opts,
|
|
67
|
+
fee: {
|
|
68
|
+
...opts?.fee,
|
|
69
|
+
estimateGas: false
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
const simulationResult = await this.wallet.simulateTx(txRequest, true, undefined /* msgSender */ , undefined /* skipTxValidation */ , true);
|
|
68
73
|
const { totalGas: gasLimits, teardownGas: teardownGasLimits } = getGasLimits(simulationResult, opts?.fee?.estimatedGasPadding);
|
|
69
|
-
return {
|
|
74
|
+
return {
|
|
75
|
+
gasLimits,
|
|
76
|
+
teardownGasLimits
|
|
77
|
+
};
|
|
70
78
|
}
|
|
71
79
|
/**
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
async getDefaultFeeOptions(fee) {
|
|
80
|
+
* Returns default fee options based on the user opts without running a simulation for gas estimation.
|
|
81
|
+
* @param fee - User-provided fee options.
|
|
82
|
+
*/ async getDefaultFeeOptions(fee) {
|
|
76
83
|
const maxFeesPerGas = fee?.gasSettings?.maxFeesPerGas ?? (await this.wallet.getCurrentBaseFees()).mul(1 + (fee?.baseFeePadding ?? 0.5));
|
|
77
|
-
const paymentMethod = fee?.paymentMethod ?? new
|
|
78
|
-
const gasSettings = GasSettings.default({
|
|
84
|
+
const paymentMethod = fee?.paymentMethod ?? new FeeJuicePaymentMethod(this.wallet.getAddress());
|
|
85
|
+
const gasSettings = GasSettings.default({
|
|
86
|
+
...fee?.gasSettings,
|
|
87
|
+
maxFeesPerGas
|
|
88
|
+
});
|
|
79
89
|
this.log.debug(`Using L2 gas settings`, gasSettings);
|
|
80
|
-
return {
|
|
90
|
+
return {
|
|
91
|
+
gasSettings,
|
|
92
|
+
paymentMethod
|
|
93
|
+
};
|
|
81
94
|
}
|
|
82
95
|
// docs:start:getFeeOptions
|
|
83
96
|
/**
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
async getFeeOptions(request) {
|
|
97
|
+
* Return fee options based on the user opts, estimating tx gas if needed.
|
|
98
|
+
* @param request - Request to execute for this interaction.
|
|
99
|
+
* @param pad - Percentage to pad the suggested gas limits by, as decimal (e.g., 0.10 for 10%).
|
|
100
|
+
* @returns Fee options for the actual transaction.
|
|
101
|
+
*/ async getFeeOptions(request) {
|
|
90
102
|
// docs:end:getFeeOptions
|
|
91
103
|
const defaultFeeOptions = await this.getDefaultFeeOptions(request.fee);
|
|
92
104
|
const paymentMethod = defaultFeeOptions.paymentMethod;
|
|
@@ -94,14 +106,44 @@ export class BaseContractInteraction {
|
|
|
94
106
|
const maxPriorityFeesPerGas = defaultFeeOptions.gasSettings.maxPriorityFeesPerGas;
|
|
95
107
|
let gasSettings = defaultFeeOptions.gasSettings;
|
|
96
108
|
if (request.fee?.estimateGas) {
|
|
97
|
-
const feeForEstimation = {
|
|
98
|
-
|
|
99
|
-
|
|
109
|
+
const feeForEstimation = {
|
|
110
|
+
paymentMethod,
|
|
111
|
+
gasSettings
|
|
112
|
+
};
|
|
113
|
+
const txRequest = await this.wallet.createTxExecutionRequest({
|
|
114
|
+
...request,
|
|
115
|
+
fee: feeForEstimation
|
|
116
|
+
});
|
|
117
|
+
const simulationResult = await this.wallet.simulateTx(txRequest, true, undefined /* msgSender */ , undefined /* skipTxValidation */ , true);
|
|
100
118
|
const { totalGas: gasLimits, teardownGas: teardownGasLimits } = getGasLimits(simulationResult, request.fee?.estimatedGasPadding);
|
|
101
|
-
gasSettings = GasSettings.from({
|
|
119
|
+
gasSettings = GasSettings.from({
|
|
120
|
+
maxFeesPerGas,
|
|
121
|
+
maxPriorityFeesPerGas,
|
|
122
|
+
gasLimits,
|
|
123
|
+
teardownGasLimits
|
|
124
|
+
});
|
|
102
125
|
this.log.verbose(`Estimated gas limits for tx: DA=${gasLimits.daGas} L2=${gasLimits.l2Gas} teardownDA=${teardownGasLimits.daGas} teardownL2=${teardownGasLimits.l2Gas}`);
|
|
103
126
|
}
|
|
104
|
-
return {
|
|
127
|
+
return {
|
|
128
|
+
gasSettings,
|
|
129
|
+
paymentMethod
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Add data passed to the oracle calls during this contract interaction.
|
|
134
|
+
* @param capsule - Data passed to oracle calls.
|
|
135
|
+
*/ addCapsule(capsule) {
|
|
136
|
+
this.capsules.push(capsule);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Add data passed to the oracle calls during this contract interaction.
|
|
140
|
+
* @param capsules - Data passed to oracle calls.
|
|
141
|
+
*/ addCapsules(capsules) {
|
|
142
|
+
this.capsules.push(...capsules);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Return all capsules added for this function interaction.
|
|
146
|
+
*/ getCapsules() {
|
|
147
|
+
return this.capsules;
|
|
105
148
|
}
|
|
106
149
|
}
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZV9jb250cmFjdF9pbnRlcmFjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdC9iYXNlX2NvbnRyYWN0X2ludGVyYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBVyxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFLckQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDckUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBaUJ0Qzs7O0dBR0c7QUFDSCxNQUFNLE9BQWdCLHVCQUF1QjtJQUczQyxZQUFzQixNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUYxQixRQUFHLEdBQUcsWUFBWSxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFFdEIsQ0FBQztJQVN4Qzs7Ozs7O09BTUc7SUFDTyxLQUFLLENBQUMsYUFBYSxDQUFDLFVBQTZCLEVBQUU7UUFDM0QsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25ILE9BQU8sTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBRUQsbUJBQW1CO0lBQ25COzs7O09BSUc7SUFD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
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { type FunctionCall
|
|
2
|
-
import {
|
|
1
|
+
import { type FunctionCall } from '@aztec/stdlib/abi';
|
|
2
|
+
import type { TxExecutionRequest } from '@aztec/stdlib/tx';
|
|
3
|
+
import type { Wallet } from '../account/index.js';
|
|
3
4
|
import { BaseContractInteraction, type SendMethodOptions } from './base_contract_interaction.js';
|
|
4
5
|
import type { SimulateMethodOptions } from './contract_function_interaction.js';
|
|
5
6
|
/** A batch of function calls to be sent as a single transaction through a wallet. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batch_call.d.ts","sourceRoot":"","sources":["../../src/contract/batch_call.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,
|
|
1
|
+
{"version":3,"file":"batch_call.d.ts","sourceRoot":"","sources":["../../src/contract/batch_call.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAA+B,MAAM,mBAAmB,CAAC;AACnF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,KAAK,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACjG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAEhF,qFAAqF;AACrF,qBAAa,SAAU,SAAQ,uBAAuB;IACxB,SAAS,CAAC,KAAK,EAAE,YAAY,EAAE;gBAA/C,MAAM,EAAE,MAAM,EAAY,KAAK,EAAE,YAAY,EAAE;IAI3D;;;;;OAKG;IACU,MAAM,CAAC,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAO1E;;;;;;;;OAQG;IACU,QAAQ,CAAC,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,GAAG,CAAC;CA2DzE"}
|
|
@@ -1,67 +1,91 @@
|
|
|
1
|
-
import { FunctionType, decodeFromAbi } from '@aztec/
|
|
1
|
+
import { FunctionType, decodeFromAbi } from '@aztec/stdlib/abi';
|
|
2
2
|
import { BaseContractInteraction } from './base_contract_interaction.js';
|
|
3
|
-
/** A batch of function calls to be sent as a single transaction through a wallet. */
|
|
4
|
-
|
|
5
|
-
constructor(wallet, calls)
|
|
6
|
-
super(wallet);
|
|
7
|
-
this.calls = calls;
|
|
3
|
+
/** A batch of function calls to be sent as a single transaction through a wallet. */ export class BatchCall extends BaseContractInteraction {
|
|
4
|
+
calls;
|
|
5
|
+
constructor(wallet, calls){
|
|
6
|
+
super(wallet), this.calls = calls;
|
|
8
7
|
}
|
|
9
8
|
/**
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
async create(opts) {
|
|
9
|
+
* Create a transaction execution request that represents this batch, encoded and authenticated by the
|
|
10
|
+
* user's wallet, ready to be simulated.
|
|
11
|
+
* @param opts - An optional object containing additional configuration for the transaction.
|
|
12
|
+
* @returns A Promise that resolves to a transaction instance.
|
|
13
|
+
*/ async create(opts) {
|
|
16
14
|
const calls = this.calls;
|
|
17
|
-
const
|
|
18
|
-
|
|
15
|
+
const capsules = this.getCapsules();
|
|
16
|
+
const fee = await this.getFeeOptions({
|
|
17
|
+
calls,
|
|
18
|
+
capsules,
|
|
19
|
+
...opts
|
|
20
|
+
});
|
|
21
|
+
return await this.wallet.createTxExecutionRequest({
|
|
22
|
+
calls,
|
|
23
|
+
capsules,
|
|
24
|
+
...opts,
|
|
25
|
+
fee
|
|
26
|
+
});
|
|
19
27
|
}
|
|
20
28
|
/**
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
const { indexedCalls, unconstrained } = this.calls.reduce((acc, current, index) => {
|
|
29
|
+
* Simulate a transaction and get its return values
|
|
30
|
+
* Differs from prove in a few important ways:
|
|
31
|
+
* 1. It returns the values of the function execution
|
|
32
|
+
* 2. It supports `unconstrained`, `private` and `public` functions
|
|
33
|
+
*
|
|
34
|
+
* @param options - An optional object containing additional configuration for the transaction.
|
|
35
|
+
* @returns The result of the transaction as returned by the contract function.
|
|
36
|
+
*/ async simulate(options = {}) {
|
|
37
|
+
const { indexedCalls, unconstrained } = this.calls.reduce((acc, current, index)=>{
|
|
31
38
|
if (current.type === FunctionType.UNCONSTRAINED) {
|
|
32
|
-
acc.unconstrained.push([
|
|
33
|
-
|
|
34
|
-
|
|
39
|
+
acc.unconstrained.push([
|
|
40
|
+
current,
|
|
41
|
+
index
|
|
42
|
+
]);
|
|
43
|
+
} else {
|
|
35
44
|
acc.indexedCalls.push([
|
|
36
45
|
current,
|
|
37
46
|
index,
|
|
38
|
-
current.type === FunctionType.PRIVATE ? acc.privateIndex++ : acc.publicIndex
|
|
47
|
+
current.type === FunctionType.PRIVATE ? acc.privateIndex++ : acc.publicIndex++
|
|
39
48
|
]);
|
|
40
49
|
}
|
|
41
50
|
return acc;
|
|
42
|
-
}, {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
51
|
+
}, {
|
|
52
|
+
indexedCalls: [],
|
|
53
|
+
unconstrained: [],
|
|
54
|
+
publicIndex: 0,
|
|
55
|
+
privateIndex: 0
|
|
56
|
+
});
|
|
57
|
+
const calls = indexedCalls.map(([call])=>call);
|
|
58
|
+
const capsules = this.getCapsules();
|
|
59
|
+
const fee = await this.getFeeOptions({
|
|
60
|
+
calls,
|
|
61
|
+
capsules,
|
|
62
|
+
...options
|
|
63
|
+
});
|
|
64
|
+
const txRequest = await this.wallet.createTxExecutionRequest({
|
|
65
|
+
calls,
|
|
66
|
+
capsules,
|
|
67
|
+
...options,
|
|
68
|
+
fee
|
|
69
|
+
});
|
|
70
|
+
const unconstrainedCalls = unconstrained.map(async ([call, index])=>[
|
|
71
|
+
await this.wallet.simulateUnconstrained(call.name, call.args, call.to, options?.from),
|
|
72
|
+
index
|
|
73
|
+
]);
|
|
47
74
|
const [unconstrainedResults, simulatedTx] = await Promise.all([
|
|
48
75
|
Promise.all(unconstrainedCalls),
|
|
49
|
-
this.wallet.simulateTx(txRequest, true, options?.from, options?.skipTxValidation)
|
|
76
|
+
this.wallet.simulateTx(txRequest, true, options?.from, options?.skipTxValidation)
|
|
50
77
|
]);
|
|
51
78
|
const results = [];
|
|
52
|
-
unconstrainedResults.forEach(([result, index])
|
|
79
|
+
unconstrainedResults.forEach(([result, index])=>{
|
|
53
80
|
results[index] = result;
|
|
54
81
|
});
|
|
55
|
-
indexedCalls.forEach(([call, callIndex, resultIndex])
|
|
82
|
+
indexedCalls.forEach(([call, callIndex, resultIndex])=>{
|
|
56
83
|
// As account entrypoints are private, for private functions we retrieve the return values from the first nested call
|
|
57
84
|
// since we're interested in the first set of values AFTER the account entrypoint
|
|
58
85
|
// For public functions we retrieve the first values directly from the public output.
|
|
59
|
-
const rawReturnValues = call.type == FunctionType.PRIVATE
|
|
60
|
-
? simulatedTx.getPrivateReturnValues()?.nested?.[resultIndex].values
|
|
61
|
-
: simulatedTx.getPublicReturnValues()?.[resultIndex].values;
|
|
86
|
+
const rawReturnValues = call.type == FunctionType.PRIVATE ? simulatedTx.getPrivateReturnValues()?.nested?.[resultIndex].values : simulatedTx.getPublicReturnValues()?.[resultIndex].values;
|
|
62
87
|
results[callIndex] = rawReturnValues ? decodeFromAbi(call.returnTypes, rawReturnValues) : [];
|
|
63
88
|
});
|
|
64
89
|
return results;
|
|
65
90
|
}
|
|
66
91
|
}
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hfY2FsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdC9iYXRjaF9jYWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHcEUsT0FBTyxFQUFFLHVCQUF1QixFQUEwQixNQUFNLGdDQUFnQyxDQUFDO0FBR2pHLHFGQUFxRjtBQUNyRixNQUFNLE9BQU8sU0FBVSxTQUFRLHVCQUF1QjtJQUNwRCxZQUFZLE1BQWMsRUFBWSxLQUFxQjtRQUN6RCxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFEc0IsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7SUFFM0QsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUF3QjtRQUMxQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3pCLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekQsT0FBTyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQWlDLEVBQUU7UUFDdkQsTUFBTSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FVdkQsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3RCLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ2hELEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFD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
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { ContractArtifact } from '@aztec/stdlib/abi';
|
|
2
2
|
/**
|
|
3
3
|
* Validates the given ContractArtifact object by checking its functions and their parameters.
|
|
4
4
|
* Ensures that the ABI has at least one function, a constructor, valid bytecode, and correct parameter types.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../src/contract/checker.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../src/contract/checker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsB,gBAAgB,EAAc,MAAM,mBAAmB,CAAC;AAQ1F;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,gBAAgB,WA8BpD"}
|
package/dest/contract/checker.js
CHANGED
|
@@ -5,12 +5,11 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @param artifact - The ContractArtifact object to be validated.
|
|
7
7
|
* @returns A boolean value indicating whether the artifact is valid or not.
|
|
8
|
-
*/
|
|
9
|
-
export function abiChecker(artifact) {
|
|
8
|
+
*/ export function abiChecker(artifact) {
|
|
10
9
|
if (!artifact.functions || artifact.functions.length === 0) {
|
|
11
10
|
throw new Error('artifact has no functions');
|
|
12
11
|
}
|
|
13
|
-
artifact.functions.forEach(func
|
|
12
|
+
artifact.functions.forEach((func)=>{
|
|
14
13
|
if (!('name' in func && typeof func.name === 'string' && func.name.length > 0)) {
|
|
15
14
|
throw new Error('ABI function has no name');
|
|
16
15
|
}
|
|
@@ -18,7 +17,7 @@ export function abiChecker(artifact) {
|
|
|
18
17
|
if (!('bytecode' in func && func.bytecode.length > 0)) {
|
|
19
18
|
throw new Error('ABI function parameter has incorrect bytecode');
|
|
20
19
|
}
|
|
21
|
-
func.parameters.forEach(param
|
|
20
|
+
func.parameters.forEach((param)=>{
|
|
22
21
|
if (!param.type) {
|
|
23
22
|
throw new Error('ABI function parameter has no type');
|
|
24
23
|
}
|
|
@@ -26,7 +25,7 @@ export function abiChecker(artifact) {
|
|
|
26
25
|
});
|
|
27
26
|
});
|
|
28
27
|
// TODO: implement a better check for constructor (right now only checks if it has it or not)
|
|
29
|
-
if (!artifact.functions.find(func
|
|
28
|
+
if (!artifact.functions.find((func)=>func.name === 'constructor')) {
|
|
30
29
|
throw new Error('ABI has no constructor');
|
|
31
30
|
}
|
|
32
31
|
return true;
|
|
@@ -38,20 +37,30 @@ export function abiChecker(artifact) {
|
|
|
38
37
|
*
|
|
39
38
|
* @param type - The AbiType object representing the type of the ABI function parameter.
|
|
40
39
|
* @returns A boolean value indicating whether the type is valid or not.
|
|
41
|
-
*/
|
|
42
|
-
|
|
43
|
-
switch (type.kind) {
|
|
40
|
+
*/ function abiParameterTypeChecker(type) {
|
|
41
|
+
switch(type.kind){
|
|
44
42
|
case 'field':
|
|
45
43
|
case 'boolean':
|
|
46
44
|
return checkAttributes(type, {});
|
|
47
45
|
case 'integer':
|
|
48
|
-
return checkAttributes(type, {
|
|
46
|
+
return checkAttributes(type, {
|
|
47
|
+
sign: 'string',
|
|
48
|
+
width: 'number'
|
|
49
|
+
});
|
|
49
50
|
case 'string':
|
|
50
|
-
return checkAttributes(type, {
|
|
51
|
+
return checkAttributes(type, {
|
|
52
|
+
length: 'number'
|
|
53
|
+
});
|
|
51
54
|
case 'array':
|
|
52
|
-
return checkAttributes(type, {
|
|
55
|
+
return checkAttributes(type, {
|
|
56
|
+
length: 'number',
|
|
57
|
+
type: 'object'
|
|
58
|
+
}) && abiParameterTypeChecker(type.type);
|
|
53
59
|
case 'struct':
|
|
54
|
-
return checkAttributes(type, {
|
|
60
|
+
return checkAttributes(type, {
|
|
61
|
+
fields: 'object',
|
|
62
|
+
path: 'string'
|
|
63
|
+
}) && checkStruct(type);
|
|
55
64
|
default:
|
|
56
65
|
throw new Error('ABI function parameter has an unrecognized type');
|
|
57
66
|
}
|
|
@@ -63,9 +72,8 @@ function abiParameterTypeChecker(type) {
|
|
|
63
72
|
*
|
|
64
73
|
* @param type - The StructType object containing an array of fields to validate.
|
|
65
74
|
* @returns A boolean value indicating successful validation of the struct's fields.
|
|
66
|
-
*/
|
|
67
|
-
|
|
68
|
-
return type.fields.reduce((acc, field) => {
|
|
75
|
+
*/ function checkStruct(type) {
|
|
76
|
+
return type.fields.reduce((acc, field)=>{
|
|
69
77
|
if (!('name' in field && typeof field.name === 'string')) {
|
|
70
78
|
throw new Error('ABI function parameter has an incorrectly formed struct');
|
|
71
79
|
}
|
|
@@ -81,18 +89,19 @@ function checkStruct(type) {
|
|
|
81
89
|
* @param type - The ABI type object to be checked for correct attributes.
|
|
82
90
|
* @param incompleteAttributes - An object representing the expected attribute types without the 'kind' property.
|
|
83
91
|
* @returns Returns true if the provided ABI type has the correct attributes and their associated types, otherwise throws an error.
|
|
84
|
-
*/
|
|
85
|
-
function checkAttributes(type, incompleteAttributes) {
|
|
92
|
+
*/ function checkAttributes(type, incompleteAttributes) {
|
|
86
93
|
const typeKeys = Object.keys(type);
|
|
87
|
-
const attributes = {
|
|
94
|
+
const attributes = {
|
|
95
|
+
...incompleteAttributes,
|
|
96
|
+
kind: 'string'
|
|
97
|
+
};
|
|
88
98
|
if (typeKeys.length !== Object.keys(attributes).length) {
|
|
89
99
|
throw new Error(`Unrecognized attribute on type ${type.kind}`);
|
|
90
100
|
}
|
|
91
|
-
typeKeys.forEach(element
|
|
101
|
+
typeKeys.forEach((element)=>{
|
|
92
102
|
if (!(element in type && typeof type[element] === attributes[element])) {
|
|
93
103
|
throw new Error(`ABI function parameter has an incorrectly formed ${type.kind}`);
|
|
94
104
|
}
|
|
95
105
|
});
|
|
96
106
|
return true;
|
|
97
107
|
}
|
|
98
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdC9jaGVja2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLFFBQTBCO0lBQ25ELElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzNELE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsUUFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDaEMsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDL0UsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFRCxrRkFBa0Y7UUFDbEYsSUFBSSxDQUFDLENBQUMsVUFBVSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RELE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO1lBQ3hELENBQUM7WUFFRCx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxD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
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import type { ContractArtifact } from '@aztec/stdlib/abi';
|
|
2
|
+
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
3
|
+
import { PublicKeys } from '@aztec/stdlib/keys';
|
|
4
|
+
import type { Wallet } from '../account/index.js';
|
|
5
5
|
import { ContractBase } from './contract_base.js';
|
|
6
6
|
import { DeployMethod } from './deploy_method.js';
|
|
7
7
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/contract/contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/contract/contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;;;;;GAMG;AACH,qBAAa,QAAS,SAAQ,YAAY;IACxC;;;;;;OAMG;WACiB,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAc5G;;;;;;OAMG;WACW,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,eAAe,CAAC,EAAE,MAAM;IAKtG;;;;;;;OAOG;WACW,oBAAoB,CAChC,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,GAAG,EAAE,EACX,eAAe,CAAC,EAAE,MAAM;CAK3B"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getContractClassFromArtifact } from '@aztec/stdlib/contract';
|
|
2
|
+
import { PublicKeys } from '@aztec/stdlib/keys';
|
|
2
3
|
import { ContractBase } from './contract_base.js';
|
|
3
4
|
import { DeployMethod } from './deploy_method.js';
|
|
4
5
|
/**
|
|
@@ -7,44 +8,45 @@ import { DeployMethod } from './deploy_method.js';
|
|
|
7
8
|
* allowing users to call or send transactions to these functions. Additionally, the Contract class can be used
|
|
8
9
|
* to attach the contract instance to a deployed contract on-chain through the PXE, which facilitates
|
|
9
10
|
* interaction with Aztec's privacy protocol.
|
|
10
|
-
*/
|
|
11
|
-
export class Contract extends ContractBase {
|
|
11
|
+
*/ export class Contract extends ContractBase {
|
|
12
12
|
/**
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
static async at(address, artifact, wallet) {
|
|
13
|
+
* Creates a contract instance.
|
|
14
|
+
* @param address - The deployed contract's address.
|
|
15
|
+
* @param artifact - Build artifact of the contract.
|
|
16
|
+
* @param wallet - The wallet to use when interacting with the contract.
|
|
17
|
+
* @returns A promise that resolves to a new Contract instance.
|
|
18
|
+
*/ static async at(address, artifact, wallet) {
|
|
20
19
|
const instance = (await wallet.getContractMetadata(address)).contractInstance;
|
|
21
20
|
if (instance === undefined) {
|
|
22
21
|
throw new Error(`Contract instance at ${address.toString()} has not been registered in the wallet's PXE`);
|
|
23
22
|
}
|
|
23
|
+
const thisContractClass = await getContractClassFromArtifact(artifact);
|
|
24
|
+
if (!thisContractClass.id.equals(instance.currentContractClassId)) {
|
|
25
|
+
// wallet holds an outdated version of this contract
|
|
26
|
+
await wallet.updateContract(address, artifact);
|
|
27
|
+
instance.currentContractClassId = thisContractClass.id;
|
|
28
|
+
}
|
|
24
29
|
return new Contract(instance, artifact, wallet);
|
|
25
30
|
}
|
|
26
31
|
/**
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const postDeployCtor = (address, wallet) => Contract.at(address, artifact, wallet);
|
|
32
|
+
* Creates a tx to deploy a new instance of a contract.
|
|
33
|
+
* @param wallet - The wallet for executing the deployment.
|
|
34
|
+
* @param artifact - Build artifact of the contract to deploy
|
|
35
|
+
* @param args - Arguments for the constructor.
|
|
36
|
+
* @param constructorName - The name of the constructor function to call.
|
|
37
|
+
*/ static deploy(wallet, artifact, args, constructorName) {
|
|
38
|
+
const postDeployCtor = (address, wallet)=>Contract.at(address, artifact, wallet);
|
|
35
39
|
return new DeployMethod(PublicKeys.default(), wallet, artifact, postDeployCtor, args, constructorName);
|
|
36
40
|
}
|
|
37
41
|
/**
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const postDeployCtor = (address, wallet) => Contract.at(address, artifact, wallet);
|
|
42
|
+
* Creates a tx to deploy a new instance of a contract using the specified public keys hash to derive the address.
|
|
43
|
+
* @param publicKeys - Hash of public keys to use for deriving the address.
|
|
44
|
+
* @param wallet - The wallet for executing the deployment.
|
|
45
|
+
* @param artifact - Build artifact of the contract.
|
|
46
|
+
* @param args - Arguments for the constructor.
|
|
47
|
+
* @param constructorName - The name of the constructor function to call.
|
|
48
|
+
*/ static deployWithPublicKeys(publicKeys, wallet, artifact, args, constructorName) {
|
|
49
|
+
const postDeployCtor = (address, wallet)=>Contract.at(address, artifact, wallet);
|
|
47
50
|
return new DeployMethod(publicKeys, wallet, artifact, postDeployCtor, args, constructorName);
|
|
48
51
|
}
|
|
49
52
|
}
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJhY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3QvY29udHJhY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBS2hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFbEQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFPLFFBQVMsU0FBUSxZQUFZO0lBQ3hDOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQXFCLEVBQUUsUUFBMEIsRUFBRSxNQUFjO1FBQ3RGLE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBTSxNQUFNLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztRQUM5RSxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixPQUFPLENBQUMsUUFBUSxFQUFFLDhDQUE4QyxDQUFDLENBQUM7UUFDNUcsQ0FBQztRQUNELE9BQU8sSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFjLEVBQUUsUUFBMEIsRUFBRSxJQUFXLEVBQUUsZUFBd0I7UUFDcEcsTUFBTSxjQUFjLEdBQUcsQ0FBQyxPQUFxQixFQUFFLE1BQWMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3pHLE9BQU8sSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztJQUN6RyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLE1BQU0sQ0FBQyxvQkFBb0IsQ0FDaEMsVUFBc0IsRUFDdEIsTUFBYyxFQUNkLFFBQTBCLEVBQzFCLElBQVcsRUFDWCxlQUF3QjtRQUV4QixNQUFNLGNBQWMsR0FBRyxDQUFDLE9BQXFCLEVBQUUsTUFBYyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDekcsT0FBTyxJQUFJLFlBQVksQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQy9GLENBQUM7Q0FDRiJ9
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
import { type
|
|
3
|
-
import {
|
|
1
|
+
import { type ContractArtifact, type ContractNote, type FieldLayout, FunctionSelector } from '@aztec/stdlib/abi';
|
|
2
|
+
import { type ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
3
|
+
import type { Wallet } from '../account/index.js';
|
|
4
4
|
import { ContractFunctionInteraction } from './contract_function_interaction.js';
|
|
5
5
|
/**
|
|
6
6
|
* Type representing a contract method that returns a ContractFunctionInteraction instance
|
|
@@ -48,9 +48,9 @@ export declare class ContractBase {
|
|
|
48
48
|
/** The wallet used for interacting with this contract. */
|
|
49
49
|
wallet: Wallet);
|
|
50
50
|
/** Address of the contract. */
|
|
51
|
-
get address(): import("@aztec/
|
|
51
|
+
get address(): import("@aztec/stdlib/aztec-address").AztecAddress;
|
|
52
52
|
/** Partial address of the contract. */
|
|
53
|
-
get partialAddress(): Promise<import("@aztec/
|
|
53
|
+
get partialAddress(): Promise<import("@aztec/foundation/schemas").Fr>;
|
|
54
54
|
/**
|
|
55
55
|
* Creates a new instance of the contract wrapper attached to a different wallet.
|
|
56
56
|
* @param wallet - Wallet to use for sending txs.
|