|
2 | 2 |
|
3 | 3 | use crate::constants::TEMPLATE_CONTRACT;
|
4 | 4 | use alloy_primitives::{address, hex, Address, Bytes};
|
5 |
| -use anvil::{spawn, NodeConfig}; |
| 5 | +use anvil::{spawn, EthereumHardfork, NodeConfig}; |
6 | 6 | use forge_script_sequence::ScriptSequence;
|
7 | 7 | use foundry_test_utils::{
|
8 | 8 | rpc::{self, next_http_archive_rpc_url},
|
@@ -2720,3 +2720,140 @@ Warning: No transactions to broadcast.
|
2720 | 2720 | "#
|
2721 | 2721 | ]);
|
2722 | 2722 | });
|
| 2723 | + |
| 2724 | +// Tests EIP-7702 broadcast <https://github.com/foundry-rs/foundry/issues/10461> |
| 2725 | +forgetest_async!(can_broadcast_txes_with_signed_auth, |prj, cmd| { |
| 2726 | + foundry_test_utils::util::initialize(prj.root()); |
| 2727 | + prj.add_script( |
| 2728 | + "EIP7702Script.s.sol", |
| 2729 | + r#" |
| 2730 | +import "forge-std/Script.sol"; |
| 2731 | +import {Vm} from "forge-std/Vm.sol"; |
| 2732 | +import {Counter} from "../src/Counter.sol"; |
| 2733 | +contract EIP7702Script is Script { |
| 2734 | + uint256 constant PRIVATE_KEY = uint256(bytes32(0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80)); |
| 2735 | + address constant SENDER = 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266; |
| 2736 | + function setUp() public {} |
| 2737 | + function run() public { |
| 2738 | + vm.startBroadcast(PRIVATE_KEY); |
| 2739 | + Counter counter = new Counter(); |
| 2740 | + Counter counter1 = new Counter(); |
| 2741 | + Counter counter2 = new Counter(); |
| 2742 | + vm.signAndAttachDelegation(address(counter), PRIVATE_KEY); |
| 2743 | + Counter(SENDER).increment(); |
| 2744 | + Counter(SENDER).increment(); |
| 2745 | + vm.signAndAttachDelegation(address(counter1), PRIVATE_KEY); |
| 2746 | + Counter(SENDER).setNumber(0); |
| 2747 | + vm.signAndAttachDelegation(address(counter2), PRIVATE_KEY); |
| 2748 | + Counter(SENDER).setNumber(0); |
| 2749 | + vm.stopBroadcast(); |
| 2750 | + } |
| 2751 | +} |
| 2752 | + "#, |
| 2753 | + ) |
| 2754 | + .unwrap(); |
| 2755 | + |
| 2756 | + let node_config = NodeConfig::test().with_hardfork(Some(EthereumHardfork::PragueEOF.into())); |
| 2757 | + let (_api, handle) = spawn(node_config).await; |
| 2758 | + |
| 2759 | + cmd.args([ |
| 2760 | + "script", |
| 2761 | + "script/EIP7702Script.s.sol", |
| 2762 | + "--rpc-url", |
| 2763 | + &handle.http_endpoint(), |
| 2764 | + "-vvvvv", |
| 2765 | + "--non-interactive", |
| 2766 | + "--slow", |
| 2767 | + "--broadcast", |
| 2768 | + "--evm-version", |
| 2769 | + "prague", |
| 2770 | + ]) |
| 2771 | + .assert_success() |
| 2772 | + .stdout_eq(str![[r#" |
| 2773 | +[COMPILING_FILES] with [SOLC_VERSION] |
| 2774 | +[SOLC_VERSION] [ELAPSED] |
| 2775 | +Compiler run successful! |
| 2776 | +Traces: |
| 2777 | + [..] EIP7702Script::setUp() |
| 2778 | + └─ ← [Stop] |
| 2779 | +
|
| 2780 | + [..] EIP7702Script::run() |
| 2781 | + ├─ [0] VM::startBroadcast(<pk>) |
| 2782 | + │ └─ ← [Return] |
| 2783 | + ├─ [..] → new Counter@0x5FbDB2315678afecb367f032d93F642f64180aa3 |
| 2784 | + │ └─ ← [Return] 481 bytes of code |
| 2785 | + ├─ [..] → new Counter@0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512 |
| 2786 | + │ └─ ← [Return] 481 bytes of code |
| 2787 | + ├─ [..] → new Counter@0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0 |
| 2788 | + │ └─ ← [Return] 481 bytes of code |
| 2789 | + ├─ [0] VM::signAndAttachDelegation(0x5FbDB2315678afecb367f032d93F642f64180aa3, "<pk>") |
| 2790 | + │ └─ ← [Return] (0, 0xd4301eb9f82f747137a5f2c3dc3a5c2d253917cf99ecdc0d49f7bb85313c3159, 0x786d354f0bbd456f44116ddd3aa50475e989d72d8396005e5b3a12cede83fb68, 4, 0x5FbDB2315678afecb367f032d93F642f64180aa3) |
| 2791 | + ├─ [..] 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266::increment() |
| 2792 | + │ └─ ← [Stop] |
| 2793 | + ├─ [..] 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266::increment() |
| 2794 | + │ └─ ← [Stop] |
| 2795 | + ├─ [0] VM::signAndAttachDelegation(0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512, "<pk>") |
| 2796 | + │ └─ ← [Return] (0, 0xaba9128338f7ff036a0d2ecb96d4f4376389005cd565f87aba33b312570af962, 0x69acbe0831fb8ca95338bc4b908dcfebaf7b81b0f770a12c073ceb07b89fbdf3, 7, 0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512) |
| 2797 | + ├─ [..] 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266::setNumber(0) |
| 2798 | + │ └─ ← [Stop] |
| 2799 | + ├─ [0] VM::signAndAttachDelegation(0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0, "<pk>") |
| 2800 | + │ └─ ← [Return] (1, 0x3a3427b66e589338ce7ea06135650708f9152e93e257b4a5ec6eb86a3e09a2ce, 0x444651c354c89fd3312aafb05948e12c0a16220827a5e467705253ab4d8aa8d3, 9, 0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0) |
| 2801 | + ├─ [..] 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266::setNumber(0) |
| 2802 | + │ └─ ← [Stop] |
| 2803 | + ├─ [0] VM::stopBroadcast() |
| 2804 | + │ └─ ← [Return] |
| 2805 | + └─ ← [Stop] |
| 2806 | +
|
| 2807 | +
|
| 2808 | +Script ran successfully. |
| 2809 | +
|
| 2810 | +## Setting up 1 EVM. |
| 2811 | +========================== |
| 2812 | +Simulated On-chain Traces: |
| 2813 | +
|
| 2814 | + [..] → new Counter@0x5FbDB2315678afecb367f032d93F642f64180aa3 |
| 2815 | + └─ ← [Return] 481 bytes of code |
| 2816 | +
|
| 2817 | + [..] → new Counter@0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512 |
| 2818 | + └─ ← [Return] 481 bytes of code |
| 2819 | +
|
| 2820 | + [..] → new Counter@0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0 |
| 2821 | + └─ ← [Return] 481 bytes of code |
| 2822 | +
|
| 2823 | + [0] 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266::increment() |
| 2824 | + └─ ← [Stop] |
| 2825 | +
|
| 2826 | + [0] 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266::increment() |
| 2827 | + └─ ← [Stop] |
| 2828 | +
|
| 2829 | + [0] 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266::setNumber(0) |
| 2830 | + └─ ← [Stop] |
| 2831 | +
|
| 2832 | + [0] 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266::setNumber(0) |
| 2833 | + └─ ← [Stop] |
| 2834 | +
|
| 2835 | +
|
| 2836 | +========================== |
| 2837 | +
|
| 2838 | +Chain 31337 |
| 2839 | +
|
| 2840 | +[ESTIMATED_GAS_PRICE] |
| 2841 | +
|
| 2842 | +[ESTIMATED_TOTAL_GAS_USED] |
| 2843 | +
|
| 2844 | +[ESTIMATED_AMOUNT_REQUIRED] |
| 2845 | +
|
| 2846 | +========================== |
| 2847 | +
|
| 2848 | +
|
| 2849 | +========================== |
| 2850 | +
|
| 2851 | +ONCHAIN EXECUTION COMPLETE & SUCCESSFUL. |
| 2852 | +
|
| 2853 | +[SAVED_TRANSACTIONS] |
| 2854 | +
|
| 2855 | +[SAVED_SENSITIVE_VALUES] |
| 2856 | +
|
| 2857 | +
|
| 2858 | +"#]]); |
| 2859 | +}); |
0 commit comments