@aztec/aztec.js 0.73.0 → 0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2
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/README.md +1 -1
- package/dest/account/contract.js +5 -3
- package/dest/account/index.js +8 -2
- package/dest/account/interface.js +4 -3
- package/dest/account/wallet.js +3 -2
- package/dest/account_manager/deploy_account_method.js +22 -25
- package/dest/account_manager/deploy_account_sent_tx.js +16 -17
- package/dest/account_manager/index.js +67 -78
- package/dest/api/abi.js +0 -1
- package/dest/api/account.js +0 -1
- package/dest/api/addresses.js +0 -1
- package/dest/api/cheat_codes.js +25 -0
- 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.js +113 -0
- package/dest/api/ethereum/chain_monitor.js +69 -0
- package/dest/api/ethereum/cheat_codes.js +142 -0
- package/dest/api/ethereum/index.js +6 -0
- package/dest/api/ethereum/l1_contracts.js +13 -0
- package/dest/api/ethereum/portal_manager.js +284 -0
- package/dest/api/fee.js +0 -1
- package/dest/api/fields.js +0 -1
- package/dest/api/interfaces/pxe.js +1 -2
- package/dest/api/log.js +1 -0
- package/dest/api/log_id.js +0 -1
- package/dest/api/tx_hash.js +0 -1
- package/dest/api/wallet.js +1 -2
- package/dest/contract/base_contract_interaction.js +75 -52
- package/dest/contract/batch_call.js +57 -39
- package/dest/contract/checker.js +29 -20
- package/dest/contract/contract.js +22 -27
- package/dest/contract/contract_base.js +21 -30
- package/dest/contract/contract_function_interaction.js +48 -48
- package/dest/contract/deploy_method.js +99 -84
- package/dest/contract/deploy_proven_tx.js +8 -11
- package/dest/contract/deploy_sent_tx.js +19 -22
- package/dest/contract/get_gas_limits.js +2 -4
- package/dest/contract/index.js +4 -6
- package/dest/contract/proven_tx.js +7 -10
- package/dest/contract/sent_tx.js +32 -34
- package/dest/contract/unsafe_contract.js +2 -10
- package/dest/deployment/broadcast_function.js +28 -26
- package/dest/deployment/contract_deployer.js +15 -14
- package/dest/deployment/deploy_instance.js +1 -3
- package/dest/deployment/index.js +0 -1
- package/dest/deployment/protocol_contracts.js +2 -5
- package/dest/deployment/register_class.js +8 -8
- package/dest/entrypoint/default_entrypoint.js +8 -5
- package/dest/entrypoint/default_multi_call_entrypoint.js +66 -23
- package/dest/entrypoint/entrypoint.js +0 -1
- package/dest/entrypoint/payload.js +73 -82
- package/dest/fee/fee_juice_payment_method.js +3 -4
- package/dest/fee/fee_juice_payment_method_with_claim.js +11 -14
- package/dest/fee/fee_payment_method.js +3 -2
- package/dest/fee/no_fee_payment_method.js +2 -4
- package/dest/fee/private_fee_payment_method.js +36 -34
- package/dest/fee/public_fee_payment_method.js +34 -31
- package/dest/index.js +8 -9
- package/dest/rpc_clients/index.js +0 -1
- package/dest/rpc_clients/node/index.js +30 -16
- package/dest/rpc_clients/pxe_client.js +5 -3
- package/dest/utils/abi_types.js +1 -2
- package/dest/utils/authwit.js +15 -15
- package/dest/utils/aztec_cheatcodes.js +62 -0
- package/dest/utils/field_compressed_string.js +2 -4
- package/dest/utils/index.js +5 -12
- package/dest/utils/node.js +4 -5
- package/dest/utils/pub_key.js +1 -3
- package/dest/utils/pxe.js +3 -5
- package/dest/wallet/account_wallet.js +118 -81
- package/dest/wallet/account_wallet_with_private_key.js +9 -15
- package/dest/wallet/base_wallet.js +7 -5
- package/dest/wallet/index.js +2 -4
- package/dest/wallet/signerless_wallet.js +4 -6
- package/package.json +14 -17
- package/src/api/account.ts +7 -1
- package/src/api/cheat_codes.ts +35 -0
- package/src/{utils → api/ethereum}/anvil_test_watcher.ts +2 -1
- package/src/{utils → api/ethereum}/cheat_codes.ts +6 -109
- package/src/api/ethereum/index.ts +15 -0
- package/src/{utils → api/ethereum}/l1_contracts.ts +1 -1
- package/src/{utils → api/ethereum}/portal_manager.ts +4 -9
- package/src/api/interfaces/pxe.ts +1 -1
- package/src/api/log.ts +1 -0
- package/src/api/wallet.ts +1 -1
- package/src/contract/contract_function_interaction.ts +1 -1
- package/src/contract/index.ts +2 -2
- package/src/entrypoint/default_multi_call_entrypoint.ts +2 -1
- package/src/entrypoint/entrypoint.ts +1 -1
- package/src/fee/fee_juice_payment_method_with_claim.ts +1 -1
- package/src/index.ts +7 -35
- package/src/utils/aztec_cheatcodes.ts +75 -0
- package/src/utils/index.ts +19 -11
- package/src/utils/node.ts +2 -0
- package/src/wallet/index.ts +1 -1
- package/dest/account/contract.d.ts +0 -33
- package/dest/account/contract.d.ts.map +0 -1
- package/dest/account/index.d.ts +0 -15
- package/dest/account/index.d.ts.map +0 -1
- package/dest/account/interface.d.ts +0 -30
- package/dest/account/interface.d.ts.map +0 -1
- package/dest/account/wallet.d.ts +0 -10
- package/dest/account/wallet.d.ts.map +0 -1
- package/dest/account_manager/deploy_account_method.d.ts +0 -15
- package/dest/account_manager/deploy_account_method.d.ts.map +0 -1
- package/dest/account_manager/deploy_account_sent_tx.d.ts +0 -29
- package/dest/account_manager/deploy_account_sent_tx.d.ts.map +0 -1
- package/dest/account_manager/index.d.ts +0 -99
- package/dest/account_manager/index.d.ts.map +0 -1
- package/dest/api/abi.d.ts +0 -4
- package/dest/api/abi.d.ts.map +0 -1
- package/dest/api/account.d.ts +0 -4
- package/dest/api/account.d.ts.map +0 -1
- package/dest/api/addresses.d.ts +0 -3
- package/dest/api/addresses.d.ts.map +0 -1
- package/dest/api/deployment.d.ts +0 -4
- package/dest/api/deployment.d.ts.map +0 -1
- package/dest/api/entrypoint.d.ts +0 -2
- package/dest/api/entrypoint.d.ts.map +0 -1
- package/dest/api/eth_address.d.ts +0 -2
- package/dest/api/eth_address.d.ts.map +0 -1
- package/dest/api/ethereum.d.ts +0 -3
- package/dest/api/ethereum.d.ts.map +0 -1
- package/dest/api/ethereum.js +0 -3
- package/dest/api/fee.d.ts +0 -7
- package/dest/api/fee.d.ts.map +0 -1
- package/dest/api/fields.d.ts +0 -2
- package/dest/api/fields.d.ts.map +0 -1
- package/dest/api/interfaces/pxe.d.ts +0 -2
- package/dest/api/interfaces/pxe.d.ts.map +0 -1
- package/dest/api/log_id.d.ts +0 -2
- package/dest/api/log_id.d.ts.map +0 -1
- package/dest/api/tx_hash.d.ts +0 -2
- package/dest/api/tx_hash.d.ts.map +0 -1
- package/dest/api/wallet.d.ts +0 -2
- package/dest/api/wallet.d.ts.map +0 -1
- package/dest/barretenberg-threads.wasm.gz +0 -0
- package/dest/barretenberg.wasm.gz +0 -0
- package/dest/contract/base_contract_interaction.d.ts +0 -82
- package/dest/contract/base_contract_interaction.d.ts.map +0 -1
- package/dest/contract/batch_call.d.ts +0 -27
- package/dest/contract/batch_call.d.ts.map +0 -1
- package/dest/contract/checker.d.ts +0 -11
- package/dest/contract/checker.d.ts.map +0 -1
- package/dest/contract/contract.d.ts +0 -41
- package/dest/contract/contract.d.ts.map +0 -1
- package/dest/contract/contract_base.d.ts +0 -61
- package/dest/contract/contract_base.d.ts.map +0 -1
- package/dest/contract/contract_function_interaction.d.ts +0 -67
- package/dest/contract/contract_function_interaction.d.ts.map +0 -1
- package/dest/contract/deploy_method.d.ts +0 -110
- package/dest/contract/deploy_method.d.ts.map +0 -1
- package/dest/contract/deploy_proven_tx.d.ts +0 -19
- package/dest/contract/deploy_proven_tx.d.ts.map +0 -1
- package/dest/contract/deploy_sent_tx.d.ts +0 -43
- package/dest/contract/deploy_sent_tx.d.ts.map +0 -1
- package/dest/contract/get_gas_limits.d.ts +0 -18
- package/dest/contract/get_gas_limits.d.ts.map +0 -1
- package/dest/contract/index.d.ts +0 -45
- package/dest/contract/index.d.ts.map +0 -1
- package/dest/contract/proven_tx.d.ts +0 -16
- package/dest/contract/proven_tx.d.ts.map +0 -1
- package/dest/contract/sent_tx.d.ts +0 -60
- package/dest/contract/sent_tx.d.ts.map +0 -1
- package/dest/contract/unsafe_contract.d.ts +0 -15
- package/dest/contract/unsafe_contract.d.ts.map +0 -1
- package/dest/deployment/broadcast_function.d.ts +0 -24
- package/dest/deployment/broadcast_function.d.ts.map +0 -1
- package/dest/deployment/contract_deployer.d.ts +0 -27
- package/dest/deployment/contract_deployer.d.ts.map +0 -1
- package/dest/deployment/deploy_instance.d.ts +0 -10
- package/dest/deployment/deploy_instance.d.ts.map +0 -1
- package/dest/deployment/index.d.ts +0 -2
- package/dest/deployment/index.d.ts.map +0 -1
- package/dest/deployment/protocol_contracts.d.ts +0 -7
- package/dest/deployment/protocol_contracts.d.ts.map +0 -1
- package/dest/deployment/register_class.d.ts +0 -6
- package/dest/deployment/register_class.d.ts.map +0 -1
- package/dest/entrypoint/default_entrypoint.d.ts +0 -12
- package/dest/entrypoint/default_entrypoint.d.ts.map +0 -1
- package/dest/entrypoint/default_multi_call_entrypoint.d.ts +0 -15
- package/dest/entrypoint/default_multi_call_entrypoint.d.ts.map +0 -1
- package/dest/entrypoint/entrypoint.d.ts +0 -31
- package/dest/entrypoint/entrypoint.d.ts.map +0 -1
- package/dest/entrypoint/payload.d.ts +0 -125
- package/dest/entrypoint/payload.d.ts.map +0 -1
- package/dest/fee/fee_juice_payment_method.d.ts +0 -14
- package/dest/fee/fee_juice_payment_method.d.ts.map +0 -1
- package/dest/fee/fee_juice_payment_method_with_claim.d.ts +0 -17
- package/dest/fee/fee_juice_payment_method_with_claim.d.ts.map +0 -1
- package/dest/fee/fee_payment_method.d.ts +0 -22
- package/dest/fee/fee_payment_method.d.ts.map +0 -1
- 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/private_fee_payment_method.d.ts +0 -51
- package/dest/fee/private_fee_payment_method.d.ts.map +0 -1
- package/dest/fee/public_fee_payment_method.d.ts +0 -41
- package/dest/fee/public_fee_payment_method.d.ts.map +0 -1
- package/dest/index.d.ts +0 -51
- package/dest/index.d.ts.map +0 -1
- package/dest/main.js +0 -2
- package/dest/main.js.LICENSE.txt +0 -25
- package/dest/rpc_clients/index.d.ts +0 -3
- package/dest/rpc_clients/index.d.ts.map +0 -1
- package/dest/rpc_clients/node/index.d.ts +0 -11
- package/dest/rpc_clients/node/index.d.ts.map +0 -1
- package/dest/rpc_clients/pxe_client.d.ts +0 -9
- package/dest/rpc_clients/pxe_client.d.ts.map +0 -1
- package/dest/utils/abi_types.d.ts +0 -26
- package/dest/utils/abi_types.d.ts.map +0 -1
- package/dest/utils/anvil_test_watcher.d.ts +0 -28
- package/dest/utils/anvil_test_watcher.d.ts.map +0 -1
- package/dest/utils/anvil_test_watcher.js +0 -108
- package/dest/utils/authwit.d.ts +0 -59
- package/dest/utils/authwit.d.ts.map +0 -1
- package/dest/utils/chain_monitor.d.ts +0 -21
- package/dest/utils/chain_monitor.d.ts.map +0 -1
- package/dest/utils/chain_monitor.js +0 -58
- package/dest/utils/cheat_codes.d.ts +0 -137
- package/dest/utils/cheat_codes.d.ts.map +0 -1
- package/dest/utils/cheat_codes.js +0 -225
- package/dest/utils/field_compressed_string.d.ts +0 -17
- package/dest/utils/field_compressed_string.d.ts.map +0 -1
- package/dest/utils/index.d.ts +0 -12
- package/dest/utils/index.d.ts.map +0 -1
- package/dest/utils/l1_contracts.d.ts +0 -3
- package/dest/utils/l1_contracts.d.ts.map +0 -1
- package/dest/utils/l1_contracts.js +0 -15
- package/dest/utils/node.d.ts +0 -4
- package/dest/utils/node.d.ts.map +0 -1
- package/dest/utils/portal_manager.d.ts +0 -130
- package/dest/utils/portal_manager.d.ts.map +0 -1
- package/dest/utils/portal_manager.js +0 -265
- package/dest/utils/pub_key.d.ts +0 -8
- package/dest/utils/pub_key.d.ts.map +0 -1
- package/dest/utils/pxe.d.ts +0 -4
- package/dest/utils/pxe.d.ts.map +0 -1
- package/dest/wallet/account_wallet.d.ts +0 -73
- package/dest/wallet/account_wallet.d.ts.map +0 -1
- package/dest/wallet/account_wallet_with_private_key.d.ts +0 -26
- package/dest/wallet/account_wallet_with_private_key.d.ts.map +0 -1
- package/dest/wallet/base_wallet.d.ts +0 -64
- package/dest/wallet/base_wallet.d.ts.map +0 -1
- package/dest/wallet/index.d.ts +0 -17
- package/dest/wallet/index.d.ts.map +0 -1
- package/dest/wallet/signerless_wallet.d.ts +0 -22
- package/dest/wallet/signerless_wallet.d.ts.map +0 -1
- package/src/api/ethereum.ts +0 -2
- /package/src/{utils → api/ethereum}/chain_monitor.ts +0 -0
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Aztec.js
|
|
2
2
|
|
|
3
|
-
Aztec.js is a library that provides APIs for managing accounts and interacting with contracts on the Aztec network. It communicates with the [Private eXecution Environment (PXE)](https://docs.aztec.network/reference/aztecjs/pxe) through a `PXE` implementation, allowing developers to easily register new accounts, deploy contracts, view functions, and send transactions.
|
|
3
|
+
Aztec.js is a library that provides APIs for managing accounts and interacting with contracts on the Aztec network. It communicates with the [Private eXecution Environment (PXE)](https://docs.aztec.network/developers/reference/aztecjs/pxe) through a `PXE` implementation, allowing developers to easily register new accounts, deploy contracts, view functions, and send transactions.
|
|
4
4
|
|
|
5
5
|
## Installing
|
|
6
6
|
|
package/dest/account/contract.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
// docs:start:account-contract-interface
|
|
2
|
+
/**
|
|
3
|
+
* An account contract instance. Knows its artifact, deployment arguments, how to create
|
|
4
|
+
* transaction execution requests out of function calls, and how to authorize actions.
|
|
5
|
+
*/ export { }; // docs:end:account-contract-interface
|
package/dest/account/index.js
CHANGED
|
@@ -1,2 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* The `account` module provides utilities for managing accounts. The {@link AccountManager} class
|
|
3
|
+
* allows to deploy and register a fresh account, or to obtain a `Wallet` instance out of an account
|
|
4
|
+
* already deployed. Use the `@aztec/accounts` package to load default account implementations that rely
|
|
5
|
+
* on ECDSA or Schnorr signatures.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/ export * from './wallet.js';
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Handler for interfacing with an account. Knows how to create transaction execution
|
|
3
|
+
* requests and authorize actions for its corresponding account.
|
|
4
|
+
*/ export { }; // docs:end:account-interface
|
package/dest/account/wallet.js
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* The wallet interface.
|
|
3
|
+
*/ export { };
|
|
@@ -1,46 +1,43 @@
|
|
|
1
|
-
|
|
2
|
-
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
3
|
-
import { FunctionSelector, encodeArguments, getFunctionArtifactByName, } from '@aztec/foundation/abi';
|
|
1
|
+
import { FunctionSelector, encodeArguments, getFunctionArtifactByName } from '@aztec/foundation/abi';
|
|
4
2
|
import { Contract } from '../contract/contract.js';
|
|
5
3
|
import { DeployMethod } from '../contract/deploy_method.js';
|
|
6
4
|
import { EntrypointPayload, computeCombinedPayloadHash } from '../entrypoint/payload.js';
|
|
7
5
|
/**
|
|
8
6
|
* Contract interaction for deploying an account contract. Handles fee preparation and contract initialization.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
__classPrivateFieldSet(this, _DeployAccountMethod_feePaymentArtifact, typeof feePaymentNameOrArtifact === 'string'
|
|
17
|
-
? getFunctionArtifactByName(artifact, feePaymentNameOrArtifact)
|
|
18
|
-
: feePaymentNameOrArtifact, "f");
|
|
7
|
+
*/ export class DeployAccountMethod extends DeployMethod {
|
|
8
|
+
#authWitnessProvider;
|
|
9
|
+
#feePaymentArtifact;
|
|
10
|
+
constructor(authWitnessProvider, publicKeys, wallet, artifact, args = [], constructorNameOrArtifact, feePaymentNameOrArtifact){
|
|
11
|
+
super(publicKeys, wallet, artifact, (address, wallet)=>Contract.at(address, artifact, wallet), args, constructorNameOrArtifact);
|
|
12
|
+
this.#authWitnessProvider = authWitnessProvider;
|
|
13
|
+
this.#feePaymentArtifact = typeof feePaymentNameOrArtifact === 'string' ? getFunctionArtifactByName(artifact, feePaymentNameOrArtifact) : feePaymentNameOrArtifact;
|
|
19
14
|
}
|
|
20
15
|
async getInitializeFunctionCalls(options) {
|
|
21
16
|
const exec = await super.getInitializeFunctionCalls(options);
|
|
22
|
-
if (options.fee &&
|
|
17
|
+
if (options.fee && this.#feePaymentArtifact) {
|
|
23
18
|
const { address } = await this.getInstance();
|
|
24
19
|
const emptyAppPayload = await EntrypointPayload.fromAppExecution([]);
|
|
25
20
|
const fee = await this.getDefaultFeeOptions(options.fee);
|
|
26
21
|
const feePayload = await EntrypointPayload.fromFeeOptions(address, fee);
|
|
27
22
|
exec.calls.push({
|
|
28
|
-
name:
|
|
23
|
+
name: this.#feePaymentArtifact.name,
|
|
29
24
|
to: address,
|
|
30
|
-
args: encodeArguments(
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
25
|
+
args: encodeArguments(this.#feePaymentArtifact, [
|
|
26
|
+
emptyAppPayload,
|
|
27
|
+
feePayload,
|
|
28
|
+
false
|
|
29
|
+
]),
|
|
30
|
+
selector: await FunctionSelector.fromNameAndParameters(this.#feePaymentArtifact.name, this.#feePaymentArtifact.parameters),
|
|
31
|
+
type: this.#feePaymentArtifact.functionType,
|
|
32
|
+
isStatic: this.#feePaymentArtifact.isStatic,
|
|
33
|
+
returnTypes: this.#feePaymentArtifact.returnTypes
|
|
35
34
|
});
|
|
36
|
-
exec.authWitnesses
|
|
37
|
-
exec.hashedArguments
|
|
38
|
-
exec.authWitnesses.push(await
|
|
35
|
+
exec.authWitnesses ??= [];
|
|
36
|
+
exec.hashedArguments ??= [];
|
|
37
|
+
exec.authWitnesses.push(await this.#authWitnessProvider.createAuthWit(await computeCombinedPayloadHash(emptyAppPayload, feePayload)));
|
|
39
38
|
exec.hashedArguments.push(...emptyAppPayload.hashedArguments);
|
|
40
39
|
exec.hashedArguments.push(...feePayload.hashedArguments);
|
|
41
40
|
}
|
|
42
41
|
return exec;
|
|
43
42
|
}
|
|
44
43
|
}
|
|
45
|
-
_DeployAccountMethod_authWitnessProvider = new WeakMap(), _DeployAccountMethod_feePaymentArtifact = new WeakMap();
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95X2FjY291bnRfbWV0aG9kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FjY291bnRfbWFuYWdlci9kZXBsb3lfYWNjb3VudF9tZXRob2QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSxPQUFPLEVBR0wsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZix5QkFBeUIsR0FDMUIsTUFBTSx1QkFBdUIsQ0FBQztBQUsvQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBc0IsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV6Rjs7R0FFRztBQUNILE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxZQUFZO0lBSW5ELFlBQ0UsbUJBQXdDLEVBQ3hDLFVBQXNCLEVBQ3RCLE1BQWMsRUFDZCxRQUEwQixFQUMxQixPQUFjLEVBQUUsRUFDaEIseUJBQXFELEVBQ3JELHdCQUFvRDtRQUVwRCxLQUFLLENBQ0gsVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBQ1IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQzNELElBQUksRUFDSix5QkFBeUIsQ0FDMUIsQ0FBQztRQW5CSiwyREFBMEM7UUFDMUMsMERBQWtEO1FBb0JoRCx1QkFBQSxJQUFJLDRDQUF3QixtQkFBbUIsTUFBQSxDQUFDO1FBQ2hELHVCQUFBLElBQUksMkNBQ0YsT0FBTyx3QkFBd0IsS0FBSyxRQUFRO1lBQzFDLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLEVBQUUsd0JBQXdCLENBQUM7WUFDL0QsQ0FBQyxDQUFDLHdCQUF3QixNQUFBLENBQUM7SUFDakMsQ0FBQztJQUVrQixLQUFLLENBQUMsMEJBQTBCLENBQ2pELE9BQXNCO1FBRXRCLE1BQU0sSUFBSSxHQUFHLE1BQU0sS0FBSyxDQUFDLDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTdELElBQUksT0FBTyxDQUFDLEdBQUcsSUFBSSx1QkFBQSxJQUFJLCtDQUFvQixFQUFFLENBQUM7WUFDNUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzdDLE1BQU0sZUFBZSxHQUFHLE1BQU0saUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckUsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pELE1BQU0sVUFBVSxHQUFHLE1BQU0saUJBQWlCLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztZQUV4RSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDZCxJQUFJLEVBQUUsdUJBQUEsSUFBSSwrQ0FBb0IsQ0FBQyxJQUFJO2dCQUNuQyxFQUFFLEVBQUUsT0FBTztnQkFDWCxJQUFJLEVBQUUsZUFBZSxDQUFDLHVCQUFBLElBQUksK0NBQW9CLEVBQUUsQ0FBQyxlQUFlLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNyRixRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FDcEQsdUJBQUEsSUFBSSwrQ0FBb0IsQ0FBQyxJQUFJLEVBQzdCLHVCQUFBLElBQUksK0NBQW9CLENBQUMsVUFBVSxDQUNwQztnQkFDRCxJQUFJLEVBQUUsdUJBQUEsSUFBSSwrQ0FBb0IsQ0FBQyxZQUFZO2dCQUMzQyxRQUFRLEVBQUUsdUJBQUEsSUFBSSwrQ0FBb0IsQ0FBQyxRQUFRO2dCQUMzQyxXQUFXLEVBQUUsdUJBQUEsSUFBSSwrQ0FBb0IsQ0FBQyxXQUFXO2FBQ2xELENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxhQUFhLEtBQWxCLElBQUksQ0FBQyxhQUFhLEdBQUssRUFBRSxFQUFDO1lBQzFCLElBQUksQ0FBQyxlQUFlLEtBQXBCLElBQUksQ0FBQyxlQUFlLEdBQUssRUFBRSxFQUFDO1lBRTVCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNyQixNQUFNLHVCQUFBLElBQUksZ0RBQXFCLENBQUMsYUFBYSxDQUFDLE1BQU0sMEJBQTBCLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQzdHLENBQUM7WUFFRixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0YifQ==
|
|
@@ -1,30 +1,29 @@
|
|
|
1
1
|
import { DefaultWaitOpts, SentTx } from '../contract/sent_tx.js';
|
|
2
2
|
/**
|
|
3
3
|
* A deployment transaction for an account contract sent to the network, extending SentTx with methods to get the resulting wallet.
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
constructor(pxe, txHashPromise, getWalletPromise)
|
|
7
|
-
super(pxe, txHashPromise);
|
|
8
|
-
this.getWalletPromise = getWalletPromise;
|
|
4
|
+
*/ export class DeployAccountSentTx extends SentTx {
|
|
5
|
+
getWalletPromise;
|
|
6
|
+
constructor(pxe, txHashPromise, getWalletPromise){
|
|
7
|
+
super(pxe, txHashPromise), this.getWalletPromise = getWalletPromise;
|
|
9
8
|
}
|
|
10
9
|
/**
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
async getWallet(opts) {
|
|
10
|
+
* Awaits for the tx to be mined and returns the contract instance. Throws if tx is not mined.
|
|
11
|
+
* @param opts - Options for configuring the waiting for the tx to be mined.
|
|
12
|
+
* @returns The deployed contract instance.
|
|
13
|
+
*/ async getWallet(opts) {
|
|
16
14
|
const receipt = await this.wait(opts);
|
|
17
15
|
return receipt.wallet;
|
|
18
16
|
}
|
|
19
17
|
/**
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
async wait(opts = DefaultWaitOpts) {
|
|
18
|
+
* Awaits for the tx to be mined and returns the receipt along with a wallet instance. Throws if tx is not mined.
|
|
19
|
+
* @param opts - Options for configuring the waiting for the tx to be mined.
|
|
20
|
+
* @returns The transaction receipt with the wallet for the deployed account contract.
|
|
21
|
+
*/ async wait(opts = DefaultWaitOpts) {
|
|
25
22
|
const receipt = await super.wait(opts);
|
|
26
23
|
const wallet = await this.getWalletPromise;
|
|
27
|
-
return {
|
|
24
|
+
return {
|
|
25
|
+
...receipt,
|
|
26
|
+
wallet
|
|
27
|
+
};
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95X2FjY291bnRfc2VudF90eC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hY2NvdW50X21hbmFnZXIvZGVwbG95X2FjY291bnRfc2VudF90eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBaUIsTUFBTSx3QkFBd0IsQ0FBQztBQVFoRjs7R0FFRztBQUNILE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxNQUFNO0lBQzdDLFlBQVksR0FBUSxFQUFFLGFBQThCLEVBQVUsZ0JBQWlDO1FBQzdGLEtBQUssQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFEa0MscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtJQUUvRixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBZTtRQUNwQyxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ2EsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFpQixlQUFlO1FBQ3pELE1BQU0sT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUMzQyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDaEMsQ0FBQztDQUNGIn0=
|
|
@@ -9,13 +9,15 @@ import { DeployAccountSentTx } from './deploy_account_sent_tx.js';
|
|
|
9
9
|
/**
|
|
10
10
|
* Manages a user account. Provides methods for calculating the account's address, deploying the account contract,
|
|
11
11
|
* and creating and registering the user wallet in the PXE Service.
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
*/ export class AccountManager {
|
|
13
|
+
pxe;
|
|
14
|
+
secretKey;
|
|
15
|
+
accountContract;
|
|
16
|
+
instance;
|
|
17
|
+
salt;
|
|
18
|
+
constructor(pxe, secretKey, accountContract, instance, /**
|
|
16
19
|
* Deployment salt for the account contract
|
|
17
|
-
*/
|
|
18
|
-
salt) {
|
|
20
|
+
*/ salt){
|
|
19
21
|
this.pxe = pxe;
|
|
20
22
|
this.secretKey = secretKey;
|
|
21
23
|
this.accountContract = accountContract;
|
|
@@ -28,7 +30,7 @@ export class AccountManager {
|
|
|
28
30
|
const instance = await getContractInstanceFromDeployParams(accountContract.getContractArtifact(), {
|
|
29
31
|
constructorArgs: await accountContract.getDeploymentArgs(),
|
|
30
32
|
salt: salt,
|
|
31
|
-
publicKeys
|
|
33
|
+
publicKeys
|
|
32
34
|
});
|
|
33
35
|
return new AccountManager(pxe, secretKey, accountContract, instance, salt);
|
|
34
36
|
}
|
|
@@ -39,70 +41,63 @@ export class AccountManager {
|
|
|
39
41
|
return this.getPublicKeys().hash();
|
|
40
42
|
}
|
|
41
43
|
/**
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
async getAccount() {
|
|
44
|
+
* Returns the entrypoint for this account as defined by its account contract.
|
|
45
|
+
* @returns An entrypoint.
|
|
46
|
+
*/ async getAccount() {
|
|
46
47
|
const nodeInfo = await this.pxe.getNodeInfo();
|
|
47
48
|
const completeAddress = await this.getCompleteAddress();
|
|
48
49
|
return this.accountContract.getInterface(completeAddress, nodeInfo);
|
|
49
50
|
}
|
|
50
51
|
/**
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
getCompleteAddress() {
|
|
52
|
+
* Gets the calculated complete address associated with this account.
|
|
53
|
+
* Does not require the account to be deployed or registered.
|
|
54
|
+
* @returns The address, partial address, and encryption public key.
|
|
55
|
+
*/ getCompleteAddress() {
|
|
56
56
|
return CompleteAddress.fromSecretKeyAndInstance(this.secretKey, this.instance);
|
|
57
57
|
}
|
|
58
58
|
/**
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
getAddress() {
|
|
59
|
+
* Gets the address for this given account.
|
|
60
|
+
* Does not require the account to be deployed or registered.
|
|
61
|
+
* @returns The address.
|
|
62
|
+
*/ getAddress() {
|
|
64
63
|
return this.instance.address;
|
|
65
64
|
}
|
|
66
65
|
/**
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
getInstance() {
|
|
66
|
+
* Returns the contract instance definition associated with this account.
|
|
67
|
+
* Does not require the account to be deployed or registered.
|
|
68
|
+
* @returns ContractInstance instance.
|
|
69
|
+
*/ getInstance() {
|
|
72
70
|
return this.instance;
|
|
73
71
|
}
|
|
74
72
|
/**
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
async getWallet() {
|
|
73
|
+
* Returns a Wallet instance associated with this account. Use it to create Contract
|
|
74
|
+
* instances to be interacted with from this account.
|
|
75
|
+
* @returns A Wallet instance.
|
|
76
|
+
*/ async getWallet() {
|
|
80
77
|
const entrypoint = await this.getAccount();
|
|
81
78
|
return new AccountWalletWithSecretKey(this.pxe, entrypoint, this.secretKey, this.salt);
|
|
82
79
|
}
|
|
83
80
|
/**
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
async register() {
|
|
81
|
+
* Registers this account in the PXE Service and returns the associated wallet. Registering
|
|
82
|
+
* the account on the PXE Service is required for managing private state associated with it.
|
|
83
|
+
* Use the returned wallet to create Contract instances to be interacted with from this account.
|
|
84
|
+
* @param opts - Options to wait for the account to be synched.
|
|
85
|
+
* @returns A Wallet instance.
|
|
86
|
+
*/ async register() {
|
|
91
87
|
await this.pxe.registerContract({
|
|
92
88
|
artifact: this.accountContract.getContractArtifact(),
|
|
93
|
-
instance: this.getInstance()
|
|
89
|
+
instance: this.getInstance()
|
|
94
90
|
});
|
|
95
91
|
await this.pxe.registerAccount(this.secretKey, (await this.getCompleteAddress()).partialAddress);
|
|
96
92
|
return this.getWallet();
|
|
97
93
|
}
|
|
98
94
|
/**
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
if (!(await this.isDeployable())) {
|
|
95
|
+
* Returns the pre-populated deployment method to deploy the account contract that backs this account.
|
|
96
|
+
* Typically you will not need this method and can call `deploy` directly. Use this for having finer
|
|
97
|
+
* grained control on when to create, simulate, and send the deployment tx.
|
|
98
|
+
* @returns A DeployMethod instance that deploys this account contract.
|
|
99
|
+
*/ async getDeployMethod() {
|
|
100
|
+
if (!await this.isDeployable()) {
|
|
106
101
|
throw new Error(`Account contract ${this.accountContract.getContractArtifact().name} does not require deployment.`);
|
|
107
102
|
}
|
|
108
103
|
const completeAddress = await this.getCompleteAddress();
|
|
@@ -112,46 +107,40 @@ export class AccountManager {
|
|
|
112
107
|
// We use a signerless wallet with the multi call entrypoint in order to make multiple calls in one go
|
|
113
108
|
// If we used getWallet, the deployment would get routed via the account contract entrypoint
|
|
114
109
|
// and it can't be used unless the contract is initialized
|
|
115
|
-
const args =
|
|
110
|
+
const args = await this.accountContract.getDeploymentArgs() ?? [];
|
|
116
111
|
return new DeployAccountMethod(this.accountContract.getAuthWitnessProvider(completeAddress), this.getPublicKeys(), deployWallet, this.accountContract.getContractArtifact(), args, 'constructor', 'entrypoint');
|
|
117
112
|
}
|
|
118
113
|
/**
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
fee: opts?.fee,
|
|
135
|
-
}))
|
|
136
|
-
.then(tx => tx.getTxHash());
|
|
114
|
+
* Deploys the account contract that backs this account.
|
|
115
|
+
* Does not register the associated class nor publicly deploy the instance by default.
|
|
116
|
+
* Uses the salt provided in the constructor or a randomly generated one.
|
|
117
|
+
* Registers the account in the PXE Service before deploying the contract.
|
|
118
|
+
* @param opts - Fee options to be used for the deployment.
|
|
119
|
+
* @returns A SentTx object that can be waited to get the associated Wallet.
|
|
120
|
+
*/ deploy(opts) {
|
|
121
|
+
const sentTx = this.getDeployMethod().then((deployMethod)=>deployMethod.send({
|
|
122
|
+
contractAddressSalt: new Fr(this.salt),
|
|
123
|
+
skipClassRegistration: opts?.skipClassRegistration ?? true,
|
|
124
|
+
skipPublicDeployment: opts?.skipPublicDeployment ?? true,
|
|
125
|
+
skipInitialization: opts?.skipInitialization ?? false,
|
|
126
|
+
universalDeploy: true,
|
|
127
|
+
fee: opts?.fee
|
|
128
|
+
})).then((tx)=>tx.getTxHash());
|
|
137
129
|
return new DeployAccountSentTx(this.pxe, sentTx, this.getWallet());
|
|
138
130
|
}
|
|
139
131
|
/**
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
await ((await this.isDeployable()) ? this.deploy().wait(opts) : this.register());
|
|
132
|
+
* Deploys the account contract that backs this account if needed and awaits the tx to be mined.
|
|
133
|
+
* Uses the salt provided in the constructor or a randomly generated one. If no initialization
|
|
134
|
+
* is required it skips the transaction, and only registers the account in the PXE Service.
|
|
135
|
+
* @param opts - Options to wait for the tx to be mined.
|
|
136
|
+
* @returns A Wallet instance.
|
|
137
|
+
*/ async waitSetup(opts = DefaultWaitOpts) {
|
|
138
|
+
await (await this.isDeployable() ? this.deploy().wait(opts) : this.register());
|
|
148
139
|
return this.getWallet();
|
|
149
140
|
}
|
|
150
141
|
/**
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
return (await this.accountContract.getDeploymentArgs()) !== undefined;
|
|
142
|
+
* Returns whether this account contract has a constructor and needs deployment.
|
|
143
|
+
*/ async isDeployable() {
|
|
144
|
+
return await this.accountContract.getDeploymentArgs() !== undefined;
|
|
155
145
|
}
|
|
156
146
|
}
|
|
157
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWNjb3VudF9tYW5hZ2VyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQVksTUFBTSxzQkFBc0IsQ0FBQztBQUNqRSxPQUFPLEVBQW9DLFVBQVUsRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3ZILE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQU05QyxPQUFPLEVBQUUsZUFBZSxFQUFpQixNQUFNLHdCQUF3QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQzVGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBVWxFOzs7R0FHRztBQUNILE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFlBQ1UsR0FBUSxFQUNSLFNBQWEsRUFDYixlQUFnQyxFQUNoQyxRQUFxQztJQUM3Qzs7T0FFRztJQUNhLElBQVU7UUFQbEIsUUFBRyxHQUFILEdBQUcsQ0FBSztRQUNSLGNBQVMsR0FBVCxTQUFTLENBQUk7UUFDYixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsYUFBUSxHQUFSLFFBQVEsQ0FBNkI7UUFJN0IsU0FBSSxHQUFKLElBQUksQ0FBTTtJQUN6QixDQUFDO0lBRUosTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBUSxFQUFFLFNBQWEsRUFBRSxlQUFnQyxFQUFFLElBQVc7UUFDeEYsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25ELElBQUksR0FBRyxJQUFJLEtBQUss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
|
package/dest/api/abi.js
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
1
|
export { EventSelector, FunctionSelector } from '@aztec/foundation/abi';
|
|
2
2
|
export { loadContractArtifact, contractArtifactToBuffer, contractArtifactFromBuffer } from '@aztec/types/abi';
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9hYmkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnRCxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN0SCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsd0JBQXdCLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQyJ9
|
package/dest/api/account.js
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
1
|
export { AccountManager } from '../account_manager/index.js';
|
|
2
2
|
export { CompleteAddress } from '@aztec/circuit-types';
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvYWNjb3VudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDIn0=
|
package/dest/api/addresses.js
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
1
|
export { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
2
2
|
export { CompleteAddress } from '@aztec/circuits.js';
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzc2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS9hZGRyZXNzZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQyJ9
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { EthCheatCodes } from '@aztec/ethereum/eth-cheatcodes';
|
|
2
|
+
import { RollupCheatCodes } from '../index.js';
|
|
3
|
+
import { AztecCheatCodes } from '../utils/aztec_cheatcodes.js';
|
|
4
|
+
/**
|
|
5
|
+
* A class that provides utility functions for interacting with the chain.
|
|
6
|
+
*/ export class CheatCodes {
|
|
7
|
+
eth;
|
|
8
|
+
aztec;
|
|
9
|
+
rollup;
|
|
10
|
+
constructor(/** Cheat codes for L1.*/ eth, /** Cheat codes for Aztec L2. */ aztec, /** Cheat codes for the Aztec Rollup contract on L1. */ rollup){
|
|
11
|
+
this.eth = eth;
|
|
12
|
+
this.aztec = aztec;
|
|
13
|
+
this.rollup = rollup;
|
|
14
|
+
}
|
|
15
|
+
static async create(rpcUrl, pxe) {
|
|
16
|
+
const ethCheatCodes = new EthCheatCodes(rpcUrl);
|
|
17
|
+
const aztecCheatCodes = new AztecCheatCodes(pxe);
|
|
18
|
+
const rollupCheatCodes = new RollupCheatCodes(ethCheatCodes, await pxe.getNodeInfo().then((n)=>n.l1ContractAddresses));
|
|
19
|
+
return new CheatCodes(ethCheatCodes, aztecCheatCodes, rollupCheatCodes);
|
|
20
|
+
}
|
|
21
|
+
static createRollup(rpcUrl, addresses) {
|
|
22
|
+
const ethCheatCodes = new EthCheatCodes(rpcUrl);
|
|
23
|
+
return new RollupCheatCodes(ethCheatCodes, addresses);
|
|
24
|
+
}
|
|
25
|
+
}
|
package/dest/api/deployment.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
export { registerContractClass } from '../deployment/register_class.js';
|
|
2
2
|
export { broadcastPrivateFunction, broadcastUnconstrainedFunction } from '../deployment/broadcast_function.js';
|
|
3
3
|
export { deployInstance } from '../deployment/deploy_instance.js';
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95bWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvZGVwbG95bWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUMifQ==
|
package/dest/api/entrypoint.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
1
|
export * from '../entrypoint/entrypoint.js';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnlwb2ludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvZW50cnlwb2ludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDZCQUE2QixDQUFDIn0=
|
package/dest/api/eth_address.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
1
|
export { EthAddress } from '@aztec/foundation/eth-address';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXRoX2FkZHJlc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBpL2V0aF9hZGRyZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQyJ9
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
+
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
3
|
+
import { RollupAbi } from '@aztec/l1-artifacts';
|
|
4
|
+
import { getAddress, getContract } from 'viem';
|
|
5
|
+
/**
|
|
6
|
+
* Represents a watcher for a rollup contract.
|
|
7
|
+
*
|
|
8
|
+
* It started on a network like anvil where time traveling is allowed, and auto-mine is turned on
|
|
9
|
+
* it will periodically check if the current slot have already been filled, e.g., there was an L2
|
|
10
|
+
* block within the slot. And if so, it will time travel into the next slot.
|
|
11
|
+
*/ export class AnvilTestWatcher {
|
|
12
|
+
cheatcodes;
|
|
13
|
+
dateProvider;
|
|
14
|
+
isSandbox;
|
|
15
|
+
rollup;
|
|
16
|
+
filledRunningPromise;
|
|
17
|
+
mineIfOutdatedPromise;
|
|
18
|
+
logger;
|
|
19
|
+
constructor(cheatcodes, rollupAddress, publicClient, dateProvider){
|
|
20
|
+
this.cheatcodes = cheatcodes;
|
|
21
|
+
this.dateProvider = dateProvider;
|
|
22
|
+
this.isSandbox = false;
|
|
23
|
+
this.logger = createLogger(`aztecjs:utils:watcher`);
|
|
24
|
+
this.rollup = getContract({
|
|
25
|
+
address: getAddress(rollupAddress.toString()),
|
|
26
|
+
abi: RollupAbi,
|
|
27
|
+
client: publicClient
|
|
28
|
+
});
|
|
29
|
+
this.logger.debug(`Watcher created for rollup at ${rollupAddress}`);
|
|
30
|
+
}
|
|
31
|
+
setIsSandbox(isSandbox) {
|
|
32
|
+
this.isSandbox = isSandbox;
|
|
33
|
+
}
|
|
34
|
+
async start() {
|
|
35
|
+
if (this.filledRunningPromise) {
|
|
36
|
+
throw new Error('Watcher already watching for filled slot');
|
|
37
|
+
}
|
|
38
|
+
// If auto mining is not supported (e.g., we are on a real network), then we
|
|
39
|
+
// will simple do nothing. But if on an anvil or the like, this make sure that
|
|
40
|
+
// the sandbox and tests don't break because time is frozen and we never get to
|
|
41
|
+
// the next slot.
|
|
42
|
+
const isAutoMining = await this.cheatcodes.isAutoMining();
|
|
43
|
+
if (isAutoMining) {
|
|
44
|
+
this.filledRunningPromise = new RunningPromise(()=>this.warpTimeIfNeeded(), this.logger, 1000);
|
|
45
|
+
this.filledRunningPromise.start();
|
|
46
|
+
this.mineIfOutdatedPromise = new RunningPromise(()=>this.mineIfOutdated(), this.logger, 1000);
|
|
47
|
+
this.mineIfOutdatedPromise.start();
|
|
48
|
+
this.logger.info(`Watcher started for rollup at ${this.rollup.address}`);
|
|
49
|
+
} else {
|
|
50
|
+
this.logger.info(`Watcher not started because not auto mining`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async stop() {
|
|
54
|
+
await this.filledRunningPromise?.stop();
|
|
55
|
+
await this.mineIfOutdatedPromise?.stop();
|
|
56
|
+
}
|
|
57
|
+
async mineIfOutdated() {
|
|
58
|
+
// this doesn't apply to the sandbox, because we don't have a date provider in the sandbox
|
|
59
|
+
if (!this.dateProvider) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
const l1Time = await this.cheatcodes.timestamp() * 1000;
|
|
63
|
+
const wallTime = this.dateProvider.now();
|
|
64
|
+
// If the wall time is more than 24 seconds away from L1 time,
|
|
65
|
+
// mine a block and sync the clocks
|
|
66
|
+
if (Math.abs(wallTime - l1Time) > 24 * 1000) {
|
|
67
|
+
this.logger.warn(`Wall time is more than 24 seconds away from L1 time, mining a block and syncing clocks`);
|
|
68
|
+
await this.cheatcodes.evmMine();
|
|
69
|
+
const newL1Time = await this.cheatcodes.timestamp();
|
|
70
|
+
this.logger.info(`New L1 time: ${newL1Time}`);
|
|
71
|
+
this.dateProvider.setTime(newL1Time * 1000);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
async warpTimeIfNeeded() {
|
|
75
|
+
try {
|
|
76
|
+
const currentSlot = await this.rollup.read.getCurrentSlot();
|
|
77
|
+
const pendingBlockNumber = BigInt(await this.rollup.read.getPendingBlockNumber());
|
|
78
|
+
const blockLog = await this.rollup.read.getBlock([
|
|
79
|
+
pendingBlockNumber
|
|
80
|
+
]);
|
|
81
|
+
const nextSlotTimestamp = Number(await this.rollup.read.getTimestampForSlot([
|
|
82
|
+
currentSlot + 1n
|
|
83
|
+
]));
|
|
84
|
+
if (currentSlot === blockLog.slotNumber) {
|
|
85
|
+
// We should jump to the next slot
|
|
86
|
+
try {
|
|
87
|
+
await this.cheatcodes.warp(nextSlotTimestamp);
|
|
88
|
+
this.dateProvider?.setTime(nextSlotTimestamp * 1000);
|
|
89
|
+
} catch (e) {
|
|
90
|
+
this.logger.error(`Failed to warp to timestamp ${nextSlotTimestamp}: ${e}`);
|
|
91
|
+
}
|
|
92
|
+
this.logger.info(`Slot ${currentSlot} was filled, jumped to next slot`);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
// If we are not in sandbox, we don't need to warp time
|
|
96
|
+
if (!this.isSandbox) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const currentTimestamp = this.dateProvider?.now() ?? Date.now();
|
|
100
|
+
if (currentTimestamp > nextSlotTimestamp * 1000) {
|
|
101
|
+
try {
|
|
102
|
+
await this.cheatcodes.warp(nextSlotTimestamp);
|
|
103
|
+
this.dateProvider?.setTime(nextSlotTimestamp * 1000);
|
|
104
|
+
} catch (e) {
|
|
105
|
+
this.logger.error(`Failed to warp to timestamp ${nextSlotTimestamp}: ${e}`);
|
|
106
|
+
}
|
|
107
|
+
this.logger.info(`Slot ${currentSlot} was missed, jumped to next slot`);
|
|
108
|
+
}
|
|
109
|
+
} catch (err) {
|
|
110
|
+
this.logger.error('mineIfSlotFilled failed');
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { createLogger } from '@aztec/foundation/log';
|
|
2
|
+
/** Utility class that polls the chain on quick intervals and logs new L1 blocks, L2 blocks, and L2 proofs. */ export class ChainMonitor {
|
|
3
|
+
rollup;
|
|
4
|
+
logger;
|
|
5
|
+
intervalMs;
|
|
6
|
+
l1Client;
|
|
7
|
+
handle;
|
|
8
|
+
/** Current L1 block number */ l1BlockNumber;
|
|
9
|
+
/** Current L2 block number */ l2BlockNumber;
|
|
10
|
+
/** Current L2 proven block number */ l2ProvenBlockNumber;
|
|
11
|
+
constructor(rollup, logger = createLogger('aztecjs:utils:chain_monitor'), intervalMs = 200){
|
|
12
|
+
this.rollup = rollup;
|
|
13
|
+
this.logger = logger;
|
|
14
|
+
this.intervalMs = intervalMs;
|
|
15
|
+
this.l1Client = rollup.client;
|
|
16
|
+
}
|
|
17
|
+
start() {
|
|
18
|
+
if (this.handle) {
|
|
19
|
+
throw new Error('Chain monitor already started');
|
|
20
|
+
}
|
|
21
|
+
this.handle = setInterval(this.safeRun.bind(this), this.intervalMs);
|
|
22
|
+
}
|
|
23
|
+
stop() {
|
|
24
|
+
if (this.handle) {
|
|
25
|
+
clearInterval(this.handle);
|
|
26
|
+
this.handle = undefined;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
safeRun() {
|
|
30
|
+
void this.run().catch((error)=>{
|
|
31
|
+
this.logger.error('Error in chain monitor loop', error);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
async run() {
|
|
35
|
+
const newL1BlockNumber = Number(await this.l1Client.getBlockNumber({
|
|
36
|
+
cacheTime: 0
|
|
37
|
+
}));
|
|
38
|
+
if (this.l1BlockNumber === newL1BlockNumber) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
this.l1BlockNumber = newL1BlockNumber;
|
|
42
|
+
const block = await this.l1Client.getBlock({
|
|
43
|
+
blockNumber: BigInt(newL1BlockNumber),
|
|
44
|
+
includeTransactions: false
|
|
45
|
+
});
|
|
46
|
+
const timestamp = block.timestamp;
|
|
47
|
+
const timestampString = new Date(Number(timestamp) * 1000).toTimeString().split(' ')[0];
|
|
48
|
+
let msg = `L1 block ${newL1BlockNumber} mined at ${timestampString}`;
|
|
49
|
+
const newL2BlockNumber = Number(await this.rollup.getBlockNumber());
|
|
50
|
+
if (this.l2BlockNumber !== newL2BlockNumber) {
|
|
51
|
+
const epochNumber = await this.rollup.getEpochNumber(BigInt(newL2BlockNumber));
|
|
52
|
+
msg += ` with new L2 block ${newL2BlockNumber} for epoch ${epochNumber}`;
|
|
53
|
+
this.l2BlockNumber = newL2BlockNumber;
|
|
54
|
+
}
|
|
55
|
+
const newL2ProvenBlockNumber = Number(await this.rollup.getProvenBlockNumber());
|
|
56
|
+
if (this.l2ProvenBlockNumber !== newL2ProvenBlockNumber) {
|
|
57
|
+
const epochNumber = await this.rollup.getEpochNumber(BigInt(newL2ProvenBlockNumber));
|
|
58
|
+
msg += ` with proof up to L2 block ${newL2ProvenBlockNumber} for epoch ${epochNumber}`;
|
|
59
|
+
this.l2ProvenBlockNumber = newL2ProvenBlockNumber;
|
|
60
|
+
}
|
|
61
|
+
this.logger.info(msg, {
|
|
62
|
+
l1Timestamp: timestamp,
|
|
63
|
+
l1BlockNumber: this.l1BlockNumber,
|
|
64
|
+
l2SlotNumber: await this.rollup.getSlotNumber(),
|
|
65
|
+
l2BlockNumber: this.l2BlockNumber,
|
|
66
|
+
l2ProvenBlockNumber: this.l2ProvenBlockNumber
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|