@aztec/aztec.js 0.0.0-test.1 → 0.0.1-commit.b655e406
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/account.d.ts +60 -0
- package/dest/account/account.d.ts.map +1 -0
- package/dest/account/account.js +59 -0
- package/dest/account/{contract.d.ts → account_contract.d.ts} +16 -10
- package/dest/account/account_contract.d.ts.map +1 -0
- package/dest/account/{contract.js → account_contract.js} +7 -4
- package/dest/{wallet/account_wallet_with_private_key.d.ts → account/account_with_secret_key.d.ts} +7 -8
- package/dest/account/account_with_secret_key.d.ts.map +1 -0
- package/dest/{wallet/account_wallet_with_private_key.js → account/account_with_secret_key.js} +5 -5
- package/dest/account/index.d.ts +3 -7
- package/dest/account/index.d.ts.map +1 -1
- package/dest/account/index.js +2 -6
- package/dest/account/interface.d.ts +1 -13
- package/dest/account/interface.d.ts.map +1 -1
- package/dest/account/interface.js +1 -0
- package/dest/account/signerless_account.d.ts +24 -0
- package/dest/account/signerless_account.d.ts.map +1 -0
- package/dest/account/signerless_account.js +27 -0
- package/dest/api/abi.d.ts +2 -1
- package/dest/api/abi.d.ts.map +1 -1
- package/dest/api/abi.js +1 -1
- package/dest/api/account.d.ts +5 -2
- package/dest/api/account.d.ts.map +1 -1
- package/dest/api/account.js +3 -1
- package/dest/api/addresses.d.ts +1 -0
- package/dest/api/addresses.d.ts.map +1 -1
- package/dest/api/addresses.js +1 -0
- package/dest/api/authorization.d.ts +5 -0
- package/dest/api/authorization.d.ts.map +1 -0
- package/dest/api/authorization.js +4 -0
- package/dest/api/block.d.ts +3 -0
- package/dest/api/block.d.ts.map +1 -0
- package/dest/api/block.js +2 -0
- package/dest/{contract/index.d.ts → api/contract.d.ts} +15 -11
- package/dest/api/contract.d.ts.map +1 -0
- package/dest/{contract/index.js → api/contract.js} +14 -10
- package/dest/api/crypto.d.ts +2 -0
- package/dest/api/crypto.d.ts.map +1 -0
- package/dest/api/crypto.js +1 -0
- package/dest/api/deployment.d.ts +4 -3
- package/dest/api/deployment.d.ts.map +1 -1
- package/dest/api/deployment.js +4 -3
- package/dest/api/ethereum.d.ts +2 -0
- package/dest/api/ethereum.d.ts.map +1 -0
- package/dest/api/ethereum.js +1 -0
- package/dest/api/events.d.ts +12 -0
- package/dest/api/events.d.ts.map +1 -0
- package/dest/api/events.js +30 -0
- package/dest/api/fee.d.ts +1 -1
- package/dest/api/fee.d.ts.map +1 -1
- package/dest/api/fee.js +1 -1
- package/dest/api/fee_testing.d.ts +2 -0
- package/dest/api/fee_testing.d.ts.map +1 -0
- package/dest/api/fee_testing.js +1 -0
- package/dest/api/keys.d.ts +4 -0
- package/dest/api/keys.d.ts.map +1 -0
- package/dest/api/keys.js +3 -0
- package/dest/api/log.d.ts +1 -0
- package/dest/api/log.d.ts.map +1 -1
- package/dest/api/log.js +1 -0
- package/dest/api/messaging.d.ts +3 -0
- package/dest/api/messaging.d.ts.map +1 -0
- package/dest/api/messaging.js +2 -0
- package/dest/api/node.d.ts +21 -0
- package/dest/api/node.d.ts.map +1 -0
- package/dest/api/node.js +18 -0
- package/dest/api/note.d.ts +2 -0
- package/dest/api/note.d.ts.map +1 -0
- package/dest/api/note.js +1 -0
- package/dest/api/protocol.d.ts +3 -0
- package/dest/api/protocol.d.ts.map +1 -0
- package/dest/api/protocol.js +2 -0
- package/dest/api/trees.d.ts +3 -0
- package/dest/api/trees.d.ts.map +1 -0
- package/dest/api/trees.js +2 -0
- package/dest/api/tx.d.ts +2 -0
- package/dest/api/tx.d.ts.map +1 -0
- package/dest/api/tx.js +1 -0
- package/dest/api/utils.d.ts +13 -0
- package/dest/api/utils.d.ts.map +1 -0
- package/dest/api/utils.js +12 -0
- package/dest/api/wallet.d.ts +4 -1
- package/dest/api/wallet.d.ts.map +1 -1
- package/dest/api/wallet.js +4 -1
- package/dest/authorization/call_authorization_request.d.ts +67 -0
- package/dest/authorization/call_authorization_request.d.ts.map +1 -0
- package/dest/authorization/call_authorization_request.js +49 -0
- package/dest/contract/base_contract_interaction.d.ts +16 -79
- package/dest/contract/base_contract_interaction.d.ts.map +1 -1
- package/dest/contract/base_contract_interaction.js +15 -128
- package/dest/contract/batch_call.d.ts +13 -14
- package/dest/contract/batch_call.d.ts.map +1 -1
- package/dest/contract/batch_call.js +60 -60
- package/dest/contract/checker.d.ts +1 -1
- package/dest/contract/checker.d.ts.map +1 -1
- package/dest/contract/checker.js +2 -2
- package/dest/contract/contract.d.ts +7 -6
- package/dest/contract/contract.d.ts.map +1 -1
- package/dest/contract/contract.js +7 -16
- package/dest/contract/contract_base.d.ts +3 -9
- package/dest/contract/contract_base.d.ts.map +1 -1
- package/dest/contract/contract_base.js +2 -2
- package/dest/contract/contract_function_interaction.d.ts +52 -44
- package/dest/contract/contract_function_interaction.d.ts.map +1 -1
- package/dest/contract/contract_function_interaction.js +75 -74
- package/dest/contract/deploy_method.d.ts +102 -57
- package/dest/contract/deploy_method.d.ts.map +1 -1
- package/dest/contract/deploy_method.js +122 -132
- package/dest/contract/deploy_sent_tx.d.ts +3 -5
- package/dest/contract/deploy_sent_tx.d.ts.map +1 -1
- package/dest/contract/deploy_sent_tx.js +10 -13
- package/dest/contract/get_gas_limits.d.ts +5 -6
- package/dest/contract/get_gas_limits.d.ts.map +1 -1
- package/dest/contract/get_gas_limits.js +9 -3
- package/dest/contract/interaction_options.d.ts +114 -0
- package/dest/contract/interaction_options.d.ts.map +1 -0
- package/dest/contract/interaction_options.js +52 -0
- package/dest/contract/protocol_contracts.d.ts +6 -6
- package/dest/contract/protocol_contracts.d.ts.map +1 -1
- package/dest/contract/protocol_contracts.js +7 -7
- package/dest/contract/sent_tx.d.ts +8 -18
- package/dest/contract/sent_tx.d.ts.map +1 -1
- package/dest/contract/sent_tx.js +30 -42
- package/dest/contract/unsafe_contract.d.ts +1 -1
- package/dest/contract/unsafe_contract.d.ts.map +1 -1
- package/dest/contract/wait_for_proven.d.ts +17 -0
- package/dest/contract/wait_for_proven.d.ts.map +1 -0
- package/dest/contract/wait_for_proven.js +17 -0
- 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 +27 -23
- package/dest/deployment/contract_deployer.d.ts +1 -1
- package/dest/deployment/contract_deployer.d.ts.map +1 -1
- package/dest/deployment/publish_class.d.ts +6 -0
- package/dest/deployment/publish_class.d.ts.map +1 -0
- package/dest/deployment/publish_class.js +17 -0
- package/dest/deployment/publish_instance.d.ts +10 -0
- package/dest/deployment/publish_instance.d.ts.map +1 -0
- package/dest/deployment/publish_instance.js +11 -0
- package/dest/{api/ethereum → ethereum}/portal_manager.d.ts +29 -25
- package/dest/ethereum/portal_manager.d.ts.map +1 -0
- package/dest/{api/ethereum → ethereum}/portal_manager.js +106 -73
- package/dest/fee/fee_juice_payment_method_with_claim.d.ts +16 -11
- package/dest/fee/fee_juice_payment_method_with_claim.d.ts.map +1 -1
- package/dest/fee/fee_juice_payment_method_with_claim.js +26 -16
- package/dest/fee/fee_payment_method.d.ts +11 -7
- package/dest/fee/fee_payment_method.d.ts.map +1 -1
- package/dest/fee/private_fee_payment_method.d.ts +25 -8
- package/dest/fee/private_fee_payment_method.d.ts.map +1 -1
- package/dest/fee/private_fee_payment_method.js +43 -21
- package/dest/fee/public_fee_payment_method.d.ts +26 -9
- package/dest/fee/public_fee_payment_method.d.ts.map +1 -1
- package/dest/fee/public_fee_payment_method.js +45 -23
- package/dest/fee/sponsored_fee_payment.d.ts +17 -0
- package/dest/fee/sponsored_fee_payment.d.ts.map +1 -0
- package/dest/fee/sponsored_fee_payment.js +34 -0
- package/dest/utils/abi_types.d.ts +0 -2
- package/dest/utils/abi_types.d.ts.map +1 -1
- package/dest/utils/authwit.d.ts +81 -24
- package/dest/utils/authwit.d.ts.map +1 -1
- package/dest/utils/authwit.js +226 -40
- package/dest/utils/cross_chain.d.ts +24 -0
- package/dest/utils/cross_chain.d.ts.map +1 -0
- package/dest/utils/cross_chain.js +30 -0
- package/dest/utils/fee_juice.d.ts +3 -2
- package/dest/utils/fee_juice.d.ts.map +1 -1
- package/dest/utils/fee_juice.js +3 -2
- package/dest/utils/field_compressed_string.d.ts.map +1 -1
- package/dest/utils/node.d.ts.map +1 -1
- package/dest/utils/node.js +1 -1
- package/dest/utils/pub_key.d.ts.map +1 -1
- package/dest/utils/pub_key.js +1 -2
- package/dest/wallet/account_entrypoint_meta_payment_method.d.ts +34 -0
- package/dest/wallet/account_entrypoint_meta_payment_method.d.ts.map +1 -0
- package/dest/wallet/account_entrypoint_meta_payment_method.js +76 -0
- package/dest/wallet/account_manager.d.ts +69 -0
- package/dest/wallet/account_manager.d.ts.map +1 -0
- package/dest/wallet/account_manager.js +113 -0
- package/dest/wallet/base_wallet.d.ts +81 -63
- package/dest/wallet/base_wallet.d.ts.map +1 -1
- package/dest/wallet/base_wallet.js +221 -106
- package/dest/wallet/deploy_account_method.d.ts +52 -0
- package/dest/wallet/deploy_account_method.d.ts.map +1 -0
- package/dest/wallet/deploy_account_method.js +77 -0
- package/dest/wallet/index.d.ts +3 -16
- package/dest/wallet/index.d.ts.map +1 -1
- package/dest/wallet/index.js +3 -20
- package/dest/wallet/wallet.d.ts +2478 -0
- package/dest/wallet/wallet.d.ts.map +1 -0
- package/dest/wallet/wallet.js +202 -0
- package/package.json +40 -32
- package/src/account/account.ts +97 -0
- package/src/account/{contract.ts → account_contract.ts} +24 -13
- package/src/{wallet/account_wallet_with_private_key.ts → account/account_with_secret_key.ts} +6 -8
- package/src/account/index.ts +3 -7
- package/src/account/interface.ts +1 -12
- package/src/account/signerless_account.ts +46 -0
- package/src/api/abi.ts +26 -0
- package/src/api/account.ts +5 -9
- package/src/api/addresses.ts +1 -0
- package/src/api/authorization.ts +14 -0
- package/src/api/block.ts +2 -0
- package/src/{contract/index.ts → api/contract.ts} +37 -13
- package/src/api/crypto.ts +1 -0
- package/src/api/deployment.ts +4 -3
- package/src/api/ethereum.ts +10 -0
- package/src/api/events.ts +44 -0
- package/src/api/fee.ts +1 -1
- package/src/api/fee_testing.ts +1 -0
- package/src/api/keys.ts +8 -0
- package/src/api/log.ts +1 -0
- package/src/api/messaging.ts +2 -0
- package/src/api/node.ts +20 -0
- package/src/api/note.ts +1 -0
- package/src/api/protocol.ts +2 -0
- package/src/api/trees.ts +2 -0
- package/src/api/tx.ts +11 -0
- package/src/api/utils.ts +14 -0
- package/src/api/wallet.ts +33 -5
- package/src/authorization/call_authorization_request.ts +63 -0
- package/src/contract/base_contract_interaction.ts +24 -166
- package/src/contract/batch_call.ts +81 -49
- package/src/contract/checker.ts +8 -3
- package/src/contract/contract.ts +8 -17
- package/src/contract/contract_base.ts +4 -11
- package/src/contract/contract_function_interaction.ts +136 -106
- package/src/contract/deploy_method.ts +199 -129
- package/src/contract/deploy_sent_tx.ts +9 -15
- package/src/contract/get_gas_limits.ts +15 -8
- package/src/contract/interaction_options.ts +169 -0
- package/src/contract/protocol_contracts.ts +10 -10
- package/src/contract/sent_tx.ts +40 -51
- package/src/contract/unsafe_contract.ts +1 -1
- package/src/contract/wait_for_proven.ts +38 -0
- package/src/deployment/broadcast_function.ts +57 -57
- package/src/deployment/contract_deployer.ts +1 -1
- package/src/deployment/publish_class.ts +34 -0
- package/src/deployment/publish_instance.ts +26 -0
- package/src/{api/ethereum → ethereum}/portal_manager.ts +120 -74
- package/src/fee/fee_juice_payment_method_with_claim.ts +46 -33
- package/src/fee/fee_payment_method.ts +11 -7
- package/src/fee/private_fee_payment_method.ts +77 -57
- package/src/fee/public_fee_payment_method.ts +91 -67
- package/src/fee/sponsored_fee_payment.ts +44 -0
- package/src/utils/authwit.ts +255 -53
- package/src/utils/cross_chain.ts +53 -0
- package/src/utils/fee_juice.ts +4 -4
- package/src/utils/node.ts +1 -1
- package/src/utils/pub_key.ts +1 -2
- package/src/wallet/account_entrypoint_meta_payment_method.ts +105 -0
- package/src/wallet/account_manager.ts +154 -0
- package/src/wallet/base_wallet.ts +295 -143
- package/src/wallet/deploy_account_method.ts +125 -0
- package/src/wallet/index.ts +3 -33
- package/src/wallet/wallet.ts +362 -0
- package/dest/account/contract.d.ts.map +0 -1
- package/dest/account/wallet.d.ts +0 -11
- package/dest/account/wallet.d.ts.map +0 -1
- package/dest/account/wallet.js +0 -3
- 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_method.js +0 -43
- package/dest/account_manager/deploy_account_sent_tx.d.ts +0 -30
- package/dest/account_manager/deploy_account_sent_tx.d.ts.map +0 -1
- package/dest/account_manager/deploy_account_sent_tx.js +0 -29
- package/dest/account_manager/index.d.ts +0 -108
- package/dest/account_manager/index.d.ts.map +0 -1
- package/dest/account_manager/index.js +0 -159
- package/dest/api/cheat_codes.d.ts +0 -26
- package/dest/api/cheat_codes.d.ts.map +0 -1
- package/dest/api/cheat_codes.js +0 -25
- package/dest/api/entrypoint.d.ts +0 -2
- package/dest/api/entrypoint.d.ts.map +0 -1
- package/dest/api/entrypoint.js +0 -1
- package/dest/api/ethereum/anvil_test_watcher.d.ts +0 -32
- package/dest/api/ethereum/anvil_test_watcher.d.ts.map +0 -1
- package/dest/api/ethereum/anvil_test_watcher.js +0 -133
- package/dest/api/ethereum/chain_monitor.d.ts +0 -25
- package/dest/api/ethereum/chain_monitor.d.ts.map +0 -1
- package/dest/api/ethereum/chain_monitor.js +0 -74
- package/dest/api/ethereum/cheat_codes.d.ts +0 -63
- package/dest/api/ethereum/cheat_codes.d.ts.map +0 -1
- package/dest/api/ethereum/cheat_codes.js +0 -162
- package/dest/api/ethereum/index.d.ts +0 -7
- package/dest/api/ethereum/index.d.ts.map +0 -1
- package/dest/api/ethereum/index.js +0 -6
- package/dest/api/ethereum/l1_contracts.d.ts +0 -3
- package/dest/api/ethereum/l1_contracts.d.ts.map +0 -1
- package/dest/api/ethereum/l1_contracts.js +0 -13
- package/dest/api/ethereum/portal_manager.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/interfaces/pxe.js +0 -1
- package/dest/api/log_id.d.ts +0 -2
- package/dest/api/log_id.d.ts.map +0 -1
- package/dest/api/log_id.js +0 -1
- package/dest/api/tx_hash.d.ts +0 -2
- package/dest/api/tx_hash.d.ts.map +0 -1
- package/dest/api/tx_hash.js +0 -1
- package/dest/contract/deploy_proven_tx.d.ts +0 -21
- package/dest/contract/deploy_proven_tx.d.ts.map +0 -1
- package/dest/contract/deploy_proven_tx.js +0 -19
- package/dest/contract/index.d.ts.map +0 -1
- package/dest/contract/proven_tx.d.ts +0 -17
- package/dest/contract/proven_tx.d.ts.map +0 -1
- package/dest/contract/proven_tx.js +0 -22
- package/dest/deployment/deploy_instance.d.ts +0 -10
- package/dest/deployment/deploy_instance.d.ts.map +0 -1
- package/dest/deployment/deploy_instance.js +0 -14
- package/dest/deployment/index.d.ts +0 -2
- package/dest/deployment/index.d.ts.map +0 -1
- package/dest/deployment/index.js +0 -1
- package/dest/deployment/register_class.d.ts +0 -6
- package/dest/deployment/register_class.d.ts.map +0 -1
- package/dest/deployment/register_class.js +0 -22
- package/dest/entrypoint/default_entrypoint.d.ts +0 -12
- package/dest/entrypoint/default_entrypoint.d.ts.map +0 -1
- package/dest/entrypoint/default_entrypoint.js +0 -28
- 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/default_multi_call_entrypoint.js +0 -130
- package/dest/entrypoint/entrypoint.d.ts +0 -35
- package/dest/entrypoint/entrypoint.d.ts.map +0 -1
- package/dest/entrypoint/entrypoint.js +0 -4
- package/dest/entrypoint/payload.d.ts +0 -128
- package/dest/entrypoint/payload.d.ts.map +0 -1
- package/dest/entrypoint/payload.js +0 -143
- 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.js +0 -20
- package/dest/index.d.ts +0 -66
- package/dest/index.d.ts.map +0 -1
- package/dest/index.js +0 -69
- package/dest/rpc_clients/index.d.ts +0 -3
- package/dest/rpc_clients/index.d.ts.map +0 -1
- package/dest/rpc_clients/index.js +0 -2
- package/dest/rpc_clients/node/index.d.ts +0 -12
- package/dest/rpc_clients/node/index.d.ts.map +0 -1
- package/dest/rpc_clients/node/index.js +0 -78
- package/dest/rpc_clients/pxe_client.d.ts +0 -10
- package/dest/rpc_clients/pxe_client.d.ts.map +0 -1
- package/dest/rpc_clients/pxe_client.js +0 -23
- package/dest/utils/aztec_cheatcodes.d.ts +0 -59
- package/dest/utils/aztec_cheatcodes.d.ts.map +0 -1
- package/dest/utils/aztec_cheatcodes.js +0 -62
- package/dest/utils/index.d.ts +0 -8
- package/dest/utils/index.d.ts.map +0 -1
- package/dest/utils/index.js +0 -6
- package/dest/utils/pxe.d.ts +0 -4
- package/dest/utils/pxe.d.ts.map +0 -1
- package/dest/utils/pxe.js +0 -14
- package/dest/wallet/account_wallet.d.ts +0 -76
- package/dest/wallet/account_wallet.d.ts.map +0 -1
- package/dest/wallet/account_wallet.js +0 -231
- package/dest/wallet/account_wallet_with_private_key.d.ts.map +0 -1
- package/dest/wallet/signerless_wallet.d.ts +0 -25
- package/dest/wallet/signerless_wallet.d.ts.map +0 -1
- package/dest/wallet/signerless_wallet.js +0 -36
- package/src/account/wallet.ts +0 -13
- package/src/account_manager/deploy_account_method.ts +0 -86
- package/src/account_manager/deploy_account_sent_tx.ts +0 -42
- package/src/account_manager/index.ts +0 -229
- package/src/api/cheat_codes.ts +0 -35
- package/src/api/entrypoint.ts +0 -1
- package/src/api/ethereum/anvil_test_watcher.ts +0 -158
- package/src/api/ethereum/chain_monitor.ts +0 -88
- package/src/api/ethereum/cheat_codes.ts +0 -184
- package/src/api/ethereum/index.ts +0 -19
- package/src/api/ethereum/l1_contracts.ts +0 -21
- package/src/api/interfaces/pxe.ts +0 -1
- package/src/api/log_id.ts +0 -1
- package/src/api/tx_hash.ts +0 -1
- package/src/contract/deploy_proven_tx.ts +0 -34
- package/src/contract/proven_tx.ts +0 -42
- package/src/deployment/deploy_instance.ts +0 -31
- package/src/deployment/index.ts +0 -1
- package/src/deployment/register_class.ts +0 -44
- package/src/entrypoint/default_entrypoint.ts +0 -39
- package/src/entrypoint/default_multi_call_entrypoint.ts +0 -93
- package/src/entrypoint/entrypoint.ts +0 -39
- package/src/entrypoint/payload.ts +0 -238
- package/src/fee/fee_juice_payment_method.ts +0 -26
- package/src/index.ts +0 -106
- package/src/rpc_clients/index.ts +0 -2
- package/src/rpc_clients/node/index.ts +0 -77
- package/src/rpc_clients/pxe_client.ts +0 -25
- package/src/utils/aztec_cheatcodes.ts +0 -77
- package/src/utils/index.ts +0 -21
- package/src/utils/pxe.ts +0 -17
- package/src/wallet/account_wallet.ts +0 -242
- package/src/wallet/signerless_wallet.ts +0 -52
|
@@ -1,146 +1,173 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import { ExecutionPayload, mergeExecutionPayloads } from '@aztec/entrypoints/payload';
|
|
2
|
+
import { Fr } from '@aztec/foundation/fields';
|
|
3
|
+
import { type ContractArtifact, type FunctionAbi, type FunctionArtifact, getInitializer } from '@aztec/stdlib/abi';
|
|
4
|
+
import type { AuthWitness } from '@aztec/stdlib/auth-witness';
|
|
3
5
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
6
|
import {
|
|
5
7
|
type ContractInstanceWithAddress,
|
|
6
8
|
computePartialAddress,
|
|
7
9
|
getContractClassFromArtifact,
|
|
8
|
-
|
|
10
|
+
getContractInstanceFromInstantiationParams,
|
|
9
11
|
} from '@aztec/stdlib/contract';
|
|
10
|
-
import type { GasSettings } from '@aztec/stdlib/gas';
|
|
11
12
|
import type { PublicKeys } from '@aztec/stdlib/keys';
|
|
12
|
-
import type
|
|
13
|
+
import { type Capsule, type TxProfileResult, collectOffchainEffects } from '@aztec/stdlib/tx';
|
|
13
14
|
|
|
14
|
-
import
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import
|
|
18
|
-
import { BaseContractInteraction, type SendMethodOptions } from './base_contract_interaction.js';
|
|
15
|
+
import { publishContractClass } from '../deployment/publish_class.js';
|
|
16
|
+
import { publishInstance } from '../deployment/publish_instance.js';
|
|
17
|
+
import type { Wallet } from '../wallet/wallet.js';
|
|
18
|
+
import { BaseContractInteraction } from './base_contract_interaction.js';
|
|
19
19
|
import type { Contract } from './contract.js';
|
|
20
20
|
import type { ContractBase } from './contract_base.js';
|
|
21
21
|
import { ContractFunctionInteraction } from './contract_function_interaction.js';
|
|
22
|
-
import { DeployProvenTx } from './deploy_proven_tx.js';
|
|
23
22
|
import { DeploySentTx } from './deploy_sent_tx.js';
|
|
23
|
+
import { getGasLimits } from './get_gas_limits.js';
|
|
24
|
+
import {
|
|
25
|
+
type ProfileInteractionOptions,
|
|
26
|
+
type RequestInteractionOptions,
|
|
27
|
+
type SendInteractionOptions,
|
|
28
|
+
type SimulationInteractionFeeOptions,
|
|
29
|
+
type SimulationReturn,
|
|
30
|
+
toProfileOptions,
|
|
31
|
+
toSendOptions,
|
|
32
|
+
toSimulateOptions,
|
|
33
|
+
} from './interaction_options.js';
|
|
24
34
|
|
|
25
35
|
/**
|
|
26
36
|
* Options for deploying a contract on the Aztec network.
|
|
27
|
-
* Allows specifying a contract address salt
|
|
37
|
+
* Allows specifying a contract address salt and different options to tweak contract publication
|
|
38
|
+
* and initialization
|
|
28
39
|
*/
|
|
29
|
-
|
|
30
|
-
export type DeployOptions = {
|
|
40
|
+
export type RequestDeployOptions = RequestInteractionOptions & {
|
|
31
41
|
/** An optional salt value used to deterministically calculate the contract address. */
|
|
32
42
|
contractAddressSalt?: Fr;
|
|
33
|
-
/**
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
43
|
+
/**
|
|
44
|
+
* Deployer address that will be used for the deployed contract's address computation.
|
|
45
|
+
* If set to 0, the sender's address won't be mixed in
|
|
46
|
+
*/
|
|
47
|
+
deployer?: AztecAddress;
|
|
48
|
+
/** Skip contract class publication. */
|
|
49
|
+
skipClassPublication?: boolean;
|
|
50
|
+
/** Skip publication, instead just privately initialize the contract. */
|
|
51
|
+
skipInstancePublication?: boolean;
|
|
39
52
|
/** Skip contract initialization. */
|
|
40
53
|
skipInitialization?: boolean;
|
|
41
|
-
}
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Extends the deployment options with the required parameters to send the transaction
|
|
58
|
+
*/
|
|
59
|
+
export type DeployOptions = Omit<RequestDeployOptions, 'deployer'> & {
|
|
60
|
+
/**
|
|
61
|
+
* Set to true to *not* include the sender in the address computation. This option
|
|
62
|
+
* is mutually exclusive with "deployer"
|
|
63
|
+
*/
|
|
64
|
+
universalDeploy?: boolean;
|
|
65
|
+
} & Pick<SendInteractionOptions, 'from' | 'fee'>;
|
|
42
66
|
// docs:end:deploy_options
|
|
43
67
|
// TODO(@spalladino): Add unit tests for this class!
|
|
44
68
|
|
|
45
69
|
/**
|
|
46
|
-
*
|
|
47
|
-
*
|
|
70
|
+
* Options for simulating the deployment of a contract
|
|
71
|
+
* Allows skipping certain validations and computing gas estimations
|
|
72
|
+
*/
|
|
73
|
+
export type SimulateDeployOptions = Omit<DeployOptions, 'fee'> & {
|
|
74
|
+
/** The fee options for the transaction. */
|
|
75
|
+
fee?: SimulationInteractionFeeOptions;
|
|
76
|
+
/** Simulate without checking for the validity of the resulting transaction,
|
|
77
|
+
* e.g. whether it emits any existing nullifiers. */
|
|
78
|
+
skipTxValidation?: boolean;
|
|
79
|
+
/** Whether to ensure the fee payer is not empty and has enough balance to pay for the fee. */
|
|
80
|
+
skipFeeEnforcement?: boolean;
|
|
81
|
+
/** Whether to include metadata such as offchain effects and performance statistics
|
|
82
|
+
* (e.g. timing information of the different circuits and oracles) in
|
|
83
|
+
* the simulation result, instead of just the return value of the function */
|
|
84
|
+
includeMetadata?: boolean;
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Contract interaction for deployment.
|
|
89
|
+
* Handles class publication, instance publication, and initialization of the contract.
|
|
90
|
+
*
|
|
91
|
+
* Note that for some contracts, a tx is not required as part of its "creation":
|
|
92
|
+
* If there are no public functions, and if there are no initialization functions,
|
|
93
|
+
* then technically the contract has already been "created", and all of the contract's
|
|
94
|
+
* functions (private and utility) can be interacted-with immediately, without any
|
|
95
|
+
* "deployment tx".
|
|
96
|
+
*
|
|
97
|
+
* Extends the BaseContractInteraction class.
|
|
48
98
|
*/
|
|
49
99
|
export class DeployMethod<TContract extends ContractBase = Contract> extends BaseContractInteraction {
|
|
50
100
|
/** The contract instance to be deployed. */
|
|
51
101
|
private instance?: ContractInstanceWithAddress = undefined;
|
|
52
102
|
|
|
53
103
|
/** Constructor function to call. */
|
|
54
|
-
private constructorArtifact:
|
|
104
|
+
private constructorArtifact: FunctionAbi | undefined;
|
|
55
105
|
|
|
56
106
|
constructor(
|
|
57
107
|
private publicKeys: PublicKeys,
|
|
58
108
|
wallet: Wallet,
|
|
59
|
-
|
|
60
|
-
|
|
109
|
+
protected artifact: ContractArtifact,
|
|
110
|
+
protected postDeployCtor: (address: AztecAddress, wallet: Wallet) => Promise<TContract>,
|
|
61
111
|
private args: any[] = [],
|
|
62
112
|
constructorNameOrArtifact?: string | FunctionArtifact,
|
|
113
|
+
authWitnesses: AuthWitness[] = [],
|
|
114
|
+
capsules: Capsule[] = [],
|
|
63
115
|
) {
|
|
64
|
-
super(wallet);
|
|
116
|
+
super(wallet, authWitnesses, capsules);
|
|
65
117
|
this.constructorArtifact = getInitializer(artifact, constructorNameOrArtifact);
|
|
66
118
|
}
|
|
67
119
|
|
|
68
120
|
/**
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
* later sent using the `send()` method.
|
|
73
|
-
*
|
|
74
|
-
* @param options - An object containing optional deployment settings, contractAddressSalt, and from.
|
|
75
|
-
* @returns A Promise resolving to an object containing the signed transaction data and other relevant information.
|
|
121
|
+
* Returns the execution payload that allows this operation to happen on chain.
|
|
122
|
+
* @param options - Configuration options.
|
|
123
|
+
* @returns The execution payload for this operation
|
|
76
124
|
*/
|
|
77
|
-
public async
|
|
78
|
-
|
|
79
|
-
}
|
|
125
|
+
public async request(options?: RequestDeployOptions): Promise<ExecutionPayload> {
|
|
126
|
+
const publication = await this.getPublicationExecutionPayload(options);
|
|
80
127
|
|
|
81
|
-
|
|
82
|
-
// derived ContractInteractions is confusing. We should unify the flow of all ContractInteractions.
|
|
128
|
+
await this.wallet.registerContract(await this.getInstance(options), this.artifact);
|
|
83
129
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const deployment = await this.getDeploymentFunctionCalls(options);
|
|
94
|
-
|
|
95
|
-
// NOTE: MEGA HACK. Remove with #10007
|
|
96
|
-
// register the contract after generating deployment function calls in order to publicly register the class and (optioanlly) emit its bytecode
|
|
97
|
-
//
|
|
98
|
-
// TODO: Should we add the contracts to the DB here, or once the tx has been sent or mined?
|
|
99
|
-
// Note that we need to run this registerContract here so it's available when computeFeeOptionsFromEstimatedGas
|
|
100
|
-
// runs, since it needs the contract to have been registered in order to estimate gas for its initialization,
|
|
101
|
-
// in case the initializer is public. This hints at the need of having "transient" contracts scoped to a
|
|
102
|
-
// simulation, so we can run the simulation with a set of contracts, but only "commit" them to the wallet
|
|
103
|
-
// once this tx has gone through.
|
|
104
|
-
await this.wallet.registerContract({ artifact: this.artifact, instance: await this.getInstance(options) });
|
|
105
|
-
|
|
106
|
-
const bootstrap = await this.getInitializeFunctionCalls(options);
|
|
107
|
-
|
|
108
|
-
if (deployment.calls.length + bootstrap.calls.length === 0) {
|
|
109
|
-
throw new Error(`No function calls needed to deploy contract ${this.artifact.name}`);
|
|
130
|
+
const initialization = await this.getInitializationExecutionPayload(options);
|
|
131
|
+
const feeExecutionPayload = options?.fee?.paymentMethod
|
|
132
|
+
? await options.fee.paymentMethod.getExecutionPayload()
|
|
133
|
+
: undefined;
|
|
134
|
+
const finalExecutionPayload = feeExecutionPayload
|
|
135
|
+
? mergeExecutionPayloads([feeExecutionPayload, publication, initialization])
|
|
136
|
+
: mergeExecutionPayloads([publication, initialization]);
|
|
137
|
+
if (!finalExecutionPayload.calls.length) {
|
|
138
|
+
throw new Error(`No transactions are needed to publish or initialize contract ${this.artifact.name}`);
|
|
110
139
|
}
|
|
111
140
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
const hashedArguments = [...(deployment.hashedArguments ?? []), ...(bootstrap.hashedArguments ?? [])];
|
|
115
|
-
const capsules = [...(deployment.capsules ?? []), ...(bootstrap.capsules ?? [])];
|
|
116
|
-
const { cancellable, nonce, fee: userFee } = options;
|
|
117
|
-
|
|
118
|
-
const request = { calls, authWitnesses, hashedArguments, capsules, cancellable, fee: userFee, nonce };
|
|
141
|
+
return finalExecutionPayload;
|
|
142
|
+
}
|
|
119
143
|
|
|
120
|
-
|
|
121
|
-
return {
|
|
144
|
+
convertDeployOptionsToRequestOptions(options: DeployOptions): RequestDeployOptions {
|
|
145
|
+
return {
|
|
146
|
+
...options,
|
|
147
|
+
deployer: !options?.universalDeploy ? options.from : undefined,
|
|
148
|
+
};
|
|
122
149
|
}
|
|
123
150
|
|
|
124
151
|
/**
|
|
125
|
-
*
|
|
152
|
+
* Adds this contract to the wallet and returns the Contract object.
|
|
126
153
|
* @param options - Deployment options.
|
|
127
154
|
*/
|
|
128
|
-
public async register(options
|
|
155
|
+
public async register(options?: RequestDeployOptions): Promise<TContract> {
|
|
129
156
|
const instance = await this.getInstance(options);
|
|
130
|
-
await this.wallet.registerContract(
|
|
157
|
+
await this.wallet.registerContract(instance, this.artifact);
|
|
131
158
|
return this.postDeployCtor(instance.address, this.wallet);
|
|
132
159
|
}
|
|
133
160
|
|
|
134
161
|
/**
|
|
135
|
-
* Returns
|
|
136
|
-
*
|
|
137
|
-
*
|
|
162
|
+
* Returns an execution payload for:
|
|
163
|
+
* - publication of the contract class and
|
|
164
|
+
* - publication of the contract instance to enable public execution
|
|
165
|
+
* depending on the provided options.
|
|
166
|
+
* @param options - Contract creation options.
|
|
167
|
+
* @returns An execution payload with potentially calls (and bytecode capsule) to the class registry and instance registry.
|
|
138
168
|
*/
|
|
139
|
-
protected async
|
|
140
|
-
|
|
141
|
-
): Promise<Pick<ExecutionRequestInit, 'calls' | 'authWitnesses' | 'hashedArguments' | 'capsules'>> {
|
|
142
|
-
const calls: FunctionCall[] = [];
|
|
143
|
-
const capsules: Capsule[] = [];
|
|
169
|
+
protected async getPublicationExecutionPayload(options?: RequestDeployOptions): Promise<ExecutionPayload> {
|
|
170
|
+
const calls: ExecutionPayload[] = [];
|
|
144
171
|
|
|
145
172
|
// Set contract instance object so it's available for populating the DeploySendTx object
|
|
146
173
|
const instance = await this.getInstance(options);
|
|
@@ -154,30 +181,31 @@ export class DeployMethod<TContract extends ContractBase = Contract> extends Bas
|
|
|
154
181
|
);
|
|
155
182
|
}
|
|
156
183
|
|
|
157
|
-
//
|
|
158
|
-
if (!options
|
|
184
|
+
// Publish the contract class if it hasn't been published already.
|
|
185
|
+
if (!options?.skipClassPublication) {
|
|
159
186
|
if ((await this.wallet.getContractClassMetadata(contractClass.id)).isContractClassPubliclyRegistered) {
|
|
160
187
|
this.log.debug(
|
|
161
|
-
`Skipping
|
|
188
|
+
`Skipping publication of already-registered contract class ${contractClass.id.toString()} for ${instance.address.toString()}`,
|
|
162
189
|
);
|
|
163
190
|
} else {
|
|
164
191
|
this.log.info(
|
|
165
|
-
`Creating request for
|
|
192
|
+
`Creating request for publishing contract class ${contractClass.id.toString()} as part of deployment for ${instance.address.toString()}`,
|
|
166
193
|
);
|
|
167
|
-
const registerContractClassInteraction = await
|
|
194
|
+
const registerContractClassInteraction = await publishContractClass(this.wallet, this.artifact);
|
|
168
195
|
calls.push(await registerContractClassInteraction.request());
|
|
169
|
-
capsules.push(...registerContractClassInteraction.getCapsules());
|
|
170
196
|
}
|
|
171
197
|
}
|
|
172
198
|
|
|
173
|
-
//
|
|
174
|
-
if (!options
|
|
175
|
-
|
|
199
|
+
// Publish the contract instance:
|
|
200
|
+
if (!options?.skipInstancePublication) {
|
|
201
|
+
// TODO(https://github.com/AztecProtocol/aztec-packages/issues/15596):
|
|
202
|
+
// Read the artifact, and if there are no public functions, warn the caller that publication of the
|
|
203
|
+
// contract instance is not necessary (until such time as they wish to update the instance (i.e. change its class_id)).
|
|
204
|
+
const deploymentInteraction = await publishInstance(this.wallet, instance);
|
|
176
205
|
calls.push(await deploymentInteraction.request());
|
|
177
|
-
capsules.push(...deploymentInteraction.getCapsules());
|
|
178
206
|
}
|
|
179
207
|
|
|
180
|
-
return
|
|
208
|
+
return mergeExecutionPayloads(calls);
|
|
181
209
|
}
|
|
182
210
|
|
|
183
211
|
/**
|
|
@@ -185,78 +213,94 @@ export class DeployMethod<TContract extends ContractBase = Contract> extends Bas
|
|
|
185
213
|
* @param options - Deployment options.
|
|
186
214
|
* @returns - An array of function calls.
|
|
187
215
|
*/
|
|
188
|
-
protected async
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
const calls: FunctionCall[] = [];
|
|
193
|
-
const capsules: Capsule[] = [];
|
|
194
|
-
if (this.constructorArtifact && !options.skipInitialization) {
|
|
216
|
+
protected async getInitializationExecutionPayload(options?: RequestDeployOptions): Promise<ExecutionPayload> {
|
|
217
|
+
const executionsPayloads: ExecutionPayload[] = [];
|
|
218
|
+
if (this.constructorArtifact && !options?.skipInitialization) {
|
|
219
|
+
const { address } = await this.getInstance(options);
|
|
195
220
|
const constructorCall = new ContractFunctionInteraction(
|
|
196
221
|
this.wallet,
|
|
197
222
|
address,
|
|
198
223
|
this.constructorArtifact,
|
|
199
224
|
this.args,
|
|
200
225
|
);
|
|
201
|
-
|
|
202
|
-
capsules.push(...constructorCall.getCapsules());
|
|
226
|
+
executionsPayloads.push(await constructorCall.request());
|
|
203
227
|
}
|
|
204
|
-
return
|
|
228
|
+
return mergeExecutionPayloads(executionsPayloads);
|
|
205
229
|
}
|
|
206
230
|
|
|
207
231
|
/**
|
|
208
|
-
* Send
|
|
232
|
+
* Send a contract deployment transaction (initialize and/or publish) using the provided options.
|
|
209
233
|
* This function extends the 'send' method from the ContractFunctionInteraction class,
|
|
210
234
|
* allowing us to send a transaction specifically for contract deployment.
|
|
211
235
|
*
|
|
212
236
|
* @param options - An object containing various deployment options such as contractAddressSalt and from.
|
|
213
237
|
* @returns A SentTx object that returns the receipt and the deployed contract instance.
|
|
214
238
|
*/
|
|
215
|
-
public override send(options: DeployOptions
|
|
216
|
-
const
|
|
239
|
+
public override send(options: DeployOptions): DeploySentTx<TContract> {
|
|
240
|
+
const sendTx = async () => {
|
|
241
|
+
const executionPayload = await this.request(this.convertDeployOptionsToRequestOptions(options));
|
|
242
|
+
const sendOptions = await toSendOptions(options);
|
|
243
|
+
return this.wallet.sendTx(executionPayload, sendOptions);
|
|
244
|
+
};
|
|
217
245
|
this.log.debug(`Sent deployment tx of ${this.artifact.name} contract`);
|
|
218
|
-
return new DeploySentTx(this.wallet,
|
|
246
|
+
return new DeploySentTx(this.wallet, sendTx, this.postDeployCtor, () => this.getInstance(options));
|
|
219
247
|
}
|
|
220
248
|
|
|
221
249
|
/**
|
|
222
|
-
* Builds the contract instance
|
|
250
|
+
* Builds the contract instance and returns it.
|
|
223
251
|
*
|
|
224
|
-
* @param options - An object containing various
|
|
252
|
+
* @param options - An object containing various initialization and publication options.
|
|
225
253
|
* @returns An instance object.
|
|
226
254
|
*/
|
|
227
|
-
public async getInstance(options
|
|
255
|
+
public async getInstance(options?: RequestDeployOptions): Promise<ContractInstanceWithAddress> {
|
|
228
256
|
if (!this.instance) {
|
|
229
|
-
this.instance = await
|
|
257
|
+
this.instance = await getContractInstanceFromInstantiationParams(this.artifact, {
|
|
230
258
|
constructorArgs: this.args,
|
|
231
|
-
salt: options.
|
|
259
|
+
salt: options?.contractAddressSalt ?? Fr.random(),
|
|
232
260
|
publicKeys: this.publicKeys,
|
|
233
261
|
constructorArtifact: this.constructorArtifact,
|
|
234
|
-
deployer: options
|
|
262
|
+
deployer: options?.deployer ? options.deployer : AztecAddress.ZERO,
|
|
235
263
|
});
|
|
236
264
|
}
|
|
237
265
|
return this.instance;
|
|
238
266
|
}
|
|
239
267
|
|
|
240
268
|
/**
|
|
241
|
-
*
|
|
242
|
-
*
|
|
243
|
-
* @
|
|
269
|
+
* Simulate the deployment
|
|
270
|
+
*
|
|
271
|
+
* @param options - An optional object containing additional configuration for the simulation.
|
|
272
|
+
* @returns A simulation result object containing metadata of the execution, including gas
|
|
273
|
+
* estimations (if requested via options), execution statistics and emitted offchain effects
|
|
244
274
|
*/
|
|
245
|
-
public
|
|
246
|
-
const
|
|
247
|
-
|
|
248
|
-
|
|
275
|
+
public async simulate(options: SimulateDeployOptions): Promise<SimulationReturn<true>> {
|
|
276
|
+
const executionPayload = await this.request(this.convertDeployOptionsToRequestOptions(options));
|
|
277
|
+
const simulatedTx = await this.wallet.simulateTx(executionPayload, await toSimulateOptions(options));
|
|
278
|
+
|
|
279
|
+
const { gasLimits, teardownGasLimits } = getGasLimits(simulatedTx, options.fee?.estimatedGasPadding);
|
|
280
|
+
this.log.verbose(
|
|
281
|
+
`Estimated gas limits for tx: DA=${gasLimits.daGas} L2=${gasLimits.l2Gas} teardownDA=${teardownGasLimits.daGas} teardownL2=${teardownGasLimits.l2Gas}`,
|
|
249
282
|
);
|
|
283
|
+
return {
|
|
284
|
+
stats: simulatedTx.stats!,
|
|
285
|
+
offchainEffects: collectOffchainEffects(simulatedTx.privateExecutionResult),
|
|
286
|
+
result: undefined,
|
|
287
|
+
estimatedGas: { gasLimits, teardownGasLimits },
|
|
288
|
+
};
|
|
250
289
|
}
|
|
251
290
|
|
|
252
291
|
/**
|
|
253
|
-
*
|
|
254
|
-
* @param options -
|
|
292
|
+
* Simulate a deployment and profile the gate count for each function in the transaction.
|
|
293
|
+
* @param options - Same options as `send`, plus extra profiling options.
|
|
294
|
+
*
|
|
295
|
+
* @returns An object containing the function return value and profile result.
|
|
255
296
|
*/
|
|
256
|
-
public
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
297
|
+
public async profile(options: DeployOptions & ProfileInteractionOptions): Promise<TxProfileResult> {
|
|
298
|
+
const executionPayload = await this.request(this.convertDeployOptionsToRequestOptions(options));
|
|
299
|
+
return await this.wallet.profileTx(executionPayload, {
|
|
300
|
+
...(await toProfileOptions(options)),
|
|
301
|
+
profileMode: options.profileMode,
|
|
302
|
+
skipProofGeneration: options.skipProofGeneration,
|
|
303
|
+
});
|
|
260
304
|
}
|
|
261
305
|
|
|
262
306
|
/** Return this deployment address. */
|
|
@@ -268,4 +312,30 @@ export class DeployMethod<TContract extends ContractBase = Contract> extends Bas
|
|
|
268
312
|
public get partialAddress() {
|
|
269
313
|
return this.instance && computePartialAddress(this.instance);
|
|
270
314
|
}
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Augments this DeployMethod with additional metadata, such as authWitnesses and capsules.
|
|
318
|
+
* @param options - An object containing the metadata to add to the interaction
|
|
319
|
+
* @returns A new DeployMethod with the added metadata, but calling the same original function in the same manner
|
|
320
|
+
*/
|
|
321
|
+
public with({
|
|
322
|
+
authWitnesses = [],
|
|
323
|
+
capsules = [],
|
|
324
|
+
}: {
|
|
325
|
+
/** The authWitnesses to add to the deployment */
|
|
326
|
+
authWitnesses?: AuthWitness[];
|
|
327
|
+
/** The capsules to add to the deployment */
|
|
328
|
+
capsules?: Capsule[];
|
|
329
|
+
}): DeployMethod {
|
|
330
|
+
return new DeployMethod(
|
|
331
|
+
this.publicKeys,
|
|
332
|
+
this.wallet,
|
|
333
|
+
this.artifact,
|
|
334
|
+
this.postDeployCtor,
|
|
335
|
+
this.args,
|
|
336
|
+
this.constructorArtifact?.name,
|
|
337
|
+
this.authWitnesses.concat(authWitnesses),
|
|
338
|
+
this.capsules.concat(capsules),
|
|
339
|
+
);
|
|
340
|
+
}
|
|
271
341
|
}
|
|
@@ -2,10 +2,9 @@ import { createLogger } from '@aztec/foundation/log';
|
|
|
2
2
|
import type { FieldsOf } from '@aztec/foundation/types';
|
|
3
3
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
4
4
|
import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
5
|
-
import type { AztecNode, PXE } from '@aztec/stdlib/interfaces/client';
|
|
6
5
|
import type { TxHash, TxReceipt } from '@aztec/stdlib/tx';
|
|
7
6
|
|
|
8
|
-
import type { Wallet } from '../
|
|
7
|
+
import type { Wallet } from '../wallet/wallet.js';
|
|
9
8
|
import type { Contract } from './contract.js';
|
|
10
9
|
import type { ContractBase } from './contract_base.js';
|
|
11
10
|
import { SentTx, type WaitOpts } from './sent_tx.js';
|
|
@@ -23,19 +22,19 @@ export type DeployTxReceipt<TContract extends ContractBase = Contract> = FieldsO
|
|
|
23
22
|
};
|
|
24
23
|
|
|
25
24
|
/**
|
|
26
|
-
* A contract deployment transaction sent to the network, extending SentTx with methods to
|
|
25
|
+
* A contract deployment transaction sent to the network, extending SentTx with methods to publish a contract instance.
|
|
27
26
|
*/
|
|
28
27
|
export class DeploySentTx<TContract extends Contract = Contract> extends SentTx {
|
|
29
28
|
private log = createLogger('aztecjs:deploy_sent_tx');
|
|
30
29
|
|
|
31
30
|
constructor(
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
wallet: Wallet,
|
|
32
|
+
sendTx: () => Promise<TxHash>,
|
|
34
33
|
private postDeployCtor: (address: AztecAddress, wallet: Wallet) => Promise<TContract>,
|
|
35
34
|
/** A getter for the deployed contract instance */
|
|
36
35
|
public instanceGetter: () => Promise<ContractInstanceWithAddress>,
|
|
37
36
|
) {
|
|
38
|
-
super(
|
|
37
|
+
super(wallet, sendTx);
|
|
39
38
|
}
|
|
40
39
|
|
|
41
40
|
/**
|
|
@@ -57,18 +56,13 @@ export class DeploySentTx<TContract extends Contract = Contract> extends SentTx
|
|
|
57
56
|
*/
|
|
58
57
|
public override async wait(opts?: DeployedWaitOpts): Promise<DeployTxReceipt<TContract>> {
|
|
59
58
|
const receipt = await super.wait(opts);
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
protected async getContractObject(wallet?: Wallet): Promise<TContract> {
|
|
65
|
-
const isWallet = (pxeOrWallet: PXE | Wallet | AztecNode): pxeOrWallet is Wallet =>
|
|
66
|
-
!!(pxeOrWallet as Wallet).createTxExecutionRequest;
|
|
67
|
-
const contractWallet = wallet ?? (isWallet(this.pxeOrNode) && this.pxeOrNode);
|
|
59
|
+
// In the case of DeploySentTx we have a guarantee that this.walletOrNode is a Wallet so we can cast it to Wallet.
|
|
60
|
+
const contractWallet = opts?.wallet ?? (this.walletOrNode as Wallet);
|
|
68
61
|
if (!contractWallet) {
|
|
69
62
|
throw new Error(`A wallet is required for creating a contract instance`);
|
|
70
63
|
}
|
|
71
64
|
const instance = await this.instanceGetter();
|
|
72
|
-
|
|
65
|
+
const contract = (await this.postDeployCtor(instance.address, contractWallet)) as TContract;
|
|
66
|
+
return { ...receipt, contract };
|
|
73
67
|
}
|
|
74
68
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { AVM_MAX_PROCESSABLE_L2_GAS } from '@aztec/constants';
|
|
2
|
+
import { Gas } from '@aztec/stdlib/gas';
|
|
2
3
|
import type { TxSimulationResult } from '@aztec/stdlib/tx';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* Returns suggested total and teardown gas limits for a simulated tx.
|
|
6
|
-
* Note that public gas usage is only accounted for if the publicOutput is present.
|
|
7
7
|
* @param pad - Percentage to pad the suggested gas limits by, (as decimal, e.g., 0.10 for 10%).
|
|
8
8
|
*/
|
|
9
9
|
export function getGasLimits(
|
|
@@ -11,16 +11,23 @@ export function getGasLimits(
|
|
|
11
11
|
pad = 0.1,
|
|
12
12
|
): {
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
14
|
+
* Gas limit for the tx, excluding teardown gas
|
|
15
15
|
*/
|
|
16
|
-
|
|
16
|
+
gasLimits: Gas;
|
|
17
17
|
/**
|
|
18
|
-
*
|
|
18
|
+
* Gas limit for the teardown phase
|
|
19
19
|
*/
|
|
20
|
-
|
|
20
|
+
teardownGasLimits: Gas;
|
|
21
21
|
} {
|
|
22
|
+
// Total gas does not use the teardown gas limit, but the actual total gas used by the tx.
|
|
23
|
+
const gasLimits = simulationResult.gasUsed.totalGas.mul(1 + pad);
|
|
24
|
+
const teardownGasLimits = simulationResult.gasUsed.teardownGas.mul(1 + pad);
|
|
25
|
+
|
|
26
|
+
if (gasLimits.l2Gas > AVM_MAX_PROCESSABLE_L2_GAS) {
|
|
27
|
+
throw new Error('Transaction consumes more gas than the AVM maximum processable gas');
|
|
28
|
+
}
|
|
22
29
|
return {
|
|
23
|
-
|
|
24
|
-
|
|
30
|
+
gasLimits,
|
|
31
|
+
teardownGasLimits,
|
|
25
32
|
};
|
|
26
33
|
}
|