1
1
use alloy:: primitives:: { TxKind , B256 , B64 } ;
2
2
use alloy:: providers:: { Provider , ProviderBuilder } ;
3
- use alloy_rpc_types:: { BlockTransactions , FilterBlockOption , TransactionInput , TransactionRequest } ;
3
+ use alloy_rpc_types:: {
4
+ BlockTransactions , FilterBlockOption , TransactionInput , TransactionRequest , TransactionTrait ,
5
+ } ;
4
6
use futures03:: { future:: BoxFuture , stream:: FuturesUnordered } ;
5
7
use graph:: abi;
6
8
use graph:: abi:: DynSolValueExt ;
@@ -1741,7 +1743,7 @@ impl EthereumAdapterTrait for EthereumAdapter {
1741
1743
} else {
1742
1744
let diff =
1743
1745
bl1. number . unwrap ( ) . as_u32 ( ) as i64 - bl2. number . unwrap ( ) . as_u32 ( ) as i64 ;
1744
- assert ! ( diff > -2 && diff < 2 )
1746
+ assert ! ( diff > -3 && diff < 3 )
1745
1747
}
1746
1748
}
1747
1749
( a, b) => panic ! ( "Not same types: {:?} and {:?}" , a, b) ,
@@ -1816,8 +1818,19 @@ impl EthereumAdapterTrait for EthereumAdapter {
1816
1818
} ) ;
1817
1819
1818
1820
match ( & ret, & ret2) {
1819
- ( Ok ( r1) , Ok ( r2) ) => assert_eq ! ( r1, r2) ,
1820
- ( r1, r2) => panic ! ( "Error(s): {:?} {:?}" , r1, r2) ,
1821
+ ( Ok ( r1) , Ok ( r2) ) => {
1822
+ // assert_eq!(r1, r2);
1823
+ if !semi_equal ( logger, r1, r2) {
1824
+ // info!(logger, "RET1: {:?}", r1);
1825
+ // info!(logger, "RET2: {:?}", r2);
1826
+ panic ! ( "Error - not equal!" ) ;
1827
+ }
1828
+ }
1829
+ ( r1, r2) => {
1830
+ info ! ( logger, "RET1: {:?}" , r1. is_ok( ) ) ;
1831
+ info ! ( logger, "RET2: {:?}" , r2. is_ok( ) ) ;
1832
+ info ! ( logger, "Error - not same!" ) ;
1833
+ }
1821
1834
}
1822
1835
1823
1836
ret. map ( Some )
@@ -1891,7 +1904,7 @@ impl EthereumAdapterTrait for EthereumAdapter {
1891
1904
)
1892
1905
. await ;
1893
1906
1894
- let log = logger. clone ( ) ;
1907
+ // let log = logger.clone();
1895
1908
let ret = fetch_receipts_with_retry (
1896
1909
alloy,
1897
1910
web3,
@@ -1905,7 +1918,7 @@ impl EthereumAdapterTrait for EthereumAdapter {
1905
1918
block : Arc :: new ( block) ,
1906
1919
transaction_receipts,
1907
1920
} ) ;
1908
- info ! ( log, "load_full_block is OK: {}" , ret. is_ok( ) ) ;
1921
+ // info!(log, "load_full_block is OK: {}", ret.is_ok());
1909
1922
ret
1910
1923
}
1911
1924
@@ -3001,7 +3014,6 @@ async fn fetch_block_receipts_with_retry(
3001
3014
} )
3002
3015
. await
3003
3016
. map_err ( |_timeout| -> IngestorError { anyhow ! ( block_hash) . into ( ) } ) ?;
3004
-
3005
3017
// Perform the retry operation
3006
3018
let receipts_option2 = retry ( retry_log_message, & logger)
3007
3019
. redact_log_urls ( true )
@@ -3015,7 +3027,33 @@ async fn fetch_block_receipts_with_retry(
3015
3027
. await
3016
3028
. map_err ( |_timeout| -> IngestorError { anyhow ! ( block_hash) . into ( ) } ) ?;
3017
3029
let receipts_option3: Option < Vec < TransactionReceipt > > = convert_receipts ( receipts_option2) ;
3018
- assert_eq ! ( receipts_option, receipts_option3) ;
3030
+ match ( & receipts_option, & receipts_option3) {
3031
+ ( None , None ) => todo ! ( ) ,
3032
+ ( None , Some ( _) ) => todo ! ( ) ,
3033
+ ( Some ( _) , None ) => todo ! ( ) ,
3034
+ ( Some ( r1) , Some ( r2) ) => {
3035
+ // info!(logger, "NUM1: {} NUM2: {}", r1.len(), r2.len());
3036
+ assert_eq ! ( r1. len( ) , r2. len( ) ) ;
3037
+ for i in 0 ..r1. len ( ) {
3038
+ let mut rec1 = r1[ i] . clone ( ) ;
3039
+ rec1. cumulative_gas_used = u64_to_u256 ( 0 ) ;
3040
+ rec1. transaction_type = None ;
3041
+ rec1. root = None ;
3042
+ let mut rec2 = r2[ i] . clone ( ) ;
3043
+ rec2. cumulative_gas_used = u64_to_u256 ( 0 ) ;
3044
+ rec2. transaction_type = None ;
3045
+ rec2. root = None ;
3046
+ // info!(logger, "R1: {:?}", r1[i]);
3047
+ // info!(logger, "R2: {:?}", r2[i]);
3048
+ // if r1[i] != r2[i] {
3049
+ // panic!("!!!! NE !!!!");
3050
+ // }
3051
+ assert_eq ! ( rec1, rec2)
3052
+ }
3053
+ }
3054
+ } ;
3055
+
3056
+ // assert_eq!(receipts_option, receipts_option3);
3019
3057
3020
3058
// Check if receipts are available, and transform them if they are
3021
3059
match receipts_option {
@@ -3386,8 +3424,8 @@ fn convert_receipts(
3386
3424
let block_number = receipt. block_number . map ( u64_to_u64) ;
3387
3425
let from = address_to_h160 ( receipt. from ) ;
3388
3426
let to = receipt. to . map ( address_to_h160) ;
3389
- let cumulative_gas_used = u64_to_u256 ( receipt. gas_used ) ;
3390
- let gas_used = Some ( cumulative_gas_used ) ;
3427
+ let cumulative_gas_used = u64_to_u256 ( receipt. blob_gas_used . unwrap_or_default ( ) ) ; // TODO: fix
3428
+ let gas_used = Some ( u64_to_u256 ( receipt . gas_used ) ) ;
3391
3429
let contract_address = receipt. contract_address . map ( address_to_h160) ;
3392
3430
let logs = convert_log ( receipt. logs ( ) ) ;
3393
3431
let status = Some ( bool_to_u64 ( receipt. status ( ) ) ) ;
@@ -3430,7 +3468,7 @@ fn tx_to_tx(
3430
3468
// }
3431
3469
let ret = items
3432
3470
. iter ( )
3433
- . map ( |tx| {
3471
+ . map ( |tx| -> Transaction {
3434
3472
// info!(logger, "TX: {:?}", tx);
3435
3473
let inner = tx. inner . inner ( ) ;
3436
3474
let hash = b256_to_h256 ( inner. hash ( ) . clone ( ) ) ;
@@ -3496,7 +3534,51 @@ fn tx_to_tx(
3496
3534
max_priority_fee_per_gas,
3497
3535
}
3498
3536
}
3499
- alloy:: consensus:: EthereumTxEnvelope :: Eip2930 ( _signed) => todo ! ( ) ,
3537
+ alloy:: consensus:: EthereumTxEnvelope :: Eip2930 ( signed) => {
3538
+ let nonce = u64_to_u256 ( signed. tx ( ) . nonce ( ) ) ;
3539
+ let to = if let Some ( to) = signed. tx ( ) . to ( ) {
3540
+ Some ( address_to_h160 ( to) )
3541
+ } else {
3542
+ None
3543
+ } ;
3544
+ let value = u256_to_u256 ( signed. tx ( ) . value ( ) ) ;
3545
+ let gas = u64_to_u256 ( signed. tx ( ) . gas_limit ( ) ) ;
3546
+ let input: web3:: types:: Bytes = signed. tx ( ) . input ( ) . clone ( ) . into ( ) ;
3547
+ let r = Some ( u256_to_u256 ( signed. signature ( ) . r ( ) ) ) ;
3548
+ let s = Some ( u256_to_u256 ( signed. signature ( ) . s ( ) ) ) ;
3549
+ let v_val =
3550
+ u128_to_u64 ( alloy:: consensus:: transaction:: to_eip155_value (
3551
+ signed. signature ( ) . v ( ) ,
3552
+ Some ( signed. tx ( ) . chain_id ( ) . unwrap ( ) ) ,
3553
+ ) ) ;
3554
+ let v = Some ( v_val) ;
3555
+ let transaction_type: Option < web3:: types:: U64 > = Some ( 2 . into ( ) ) ; // TODO: fix it
3556
+ let access_list = Some ( vec ! [ ] ) ; // TODO: fix it
3557
+ let max_fee_per_gas = Some ( u128_to_u256 ( signed. tx ( ) . max_fee_per_gas ( ) ) ) ;
3558
+ let max_priority_fee_per_gas =
3559
+ signed. tx ( ) . max_priority_fee_per_gas ( ) . map ( u128_to_u256) ;
3560
+ web3:: types:: Transaction {
3561
+ hash,
3562
+ nonce,
3563
+ block_hash,
3564
+ block_number,
3565
+ transaction_index,
3566
+ from,
3567
+ to,
3568
+ value,
3569
+ gas_price,
3570
+ gas,
3571
+ input,
3572
+ v,
3573
+ r,
3574
+ s,
3575
+ raw,
3576
+ transaction_type,
3577
+ access_list,
3578
+ max_fee_per_gas,
3579
+ max_priority_fee_per_gas,
3580
+ }
3581
+ }
3500
3582
alloy:: consensus:: EthereumTxEnvelope :: Eip1559 ( signed) => {
3501
3583
// info!(logger, "TX eip1559: {:?}", signed.tx());
3502
3584
let nonce = u64_to_u256 ( signed. tx ( ) . nonce ) ;
@@ -3548,8 +3630,98 @@ fn tx_to_tx(
3548
3630
max_priority_fee_per_gas,
3549
3631
}
3550
3632
}
3551
- alloy:: consensus:: EthereumTxEnvelope :: Eip4844 ( _signed) => todo ! ( ) ,
3552
- alloy:: consensus:: EthereumTxEnvelope :: Eip7702 ( _signed) => todo ! ( ) ,
3633
+ alloy:: consensus:: EthereumTxEnvelope :: Eip4844 ( signed) => {
3634
+ let nonce = u64_to_u256 ( signed. tx ( ) . nonce ( ) ) ;
3635
+ let to = if let Some ( to) = signed. tx ( ) . to ( ) {
3636
+ Some ( address_to_h160 ( to) )
3637
+ } else {
3638
+ None
3639
+ } ;
3640
+ let value = u256_to_u256 ( signed. tx ( ) . value ( ) ) ;
3641
+ let gas = u64_to_u256 ( signed. tx ( ) . gas_limit ( ) ) ;
3642
+ let input: web3:: types:: Bytes = signed. tx ( ) . input ( ) . clone ( ) . into ( ) ;
3643
+ let r = Some ( u256_to_u256 ( signed. signature ( ) . r ( ) ) ) ;
3644
+ let s = Some ( u256_to_u256 ( signed. signature ( ) . s ( ) ) ) ;
3645
+ let v_val =
3646
+ u128_to_u64 ( alloy:: consensus:: transaction:: to_eip155_value (
3647
+ signed. signature ( ) . v ( ) ,
3648
+ Some ( signed. tx ( ) . chain_id ( ) . unwrap ( ) ) ,
3649
+ ) ) ;
3650
+ let v = Some ( v_val) ;
3651
+ let transaction_type: Option < web3:: types:: U64 > = Some ( 2 . into ( ) ) ; // TODO: fix it
3652
+ let access_list = Some ( vec ! [ ] ) ; // TODO: fix it
3653
+ let max_fee_per_gas = Some ( u128_to_u256 ( signed. tx ( ) . max_fee_per_gas ( ) ) ) ;
3654
+ let max_priority_fee_per_gas = Some ( u128_to_u256 (
3655
+ signed. tx ( ) . max_priority_fee_per_gas ( ) . unwrap ( ) ,
3656
+ ) ) ;
3657
+ web3:: types:: Transaction {
3658
+ hash,
3659
+ nonce,
3660
+ block_hash,
3661
+ block_number,
3662
+ transaction_index,
3663
+ from,
3664
+ to,
3665
+ value,
3666
+ gas_price,
3667
+ gas,
3668
+ input,
3669
+ v,
3670
+ r,
3671
+ s,
3672
+ raw,
3673
+ transaction_type,
3674
+ access_list,
3675
+ max_fee_per_gas,
3676
+ max_priority_fee_per_gas,
3677
+ }
3678
+ }
3679
+ alloy:: consensus:: EthereumTxEnvelope :: Eip7702 ( signed) => {
3680
+ let nonce = u64_to_u256 ( signed. tx ( ) . nonce ( ) ) ;
3681
+ let to = if let Some ( to) = signed. tx ( ) . to ( ) {
3682
+ Some ( address_to_h160 ( to) )
3683
+ } else {
3684
+ None
3685
+ } ;
3686
+ let value = u256_to_u256 ( signed. tx ( ) . value ( ) ) ;
3687
+ let gas = u64_to_u256 ( signed. tx ( ) . gas_limit ( ) ) ;
3688
+ let input: web3:: types:: Bytes = signed. tx ( ) . input ( ) . clone ( ) . into ( ) ;
3689
+ let r = Some ( u256_to_u256 ( signed. signature ( ) . r ( ) ) ) ;
3690
+ let s = Some ( u256_to_u256 ( signed. signature ( ) . s ( ) ) ) ;
3691
+ let v_val =
3692
+ u128_to_u64 ( alloy:: consensus:: transaction:: to_eip155_value (
3693
+ signed. signature ( ) . v ( ) ,
3694
+ Some ( signed. tx ( ) . chain_id ( ) . unwrap ( ) ) ,
3695
+ ) ) ;
3696
+ let v = Some ( v_val) ;
3697
+ let transaction_type: Option < web3:: types:: U64 > = Some ( 2 . into ( ) ) ; // TODO: fix it
3698
+ let access_list = Some ( vec ! [ ] ) ; // TODO: fix it
3699
+ let max_fee_per_gas = Some ( u128_to_u256 ( signed. tx ( ) . max_fee_per_gas ( ) ) ) ;
3700
+ let max_priority_fee_per_gas = Some ( u128_to_u256 (
3701
+ signed. tx ( ) . max_priority_fee_per_gas ( ) . unwrap ( ) ,
3702
+ ) ) ;
3703
+ web3:: types:: Transaction {
3704
+ hash,
3705
+ nonce,
3706
+ block_hash,
3707
+ block_number,
3708
+ transaction_index,
3709
+ from,
3710
+ to,
3711
+ value,
3712
+ gas_price,
3713
+ gas,
3714
+ input,
3715
+ v,
3716
+ r,
3717
+ s,
3718
+ raw,
3719
+ transaction_type,
3720
+ access_list,
3721
+ max_fee_per_gas,
3722
+ max_priority_fee_per_gas,
3723
+ }
3724
+ }
3553
3725
}
3554
3726
} )
3555
3727
. collect :: < Vec < _ > > ( ) ;
@@ -3742,6 +3914,51 @@ fn convert_block_hash_alloy2web3(
3742
3914
Arc :: new ( block)
3743
3915
}
3744
3916
3917
+ fn semi_equal (
3918
+ logger : & Logger ,
3919
+ block1 : & web3:: types:: Block < Transaction > ,
3920
+ block2 : & web3:: types:: Block < Transaction > ,
3921
+ ) -> bool {
3922
+ if block1. transactions . len ( ) != block2. transactions . len ( ) {
3923
+ info ! (
3924
+ logger,
3925
+ "different TX sizes: {} vs {}" ,
3926
+ block1. transactions. len( ) ,
3927
+ block2. transactions. len( )
3928
+ ) ;
3929
+ return false ;
3930
+ }
3931
+ for i in 0 ..block1. transactions . len ( ) {
3932
+ let mut tx1 = block1. transactions [ i] . clone ( ) ;
3933
+ tx1. v = None ;
3934
+ tx1. transaction_type = None ;
3935
+ tx1. access_list = None ;
3936
+ tx1. max_fee_per_gas = None ;
3937
+ let mut tx2 = block2. transactions [ i] . clone ( ) ;
3938
+ tx2. v = None ;
3939
+ tx2. transaction_type = None ;
3940
+ tx2. access_list = None ;
3941
+ tx2. max_fee_per_gas = None ;
3942
+ if tx1 != tx2 {
3943
+ info ! ( logger, "different TX (block #{:?}):" , block1. number) ;
3944
+ info ! ( logger, "TX1: {:?}" , tx1) ;
3945
+ info ! ( logger, "TX2: {:?}" , tx2) ;
3946
+ return false ;
3947
+ }
3948
+ }
3949
+ let mut bl1 = block1. clone ( ) ;
3950
+ bl1. transactions = vec ! [ ] ;
3951
+ let mut bl2 = block2. clone ( ) ;
3952
+ bl2. transactions = vec ! [ ] ;
3953
+ if bl1 != bl2 {
3954
+ info ! ( logger, "different BL (block #{:?}):" , block1. number) ;
3955
+ info ! ( logger, "BL1: {:?}" , bl1) ;
3956
+ info ! ( logger, "BL2: {:?}" , bl2) ;
3957
+ return false ;
3958
+ }
3959
+ true
3960
+ }
3961
+
3745
3962
#[ cfg( test) ]
3746
3963
mod tests {
3747
3964
0 commit comments