@aztec/aztec.js 0.0.0-test.1 → 0.0.1-commit.1142ef1
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 +5 -9
- package/dest/account/index.d.ts.map +1 -1
- package/dest/account/index.js +2 -6
- package/dest/account/interface.d.ts +3 -15
- 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 +3 -2
- package/dest/api/fields.d.ts.map +1 -1
- package/dest/api/fields.js +2 -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 +89 -69
- 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 +10 -21
- 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 +28 -24
- 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 +139 -0
- package/dest/ethereum/portal_manager.d.ts.map +1 -0
- package/dest/ethereum/portal_manager.js +345 -0
- 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 +27 -17
- 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 +45 -23
- 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 +47 -25
- 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 +2 -4
- package/dest/utils/abi_types.d.ts.map +1 -1
- package/dest/utils/authwit.d.ts +83 -26
- package/dest/utils/authwit.d.ts.map +1 -1
- package/dest/utils/authwit.js +238 -41
- 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 +4 -3
- package/dest/utils/field_compressed_string.d.ts +1 -1
- package/dest/utils/field_compressed_string.d.ts.map +1 -1
- package/dest/utils/field_compressed_string.js +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 +2 -2
- package/dest/utils/pub_key.d.ts.map +1 -1
- package/dest/utils/pub_key.js +2 -3
- 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 +3554 -0
- package/dest/wallet/wallet.d.ts.map +1 -0
- package/dest/wallet/wallet.js +198 -0
- package/package.json +44 -35
- package/src/account/account.ts +96 -0
- package/src/account/{contract.ts → account_contract.ts} +25 -14
- package/src/{wallet/account_wallet_with_private_key.ts → account/account_with_secret_key.ts} +7 -9
- package/src/account/index.ts +4 -8
- package/src/account/interface.ts +2 -13
- 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/fields.ts +2 -1
- 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 +31 -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 +108 -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 +42 -54
- package/src/contract/unsafe_contract.ts +2 -2
- package/src/contract/wait_for_proven.ts +38 -0
- package/src/deployment/broadcast_function.ts +58 -58
- 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 +166 -89
- package/src/fee/fee_juice_payment_method_with_claim.ts +49 -34
- package/src/fee/fee_payment_method.ts +11 -7
- package/src/fee/private_fee_payment_method.ts +80 -58
- package/src/fee/public_fee_payment_method.ts +94 -68
- package/src/fee/sponsored_fee_payment.ts +46 -0
- package/src/utils/abi_types.ts +1 -1
- package/src/utils/authwit.ts +262 -54
- package/src/utils/cross_chain.ts +53 -0
- package/src/utils/fee_juice.ts +5 -5
- package/src/utils/field_compressed_string.ts +1 -1
- package/src/utils/node.ts +1 -1
- package/src/utils/pub_key.ts +3 -4
- 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 +369 -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/ethereum/portal_manager.js +0 -286
- 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
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
|
|
2
|
+
|
|
3
|
+
import type { ContractFunctionInteraction } from '../contract/contract_function_interaction.js';
|
|
4
|
+
import { getInstanceRegistryContract } from '../contract/protocol_contracts.js';
|
|
5
|
+
import type { Wallet } from '../wallet/wallet.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Sets up a call to the canonical contract instance registry to publish a contract instance.
|
|
9
|
+
* @param wallet - The wallet to use for the publication (setup) tx.
|
|
10
|
+
* @param instance - The instance to publish.
|
|
11
|
+
*/
|
|
12
|
+
export async function publishInstance(
|
|
13
|
+
wallet: Wallet,
|
|
14
|
+
instance: ContractInstanceWithAddress,
|
|
15
|
+
): Promise<ContractFunctionInteraction> {
|
|
16
|
+
const contractInstanceRegistry = await getInstanceRegistryContract(wallet);
|
|
17
|
+
const { salt, currentContractClassId: contractClassId, publicKeys, deployer: instanceDeployer } = instance;
|
|
18
|
+
const isUniversalDeploy = instanceDeployer.isZero();
|
|
19
|
+
return contractInstanceRegistry.methods.publish_for_public_execution(
|
|
20
|
+
salt,
|
|
21
|
+
contractClassId,
|
|
22
|
+
instance.initializationHash,
|
|
23
|
+
publicKeys,
|
|
24
|
+
isUniversalDeploy,
|
|
25
|
+
);
|
|
26
|
+
}
|
|
@@ -1,19 +1,23 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ExtendedViemWalletClient, ViemContract } from '@aztec/ethereum/types';
|
|
2
2
|
import { extractEvent } from '@aztec/ethereum/utils';
|
|
3
|
-
import {
|
|
3
|
+
import type { EpochNumber } from '@aztec/foundation/branded-types';
|
|
4
|
+
import { sha256ToField } from '@aztec/foundation/crypto/sha256';
|
|
5
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
6
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
5
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
6
7
|
import type { Logger } from '@aztec/foundation/log';
|
|
7
8
|
import type { SiblingPath } from '@aztec/foundation/trees';
|
|
8
|
-
import {
|
|
9
|
+
import { FeeAssetHandlerAbi } from '@aztec/l1-artifacts/FeeAssetHandlerAbi';
|
|
10
|
+
import { FeeJuicePortalAbi } from '@aztec/l1-artifacts/FeeJuicePortalAbi';
|
|
11
|
+
import { OutboxAbi } from '@aztec/l1-artifacts/OutboxAbi';
|
|
12
|
+
import { TestERC20Abi } from '@aztec/l1-artifacts/TestERC20Abi';
|
|
13
|
+
import { TokenPortalAbi } from '@aztec/l1-artifacts/TokenPortalAbi';
|
|
9
14
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
10
|
-
import { computeSecretHash } from '@aztec/stdlib/hash';
|
|
11
|
-
import type {
|
|
15
|
+
import { computeL2ToL1MessageHash, computeSecretHash } from '@aztec/stdlib/hash';
|
|
16
|
+
import type { AztecNode } from '@aztec/stdlib/interfaces/client';
|
|
17
|
+
import { getL2ToL1MessageLeafId } from '@aztec/stdlib/messaging';
|
|
12
18
|
|
|
13
|
-
import { type
|
|
19
|
+
import { type Hex, getContract, toFunctionSelector } from 'viem';
|
|
14
20
|
|
|
15
|
-
// docs:start:claim_type
|
|
16
|
-
// docs:start:claim_type_amount
|
|
17
21
|
/** L1 to L2 message info to claim it on L2. */
|
|
18
22
|
export type L2Claim = {
|
|
19
23
|
/** Secret for claiming. */
|
|
@@ -25,11 +29,9 @@ export type L2Claim = {
|
|
|
25
29
|
/** Leaf index in the L1 to L2 message tree. */
|
|
26
30
|
messageLeafIndex: bigint;
|
|
27
31
|
};
|
|
28
|
-
// docs:end:claim_type
|
|
29
32
|
|
|
30
33
|
/** L1 to L2 message info that corresponds to an amount to claim. */
|
|
31
34
|
export type L2AmountClaim = L2Claim & { /** Amount to claim */ claimAmount: bigint };
|
|
32
|
-
// docs:end:claim_type_amount
|
|
33
35
|
|
|
34
36
|
/** L1 to L2 message info that corresponds to an amount to claim with associated recipient. */
|
|
35
37
|
export type L2AmountClaimWithRecipient = L2AmountClaim & {
|
|
@@ -51,20 +53,39 @@ export async function generateClaimSecret(logger?: Logger): Promise<[Fr, Fr]> {
|
|
|
51
53
|
|
|
52
54
|
/** Helper for managing an ERC20 on L1. */
|
|
53
55
|
export class L1TokenManager {
|
|
54
|
-
private contract:
|
|
56
|
+
private contract: ViemContract<typeof TestERC20Abi>;
|
|
57
|
+
private handler: ViemContract<typeof FeeAssetHandlerAbi> | undefined;
|
|
55
58
|
|
|
56
59
|
public constructor(
|
|
57
60
|
/** Address of the ERC20 contract. */
|
|
58
|
-
public readonly
|
|
59
|
-
|
|
60
|
-
|
|
61
|
+
public readonly tokenAddress: EthAddress,
|
|
62
|
+
/** Address of the handler/faucet contract. */
|
|
63
|
+
public readonly handlerAddress: EthAddress | undefined,
|
|
64
|
+
private readonly extendedClient: ExtendedViemWalletClient,
|
|
61
65
|
private logger: Logger,
|
|
62
66
|
) {
|
|
63
67
|
this.contract = getContract({
|
|
64
|
-
address: this.
|
|
68
|
+
address: this.tokenAddress.toString(),
|
|
65
69
|
abi: TestERC20Abi,
|
|
66
|
-
client: this.
|
|
70
|
+
client: this.extendedClient,
|
|
67
71
|
});
|
|
72
|
+
if (this.handlerAddress) {
|
|
73
|
+
this.handler = getContract({
|
|
74
|
+
address: this.handlerAddress.toString(),
|
|
75
|
+
abi: FeeAssetHandlerAbi,
|
|
76
|
+
client: this.extendedClient,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/** Returns the amount of tokens available to mint via the handler.
|
|
82
|
+
* @throws if the handler is not provided.
|
|
83
|
+
*/
|
|
84
|
+
public async getMintAmount() {
|
|
85
|
+
if (!this.handler) {
|
|
86
|
+
throw new Error('Minting handler was not provided');
|
|
87
|
+
}
|
|
88
|
+
return await this.handler.read.mintAmount();
|
|
68
89
|
}
|
|
69
90
|
|
|
70
91
|
/**
|
|
@@ -76,16 +97,18 @@ export class L1TokenManager {
|
|
|
76
97
|
}
|
|
77
98
|
|
|
78
99
|
/**
|
|
79
|
-
* Mints tokens for the given address. Returns once the tx has been mined.
|
|
80
|
-
* @param amount - Amount to mint.
|
|
100
|
+
* Mints a fixed amount of tokens for the given address. Returns once the tx has been mined.
|
|
81
101
|
* @param address - Address to mint the tokens for.
|
|
82
102
|
* @param addressName - Optional name of the address for logging.
|
|
83
103
|
*/
|
|
84
|
-
public async mint(
|
|
85
|
-
this.
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
104
|
+
public async mint(address: Hex, addressName?: string) {
|
|
105
|
+
if (!this.handler) {
|
|
106
|
+
throw new Error('Minting handler was not provided');
|
|
107
|
+
}
|
|
108
|
+
const mintAmount = await this.getMintAmount();
|
|
109
|
+
this.logger.info(`Minting ${mintAmount} tokens for ${stringifyEthAddress(address, addressName)}`);
|
|
110
|
+
// NOTE: the handler mints a fixed amount.
|
|
111
|
+
await this.handler.write.mint([address]);
|
|
89
112
|
}
|
|
90
113
|
|
|
91
114
|
/**
|
|
@@ -96,7 +119,7 @@ export class L1TokenManager {
|
|
|
96
119
|
*/
|
|
97
120
|
public async approve(amount: bigint, address: Hex, addressName = '') {
|
|
98
121
|
this.logger.info(`Approving ${amount} tokens for ${stringifyEthAddress(address, addressName)}`);
|
|
99
|
-
await this.
|
|
122
|
+
await this.extendedClient.waitForTransactionReceipt({
|
|
100
123
|
hash: await this.contract.write.approve([address, amount]),
|
|
101
124
|
});
|
|
102
125
|
}
|
|
@@ -105,20 +128,20 @@ export class L1TokenManager {
|
|
|
105
128
|
/** Helper for interacting with the FeeJuicePortal on L1. */
|
|
106
129
|
export class L1FeeJuicePortalManager {
|
|
107
130
|
private readonly tokenManager: L1TokenManager;
|
|
108
|
-
private readonly contract:
|
|
131
|
+
private readonly contract: ViemContract<typeof FeeJuicePortalAbi>;
|
|
109
132
|
|
|
110
133
|
constructor(
|
|
111
134
|
portalAddress: EthAddress,
|
|
112
135
|
tokenAddress: EthAddress,
|
|
113
|
-
|
|
114
|
-
private readonly
|
|
136
|
+
handlerAddress: EthAddress | undefined,
|
|
137
|
+
private readonly extendedClient: ExtendedViemWalletClient,
|
|
115
138
|
private readonly logger: Logger,
|
|
116
139
|
) {
|
|
117
|
-
this.tokenManager = new L1TokenManager(tokenAddress,
|
|
140
|
+
this.tokenManager = new L1TokenManager(tokenAddress, handlerAddress, extendedClient, logger);
|
|
118
141
|
this.contract = getContract({
|
|
119
142
|
address: portalAddress.toString(),
|
|
120
143
|
abi: FeeJuicePortalAbi,
|
|
121
|
-
client:
|
|
144
|
+
client: extendedClient,
|
|
122
145
|
});
|
|
123
146
|
}
|
|
124
147
|
|
|
@@ -133,39 +156,59 @@ export class L1FeeJuicePortalManager {
|
|
|
133
156
|
* @param amount - Amount of tokens to send.
|
|
134
157
|
* @param mint - Whether to mint the tokens before sending (only during testing).
|
|
135
158
|
*/
|
|
136
|
-
public async bridgeTokensPublic(to: AztecAddress, amount: bigint, mint = false): Promise<L2AmountClaim> {
|
|
159
|
+
public async bridgeTokensPublic(to: AztecAddress, amount: bigint | undefined, mint = false): Promise<L2AmountClaim> {
|
|
137
160
|
const [claimSecret, claimSecretHash] = await generateClaimSecret();
|
|
161
|
+
const amountToBridge = amount ?? (await this.tokenManager.getMintAmount());
|
|
138
162
|
if (mint) {
|
|
139
|
-
await this.tokenManager.
|
|
163
|
+
const mintableAmount = await this.tokenManager.getMintAmount();
|
|
164
|
+
if (amountToBridge !== mintableAmount) {
|
|
165
|
+
throw new Error(`Minting amount must be ${mintableAmount}`);
|
|
166
|
+
}
|
|
167
|
+
await this.tokenManager.mint(this.extendedClient.account.address);
|
|
140
168
|
}
|
|
141
169
|
|
|
142
|
-
await this.tokenManager.approve(
|
|
170
|
+
await this.tokenManager.approve(amountToBridge, this.contract.address, 'FeeJuice Portal');
|
|
143
171
|
|
|
144
172
|
this.logger.info('Sending L1 Fee Juice to L2 to be claimed publicly');
|
|
145
|
-
const args = [to.toString(),
|
|
173
|
+
const args = [to.toString(), amountToBridge, claimSecretHash.toString()] as const;
|
|
146
174
|
|
|
147
175
|
await this.contract.simulate.depositToAztecPublic(args);
|
|
148
176
|
|
|
149
|
-
const txReceipt = await this.
|
|
177
|
+
const txReceipt = await this.extendedClient.waitForTransactionReceipt({
|
|
150
178
|
hash: await this.contract.write.depositToAztecPublic(args),
|
|
151
179
|
});
|
|
152
180
|
|
|
153
|
-
this.logger.info('Deposited to Aztec public successfully');
|
|
181
|
+
this.logger.info('Deposited to Aztec public successfully', { txReceipt });
|
|
154
182
|
|
|
155
183
|
const log = extractEvent(
|
|
156
184
|
txReceipt.logs,
|
|
157
185
|
this.contract.address,
|
|
158
186
|
this.contract.abi,
|
|
159
187
|
'DepositToAztecPublic',
|
|
160
|
-
log =>
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
188
|
+
log => {
|
|
189
|
+
// Normalize hex strings for comparison (case-insensitive, handle different formats)
|
|
190
|
+
const normalizeHex = (val: string | bigint | number) => {
|
|
191
|
+
const hexStr = typeof val === 'string' ? val : `0x${val.toString(16).padStart(64, '0')}`;
|
|
192
|
+
return hexStr.toLowerCase();
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
const secretHashMatch = normalizeHex(log.args.secretHash) === normalizeHex(claimSecretHash.toString());
|
|
196
|
+
const amountMatch = log.args.amount === amountToBridge;
|
|
197
|
+
const toMatch = normalizeHex(log.args.to) === normalizeHex(to.toString());
|
|
198
|
+
|
|
199
|
+
this.logger.debug(
|
|
200
|
+
`Event filter matching: secretHash=${secretHashMatch} (${log.args.secretHash} vs ${claimSecretHash.toString()}), ` +
|
|
201
|
+
`amount=${amountMatch} (${log.args.amount} vs ${amountToBridge}), ` +
|
|
202
|
+
`to=${toMatch} (${log.args.to} vs ${to.toString()})`,
|
|
203
|
+
);
|
|
204
|
+
|
|
205
|
+
return secretHashMatch && amountMatch && toMatch;
|
|
206
|
+
},
|
|
164
207
|
this.logger,
|
|
165
208
|
);
|
|
166
209
|
|
|
167
210
|
return {
|
|
168
|
-
claimAmount:
|
|
211
|
+
claimAmount: amountToBridge,
|
|
169
212
|
claimSecret,
|
|
170
213
|
claimSecretHash,
|
|
171
214
|
messageHash: log.args.key,
|
|
@@ -175,46 +218,48 @@ export class L1FeeJuicePortalManager {
|
|
|
175
218
|
|
|
176
219
|
/**
|
|
177
220
|
* Creates a new instance
|
|
178
|
-
* @param
|
|
179
|
-
* @param
|
|
180
|
-
* @param walletClient - L1 wallet client.
|
|
221
|
+
* @param node - Aztec node client used for retrieving the L1 contract addresses.
|
|
222
|
+
* @param extendedClient - Wallet client, extended with public actions.
|
|
181
223
|
* @param logger - Logger.
|
|
182
224
|
*/
|
|
183
225
|
public static async new(
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
walletClient: ViemWalletClient,
|
|
226
|
+
node: AztecNode,
|
|
227
|
+
extendedClient: ExtendedViemWalletClient,
|
|
187
228
|
logger: Logger,
|
|
188
229
|
): Promise<L1FeeJuicePortalManager> {
|
|
189
230
|
const {
|
|
190
|
-
l1ContractAddresses: { feeJuiceAddress, feeJuicePortalAddress },
|
|
191
|
-
} = await
|
|
231
|
+
l1ContractAddresses: { feeJuiceAddress, feeJuicePortalAddress, feeAssetHandlerAddress },
|
|
232
|
+
} = await node.getNodeInfo();
|
|
192
233
|
|
|
193
234
|
if (feeJuiceAddress.isZero() || feeJuicePortalAddress.isZero()) {
|
|
194
235
|
throw new Error('Portal or token not deployed on L1');
|
|
195
236
|
}
|
|
196
237
|
|
|
197
|
-
|
|
238
|
+
// Handler is optional - it's only needed for minting tokens during testing
|
|
239
|
+
const handlerAddress =
|
|
240
|
+
feeAssetHandlerAddress && !feeAssetHandlerAddress.isZero() ? feeAssetHandlerAddress : undefined;
|
|
241
|
+
|
|
242
|
+
return new L1FeeJuicePortalManager(feeJuicePortalAddress, feeJuiceAddress, handlerAddress, extendedClient, logger);
|
|
198
243
|
}
|
|
199
244
|
}
|
|
200
245
|
|
|
201
246
|
/** Helper for interacting with a test TokenPortal on L1 for sending tokens to L2. */
|
|
202
247
|
export class L1ToL2TokenPortalManager {
|
|
203
|
-
protected readonly portal:
|
|
248
|
+
protected readonly portal: ViemContract<typeof TokenPortalAbi>;
|
|
204
249
|
protected readonly tokenManager: L1TokenManager;
|
|
205
250
|
|
|
206
251
|
constructor(
|
|
207
252
|
portalAddress: EthAddress,
|
|
208
253
|
tokenAddress: EthAddress,
|
|
209
|
-
|
|
210
|
-
protected
|
|
254
|
+
handlerAddress: EthAddress | undefined,
|
|
255
|
+
protected extendedClient: ExtendedViemWalletClient,
|
|
211
256
|
protected logger: Logger,
|
|
212
257
|
) {
|
|
213
|
-
this.tokenManager = new L1TokenManager(tokenAddress,
|
|
258
|
+
this.tokenManager = new L1TokenManager(tokenAddress, handlerAddress, extendedClient, logger);
|
|
214
259
|
this.portal = getContract({
|
|
215
260
|
address: portalAddress.toString(),
|
|
216
261
|
abi: TokenPortalAbi,
|
|
217
|
-
client:
|
|
262
|
+
client: extendedClient,
|
|
218
263
|
});
|
|
219
264
|
}
|
|
220
265
|
|
|
@@ -239,8 +284,8 @@ export class L1ToL2TokenPortalManager {
|
|
|
239
284
|
claimSecretHash.toString(),
|
|
240
285
|
]);
|
|
241
286
|
|
|
242
|
-
const txReceipt = await this.
|
|
243
|
-
hash: await this.
|
|
287
|
+
const txReceipt = await this.extendedClient.waitForTransactionReceipt({
|
|
288
|
+
hash: await this.extendedClient.writeContract(request),
|
|
244
289
|
});
|
|
245
290
|
|
|
246
291
|
const log = extractEvent(
|
|
@@ -248,10 +293,19 @@ export class L1ToL2TokenPortalManager {
|
|
|
248
293
|
this.portal.address,
|
|
249
294
|
this.portal.abi,
|
|
250
295
|
'DepositToAztecPublic',
|
|
251
|
-
log =>
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
296
|
+
log => {
|
|
297
|
+
// Normalize hex strings for comparison (case-insensitive, handle different formats)
|
|
298
|
+
const normalizeHex = (val: string | bigint | number) => {
|
|
299
|
+
const hexStr = typeof val === 'string' ? val : `0x${val.toString(16).padStart(64, '0')}`;
|
|
300
|
+
return hexStr.toLowerCase();
|
|
301
|
+
};
|
|
302
|
+
|
|
303
|
+
return (
|
|
304
|
+
normalizeHex(log.args.secretHash) === normalizeHex(claimSecretHash.toString()) &&
|
|
305
|
+
log.args.amount === amount &&
|
|
306
|
+
normalizeHex(log.args.to) === normalizeHex(to.toString())
|
|
307
|
+
);
|
|
308
|
+
},
|
|
255
309
|
this.logger,
|
|
256
310
|
);
|
|
257
311
|
|
|
@@ -280,8 +334,8 @@ export class L1ToL2TokenPortalManager {
|
|
|
280
334
|
this.logger.info('Sending L1 tokens to L2 to be claimed privately');
|
|
281
335
|
const { request } = await this.portal.simulate.depositToAztecPrivate([amount, claimSecretHash.toString()]);
|
|
282
336
|
|
|
283
|
-
const txReceipt = await this.
|
|
284
|
-
hash: await this.
|
|
337
|
+
const txReceipt = await this.extendedClient.waitForTransactionReceipt({
|
|
338
|
+
hash: await this.extendedClient.writeContract(request),
|
|
285
339
|
});
|
|
286
340
|
|
|
287
341
|
const log = extractEvent(
|
|
@@ -289,7 +343,18 @@ export class L1ToL2TokenPortalManager {
|
|
|
289
343
|
this.portal.address,
|
|
290
344
|
this.portal.abi,
|
|
291
345
|
'DepositToAztecPrivate',
|
|
292
|
-
log =>
|
|
346
|
+
log => {
|
|
347
|
+
// Normalize hex strings for comparison (case-insensitive, handle different formats)
|
|
348
|
+
const normalizeHex = (val: string | bigint | number) => {
|
|
349
|
+
const hexStr = typeof val === 'string' ? val : `0x${val.toString(16).padStart(64, '0')}`;
|
|
350
|
+
return hexStr.toLowerCase();
|
|
351
|
+
};
|
|
352
|
+
|
|
353
|
+
return (
|
|
354
|
+
log.args.amount === amount &&
|
|
355
|
+
normalizeHex(log.args.secretHashForL2MessageConsumption) === normalizeHex(claimSecretHash.toString())
|
|
356
|
+
);
|
|
357
|
+
},
|
|
293
358
|
this.logger,
|
|
294
359
|
);
|
|
295
360
|
|
|
@@ -309,7 +374,11 @@ export class L1ToL2TokenPortalManager {
|
|
|
309
374
|
|
|
310
375
|
private async bridgeSetup(amount: bigint, mint: boolean) {
|
|
311
376
|
if (mint) {
|
|
312
|
-
await this.tokenManager.
|
|
377
|
+
const mintableAmount = await this.tokenManager.getMintAmount();
|
|
378
|
+
if (amount !== mintableAmount) {
|
|
379
|
+
throw new Error(`Minting amount must be ${mintableAmount} for testing`);
|
|
380
|
+
}
|
|
381
|
+
await this.tokenManager.mint(this.extendedClient.account.address);
|
|
313
382
|
}
|
|
314
383
|
await this.tokenManager.approve(amount, this.portal.address, 'TokenPortal');
|
|
315
384
|
return generateClaimSecret();
|
|
@@ -318,21 +387,21 @@ export class L1ToL2TokenPortalManager {
|
|
|
318
387
|
|
|
319
388
|
/** Helper for interacting with a test TokenPortal on L1 for both withdrawing from and bridging to L2. */
|
|
320
389
|
export class L1TokenPortalManager extends L1ToL2TokenPortalManager {
|
|
321
|
-
private readonly outbox:
|
|
390
|
+
private readonly outbox: ViemContract<typeof OutboxAbi>;
|
|
322
391
|
|
|
323
392
|
constructor(
|
|
324
393
|
portalAddress: EthAddress,
|
|
325
394
|
tokenAddress: EthAddress,
|
|
395
|
+
handlerAddress: EthAddress | undefined,
|
|
326
396
|
outboxAddress: EthAddress,
|
|
327
|
-
|
|
328
|
-
walletClient: ViemWalletClient,
|
|
397
|
+
extendedClient: ExtendedViemWalletClient,
|
|
329
398
|
logger: Logger,
|
|
330
399
|
) {
|
|
331
|
-
super(portalAddress, tokenAddress,
|
|
400
|
+
super(portalAddress, tokenAddress, handlerAddress, extendedClient, logger);
|
|
332
401
|
this.outbox = getContract({
|
|
333
402
|
address: outboxAddress.toString(),
|
|
334
403
|
abi: OutboxAbi,
|
|
335
|
-
client:
|
|
404
|
+
client: extendedClient,
|
|
336
405
|
});
|
|
337
406
|
}
|
|
338
407
|
|
|
@@ -340,24 +409,27 @@ export class L1TokenPortalManager extends L1ToL2TokenPortalManager {
|
|
|
340
409
|
* Withdraws funds from the portal by consuming an L2 to L1 message. Returns once the tx is mined on L1.
|
|
341
410
|
* @param amount - Amount to withdraw.
|
|
342
411
|
* @param recipient - Who will receive the funds.
|
|
343
|
-
* @param
|
|
412
|
+
* @param epochNumber - Epoch number of the message.
|
|
344
413
|
* @param messageIndex - Index of the message.
|
|
345
414
|
* @param siblingPath - Sibling path of the message.
|
|
346
415
|
*/
|
|
347
416
|
public async withdrawFunds(
|
|
348
417
|
amount: bigint,
|
|
349
418
|
recipient: EthAddress,
|
|
350
|
-
|
|
419
|
+
epochNumber: EpochNumber,
|
|
351
420
|
messageIndex: bigint,
|
|
352
421
|
siblingPath: SiblingPath<number>,
|
|
353
422
|
) {
|
|
354
423
|
this.logger.info(
|
|
355
|
-
`Sending L1 tx to consume message at
|
|
424
|
+
`Sending L1 tx to consume message at epoch ${epochNumber} index ${messageIndex} to withdraw ${amount}`,
|
|
356
425
|
);
|
|
357
426
|
|
|
358
|
-
const
|
|
427
|
+
const messageLeafId = getL2ToL1MessageLeafId({ leafIndex: messageIndex, siblingPath });
|
|
428
|
+
const isConsumedBefore = await this.outbox.read.hasMessageBeenConsumedAtEpoch([BigInt(epochNumber), messageLeafId]);
|
|
359
429
|
if (isConsumedBefore) {
|
|
360
|
-
throw new Error(
|
|
430
|
+
throw new Error(
|
|
431
|
+
`L2 to L1 message at epoch ${epochNumber} index ${messageIndex} height ${siblingPath.pathSize} has already been consumed`,
|
|
432
|
+
);
|
|
361
433
|
}
|
|
362
434
|
|
|
363
435
|
// Call function on L1 contract to consume the message
|
|
@@ -365,16 +437,20 @@ export class L1TokenPortalManager extends L1ToL2TokenPortalManager {
|
|
|
365
437
|
recipient.toString(),
|
|
366
438
|
amount,
|
|
367
439
|
false,
|
|
368
|
-
BigInt(
|
|
440
|
+
BigInt(epochNumber),
|
|
369
441
|
messageIndex,
|
|
370
442
|
siblingPath.toBufferArray().map((buf: Buffer): Hex => `0x${buf.toString('hex')}`),
|
|
371
443
|
]);
|
|
372
444
|
|
|
373
|
-
await this.
|
|
445
|
+
await this.extendedClient.waitForTransactionReceipt({
|
|
446
|
+
hash: await this.extendedClient.writeContract(withdrawRequest),
|
|
447
|
+
});
|
|
374
448
|
|
|
375
|
-
const isConsumedAfter = await this.outbox.read.
|
|
449
|
+
const isConsumedAfter = await this.outbox.read.hasMessageBeenConsumedAtEpoch([BigInt(epochNumber), messageLeafId]);
|
|
376
450
|
if (!isConsumedAfter) {
|
|
377
|
-
throw new Error(
|
|
451
|
+
throw new Error(
|
|
452
|
+
`L2 to L1 message at epoch ${epochNumber} index ${messageIndex} height ${siblingPath.pathSize} not consumed after withdrawal`,
|
|
453
|
+
);
|
|
378
454
|
}
|
|
379
455
|
}
|
|
380
456
|
|
|
@@ -385,26 +461,27 @@ export class L1TokenPortalManager extends L1ToL2TokenPortalManager {
|
|
|
385
461
|
* @param l2Bridge - Address of the L2 bridge.
|
|
386
462
|
* @param callerOnL1 - Caller address on L1.
|
|
387
463
|
*/
|
|
388
|
-
public getL2ToL1MessageLeaf(
|
|
464
|
+
public async getL2ToL1MessageLeaf(
|
|
389
465
|
amount: bigint,
|
|
390
466
|
recipient: EthAddress,
|
|
391
467
|
l2Bridge: AztecAddress,
|
|
392
468
|
callerOnL1: EthAddress = EthAddress.ZERO,
|
|
393
|
-
): Fr {
|
|
469
|
+
): Promise<Fr> {
|
|
470
|
+
const version = await this.outbox.read.VERSION();
|
|
471
|
+
|
|
394
472
|
const content = sha256ToField([
|
|
395
473
|
Buffer.from(toFunctionSelector('withdraw(address,uint256,address)').substring(2), 'hex'),
|
|
396
474
|
recipient.toBuffer32(),
|
|
397
475
|
new Fr(amount).toBuffer(),
|
|
398
476
|
callerOnL1.toBuffer32(),
|
|
399
477
|
]);
|
|
400
|
-
const leaf = sha256ToField([
|
|
401
|
-
l2Bridge.toBuffer(),
|
|
402
|
-
new Fr(1).toBuffer(), // aztec version
|
|
403
|
-
EthAddress.fromString(this.portal.address).toBuffer32() ?? Buffer.alloc(32, 0),
|
|
404
|
-
new Fr(this.publicClient.chain.id).toBuffer(), // chain id
|
|
405
|
-
content.toBuffer(),
|
|
406
|
-
]);
|
|
407
478
|
|
|
408
|
-
return
|
|
479
|
+
return computeL2ToL1MessageHash({
|
|
480
|
+
l2Sender: l2Bridge,
|
|
481
|
+
l1Recipient: EthAddress.fromString(this.portal.address),
|
|
482
|
+
content,
|
|
483
|
+
rollupVersion: new Fr(version),
|
|
484
|
+
chainId: new Fr(this.extendedClient.chain.id),
|
|
485
|
+
});
|
|
409
486
|
}
|
|
410
487
|
}
|
|
@@ -1,49 +1,64 @@
|
|
|
1
|
-
import { Fr } from '@aztec/foundation/
|
|
1
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
2
2
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
3
|
-
import type { FunctionCall } from '@aztec/stdlib/abi';
|
|
4
3
|
import { FunctionSelector, FunctionType } from '@aztec/stdlib/abi';
|
|
4
|
+
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
5
|
+
import type { GasSettings } from '@aztec/stdlib/gas';
|
|
6
|
+
import { ExecutionPayload } from '@aztec/stdlib/tx';
|
|
5
7
|
|
|
6
|
-
import type { L2AmountClaim } from '../
|
|
7
|
-
import {
|
|
8
|
-
import type { Wallet } from '../wallet/index.js';
|
|
9
|
-
import { FeeJuicePaymentMethod } from './fee_juice_payment_method.js';
|
|
8
|
+
import type { L2AmountClaim } from '../ethereum/portal_manager.js';
|
|
9
|
+
import type { FeePaymentMethod } from './fee_payment_method.js';
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
-
* Pay fee directly with Fee Juice claimed
|
|
12
|
+
* Pay fee directly with Fee Juice claimed in the same tx. Claiming consumes an L1 to L2 message that "contains"
|
|
13
|
+
* the fee juice bridged from L1.
|
|
13
14
|
*/
|
|
14
|
-
export class FeeJuicePaymentMethodWithClaim
|
|
15
|
+
export class FeeJuicePaymentMethodWithClaim implements FeePaymentMethod {
|
|
15
16
|
constructor(
|
|
16
|
-
private
|
|
17
|
+
private sender: AztecAddress,
|
|
17
18
|
private claim: Pick<L2AmountClaim, 'claimAmount' | 'claimSecret' | 'messageLeafIndex'>,
|
|
18
|
-
) {
|
|
19
|
-
super(senderWallet.getAddress());
|
|
20
|
-
}
|
|
19
|
+
) {}
|
|
21
20
|
|
|
22
21
|
/**
|
|
23
|
-
* Creates
|
|
24
|
-
* @returns
|
|
22
|
+
* Creates an execution payload to pay the fee in Fee Juice.
|
|
23
|
+
* @returns An execution payload that just contains the `claim_and_end_setup` function call.
|
|
25
24
|
*/
|
|
26
|
-
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
async getExecutionPayload(): Promise<ExecutionPayload> {
|
|
26
|
+
const selector = await FunctionSelector.fromSignature('claim_and_end_setup((Field),u128,Field,Field)');
|
|
27
|
+
|
|
28
|
+
return new ExecutionPayload(
|
|
29
|
+
[
|
|
30
|
+
{
|
|
31
|
+
to: ProtocolContractAddress.FeeJuice,
|
|
32
|
+
name: 'claim_and_end_setup',
|
|
33
|
+
selector,
|
|
34
|
+
hideMsgSender: false,
|
|
35
|
+
isStatic: false,
|
|
36
|
+
args: [
|
|
37
|
+
this.sender.toField(),
|
|
38
|
+
new Fr(this.claim.claimAmount),
|
|
39
|
+
this.claim.claimSecret,
|
|
40
|
+
new Fr(this.claim.messageLeafIndex),
|
|
41
|
+
],
|
|
42
|
+
returnTypes: [],
|
|
43
|
+
type: FunctionType.PRIVATE,
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
[],
|
|
47
|
+
[],
|
|
48
|
+
[],
|
|
49
|
+
this.sender, // feePayer
|
|
30
50
|
);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
getAsset() {
|
|
54
|
+
return Promise.resolve(ProtocolContractAddress.FeeJuice);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
getFeePayer(): Promise<AztecAddress> {
|
|
58
|
+
return Promise.resolve(this.sender);
|
|
59
|
+
}
|
|
31
60
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
to: ProtocolContractAddress.FeeJuice,
|
|
35
|
-
name: 'claim',
|
|
36
|
-
selector,
|
|
37
|
-
isStatic: false,
|
|
38
|
-
args: [
|
|
39
|
-
this.senderWallet.getAddress().toField(),
|
|
40
|
-
new Fr(this.claim.claimAmount),
|
|
41
|
-
this.claim.claimSecret,
|
|
42
|
-
new Fr(this.claim.messageLeafIndex),
|
|
43
|
-
],
|
|
44
|
-
returnTypes: [],
|
|
45
|
-
type: FunctionType.PRIVATE,
|
|
46
|
-
},
|
|
47
|
-
]);
|
|
61
|
+
getGasSettings(): GasSettings | undefined {
|
|
62
|
+
return;
|
|
48
63
|
}
|
|
49
64
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { FunctionCall } from '@aztec/stdlib/abi';
|
|
2
1
|
import type { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
3
2
|
import type { GasSettings } from '@aztec/stdlib/gas';
|
|
3
|
+
import type { ExecutionPayload } from '@aztec/stdlib/tx';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Holds information about how the fee for a transaction is to be paid.
|
|
@@ -9,14 +9,18 @@ export interface FeePaymentMethod {
|
|
|
9
9
|
/** The asset used to pay the fee. */
|
|
10
10
|
getAsset(): Promise<AztecAddress>;
|
|
11
11
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
* @returns The function
|
|
12
|
+
* Returns the data to be added to the final execution request
|
|
13
|
+
* to pay the fee in the given asset
|
|
14
|
+
* @returns The function calls to pay the fee.
|
|
15
15
|
*/
|
|
16
|
-
|
|
16
|
+
getExecutionPayload(): Promise<ExecutionPayload>;
|
|
17
17
|
/**
|
|
18
18
|
* The expected fee payer for this tx.
|
|
19
|
-
* @param gasSettings - The gas limits and max fees.
|
|
20
19
|
*/
|
|
21
|
-
getFeePayer(
|
|
20
|
+
getFeePayer(): Promise<AztecAddress>;
|
|
21
|
+
/**
|
|
22
|
+
* The gas settings (if any) used to compute the
|
|
23
|
+
* execution payload of the payment method
|
|
24
|
+
*/
|
|
25
|
+
getGasSettings(): GasSettings | undefined;
|
|
22
26
|
}
|