@@ -720,7 +720,6 @@ mod test {
720
720
types:: BlockNumber ,
721
721
} ;
722
722
use hashbrown:: HashMap ;
723
- use tokio:: task:: JoinSet ;
724
723
725
724
use crate :: {
726
725
mpt_sequential:: utils:: nibbles_to_bytes,
@@ -860,9 +859,6 @@ mod test {
860
859
861
860
#[ tokio:: test]
862
861
async fn test_receipt_query ( ) -> Result < ( ) > {
863
- let rpc = ProviderBuilder :: new ( )
864
- . on_anvil_with_config ( |anvil| Anvil :: fork ( anvil, get_sepolia_url ( ) ) ) ;
865
-
866
862
// Make a contract that emits events so we can pick up on them
867
863
sol ! {
868
864
#[ allow( missing_docs) ]
@@ -889,44 +885,84 @@ mod test {
889
885
}
890
886
}
891
887
}
888
+
889
+ sol ! {
890
+ #[ allow( missing_docs) ]
891
+ // solc v0.8.26; solc Counter.sol --via-ir --optimize --bin
892
+ #[ sol( rpc, abi, bytecode="6080604052348015600e575f80fd5b506102288061001c5f395ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c8063488814e01461004e5780637229db15146100585780638381f58a14610062578063d09de08a14610080575b5f80fd5b61005661008a565b005b6100606100f8565b005b61006a610130565b6040516100779190610165565b60405180910390f35b610088610135565b005b5f547fbe3cbcfa5d4a62a595b4a15f51de63c11797bbef2ff687873efb0bb2852ee20f60405160405180910390a26100c0610135565b5f547fbe3cbcfa5d4a62a595b4a15f51de63c11797bbef2ff687873efb0bb2852ee20f60405160405180910390a26100f6610135565b565b5f547fbe3cbcfa5d4a62a595b4a15f51de63c11797bbef2ff687873efb0bb2852ee20f60405160405180910390a261012e610135565b565b5f5481565b5f80815480929190610146906101ab565b9190505550565b5f819050919050565b61015f8161014d565b82525050565b5f6020820190506101785f830184610156565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6101b58261014d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036101e7576101e661017e565b5b60018201905091905056fea26469706673582212203b7602644bfff2df89c2fe9498cd533326876859a0df7b96ac10be1fdc09c3a064736f6c634300081a0033" ) ]
893
+
894
+ contract OtherEmitter {
895
+ uint256 public number;
896
+ event otherEvent( uint256 indexed num) ;
897
+
898
+ function otherEmit( ) public {
899
+ emit otherEvent( number) ;
900
+ increment( ) ;
901
+ }
902
+
903
+ function twoEmits( ) public {
904
+ emit otherEvent( number) ;
905
+ increment( ) ;
906
+ emit otherEvent( number) ;
907
+ increment( ) ;
908
+ }
909
+
910
+ function increment( ) public {
911
+ number++;
912
+ }
913
+ }
914
+ }
915
+
916
+ // Spin up a local node.
917
+
918
+ let rpc = ProviderBuilder :: new ( )
919
+ . with_recommended_fillers ( )
920
+ . on_anvil_with_config ( |anvil| Anvil :: arg ( anvil, "--no-mining" ) ) ;
921
+
922
+ // Turn on auto mining to deploy the contracts
923
+ rpc. anvil_set_auto_mine ( true ) . await . unwrap ( ) ;
924
+
892
925
// Deploy the contract using anvil
893
- let contract = EventEmitter :: deploy ( rpc. clone ( ) ) . await ? ;
926
+ let event_contract = EventEmitter :: deploy ( rpc. root ( ) ) . await . unwrap ( ) ;
894
927
895
- let tx_reqs = ( 0 ..10 )
896
- . map ( |i| match i % 2 {
897
- 0 => contract. testEmit ( ) . into_transaction_request ( ) ,
898
- 1 => contract. twoEmits ( ) . into_transaction_request ( ) ,
928
+ // Deploy the contract using anvil
929
+ let other_contract = OtherEmitter :: deploy ( rpc. root ( ) ) . await . unwrap ( ) ;
930
+
931
+ // Disable auto mining so we can ensure that all the transaction appear in the same block
932
+ rpc. anvil_set_auto_mine ( false ) . await . unwrap ( ) ;
933
+
934
+ let mut pending_tx_builders = vec ! [ ] ;
935
+ for i in 0 ..25 {
936
+ let tx_req = match i % 4 {
937
+ 0 => event_contract. testEmit ( ) . into_transaction_request ( ) ,
938
+ 1 => event_contract. twoEmits ( ) . into_transaction_request ( ) ,
939
+ 2 => other_contract. otherEmit ( ) . into_transaction_request ( ) ,
940
+ 3 => other_contract. twoEmits ( ) . into_transaction_request ( ) ,
899
941
_ => unreachable ! ( ) ,
900
- } )
901
- . collect :: < Vec < _ > > ( ) ;
902
- let mut join_set = JoinSet :: new ( ) ;
903
-
904
- tx_reqs. into_iter ( ) . for_each ( |tx_req| {
905
- let rpc_clone = rpc. clone ( ) ;
906
- join_set. spawn ( async move {
907
- rpc_clone
908
- . anvil_auto_impersonate_account ( true )
909
- . await
910
- . unwrap ( ) ;
911
- let sender_address = Address :: random ( ) ;
912
- let balance = U256 :: from ( 1e18 as u64 ) ;
913
- rpc_clone
914
- . anvil_set_balance ( sender_address, balance)
915
- . await
916
- . unwrap ( ) ;
917
- rpc_clone
918
- . send_transaction ( tx_req. with_from ( sender_address) )
919
- . await
920
- . unwrap ( )
921
- . watch ( )
922
- . await
923
- . unwrap ( )
924
- } ) ;
925
- } ) ;
942
+ } ;
943
+
944
+ let sender_address = Address :: random ( ) ;
945
+ let funding = U256 :: from ( 1e18 as u64 ) ;
946
+ rpc. anvil_set_balance ( sender_address, funding)
947
+ . await
948
+ . unwrap ( ) ;
949
+ rpc. anvil_auto_impersonate_account ( true ) . await . unwrap ( ) ;
950
+ let new_req = tx_req. with_from ( sender_address) ;
951
+ let tx_req_final = rpc
952
+ . fill ( new_req)
953
+ . await
954
+ . unwrap ( )
955
+ . as_builder ( )
956
+ . unwrap ( )
957
+ . clone ( ) ;
958
+ pending_tx_builders. push ( rpc. send_transaction ( tx_req_final) . await . unwrap ( ) ) ;
959
+ }
960
+
961
+ rpc. anvil_mine ( Some ( U256 :: from ( 1u8 ) ) , None ) . await . unwrap ( ) ;
926
962
927
- let hashes = join_set. join_all ( ) . await ;
928
963
let mut transactions = Vec :: new ( ) ;
929
- for hash in hashes. into_iter ( ) {
964
+ for pending in pending_tx_builders. into_iter ( ) {
965
+ let hash = pending. watch ( ) . await . unwrap ( ) ;
930
966
transactions. push ( rpc. get_transaction_by_hash ( hash) . await . unwrap ( ) . unwrap ( ) ) ;
931
967
}
932
968
@@ -936,7 +972,7 @@ mod test {
936
972
let all_events = EventEmitter :: abi:: events ( ) ;
937
973
938
974
let events = all_events. get ( "testEvent" ) . unwrap ( ) ;
939
- let receipt_query = ReceiptQuery :: new ( * contract . address ( ) , events[ 0 ] . clone ( ) ) ;
975
+ let receipt_query = ReceiptQuery :: new ( * event_contract . address ( ) , events[ 0 ] . clone ( ) ) ;
940
976
941
977
let block = rpc
942
978
. get_block (
0 commit comments