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