@@ -1504,7 +1504,6 @@ impl EthereumAdapterTrait for EthereumAdapter {
15041504
15051505 async fn net_identifiers ( & self ) -> Result < ChainIdentifier , Error > {
15061506 let logger = self . logger . clone ( ) ;
1507- info ! ( logger, "!!!! net_identifiers" ) ;
15081507
15091508 let web3 = self . web3 . clone ( ) ;
15101509 let metrics = self . metrics . clone ( ) ;
@@ -1530,6 +1529,34 @@ impl EthereumAdapterTrait for EthereumAdapter {
15301529 e
15311530 } )
15321531 . boxed ( ) ;
1532+ let alloy = self . alloy . clone ( ) ;
1533+ let metrics = self . metrics . clone ( ) ;
1534+ let provider = self . provider ( ) . to_string ( ) ;
1535+ let net_version_future2 = retry ( "net_version RPC call" , & logger)
1536+ . redact_log_urls ( true )
1537+ . no_limit ( )
1538+ . timeout_secs ( 20 )
1539+ . run ( move || {
1540+ let alloy = alloy. cheap_clone ( ) ;
1541+ let metrics = metrics. cheap_clone ( ) ;
1542+ let provider = provider. clone ( ) ;
1543+ async move {
1544+ alloy
1545+ . get_net_version ( )
1546+ . await
1547+ . map ( |version| format ! ( "{}" , version) )
1548+ . map_err ( |e| {
1549+ metrics. set_status ( ProviderStatus :: VersionFail , & provider) ;
1550+ e. into ( )
1551+ } )
1552+ }
1553+ } )
1554+ . map_err ( |e| {
1555+ self . metrics
1556+ . set_status ( ProviderStatus :: VersionTimeout , self . provider ( ) ) ;
1557+ e
1558+ } )
1559+ . boxed ( ) ;
15331560
15341561 let web3 = self . web3 . clone ( ) ;
15351562 let metrics = self . metrics . clone ( ) ;
@@ -1565,19 +1592,62 @@ impl EthereumAdapterTrait for EthereumAdapter {
15651592 . set_status ( ProviderStatus :: GenesisTimeout , self . provider ( ) ) ;
15661593 e
15671594 } ) ;
1595+ let alloy = self . alloy . clone ( ) ;
1596+ let logger2 = logger. clone ( ) ;
1597+ let metrics = self . metrics . clone ( ) ;
1598+ let provider = self . provider ( ) . to_string ( ) ;
1599+ let retry_log_message = format ! (
1600+ "eth_getBlockByNumber({}, false) RPC call" ,
1601+ ENV_VARS . genesis_block_number
1602+ ) ;
1603+ let gen_block_hash_future2 = retry ( retry_log_message, & logger)
1604+ . redact_log_urls ( true )
1605+ . no_limit ( )
1606+ . timeout_secs ( 30 )
1607+ . run ( move || {
1608+ let alloy = alloy. cheap_clone ( ) ;
1609+ let logger = logger2. clone ( ) ;
1610+ let metrics = metrics. cheap_clone ( ) ;
1611+ let provider = provider. clone ( ) ;
1612+ async move {
1613+ Self :: load_block_rpc_alloy ( alloy, ENV_VARS . genesis_block_number , & logger)
1614+ . await
1615+ . map_err ( |e| {
1616+ metrics. set_status ( ProviderStatus :: GenesisFail , & provider) ;
1617+ e
1618+ } ) ?
1619+ . and_then ( |gen_block| gen_block. hash . map ( BlockHash :: from) )
1620+ . ok_or_else ( || anyhow ! ( "Ethereum node could not find genesis block" ) )
1621+ }
1622+ } )
1623+ . map_err ( |e| {
1624+ self . metrics
1625+ . set_status ( ProviderStatus :: GenesisTimeout , self . provider ( ) ) ;
1626+ e
1627+ } ) ;
15681628
1569- let ( net_version, genesis_block_hash) =
1570- try_join ! ( net_version_future, gen_block_hash_future) . map_err ( |e| {
1571- anyhow ! (
1572- "Ethereum node took too long to read network identifiers: {}" ,
1573- e
1574- )
1575- } ) ?;
1629+ let ( net_version, net_version2, genesis_block_hash, genesis_block_hash2) = try_join ! (
1630+ net_version_future,
1631+ net_version_future2,
1632+ gen_block_hash_future,
1633+ gen_block_hash_future2
1634+ )
1635+ . map_err ( |e| {
1636+ anyhow ! (
1637+ "Ethereum node took too long to read network identifiers: {}" ,
1638+ e
1639+ )
1640+ } ) ?;
15761641
15771642 let ident = ChainIdentifier {
15781643 net_version,
15791644 genesis_block_hash,
15801645 } ;
1646+ let ident2 = ChainIdentifier {
1647+ net_version : net_version2,
1648+ genesis_block_hash : genesis_block_hash2,
1649+ } ;
1650+ assert_eq ! ( ident, ident2) ;
15811651
15821652 self . metrics
15831653 . set_status ( ProviderStatus :: Working , self . provider ( ) ) ;
@@ -1833,14 +1903,14 @@ impl EthereumAdapterTrait for EthereumAdapter {
18331903 logger : & Logger ,
18341904 block_number : BlockNumber ,
18351905 ) -> Result < BlockPtr , Error > {
1836- info ! ( logger, "!!!! next_existing_ptr_to_number" ) ;
18371906 let mut next_number = block_number;
18381907 loop {
18391908 let retry_log_message = format ! (
18401909 "eth_getBlockByNumber RPC call for block number {}" ,
18411910 next_number
18421911 ) ;
18431912 let web3 = self . web3 . clone ( ) ;
1913+ let alloy = self . alloy . clone ( ) ;
18441914 let logger = logger. clone ( ) ;
18451915 let res = retry ( retry_log_message, & logger)
18461916 . redact_log_urls ( true )
@@ -1849,12 +1919,25 @@ impl EthereumAdapterTrait for EthereumAdapter {
18491919 . timeout_secs ( ENV_VARS . json_rpc_timeout . as_secs ( ) )
18501920 . run ( move || {
18511921 let web3 = web3. cheap_clone ( ) ;
1922+ let alloy = alloy. clone ( ) ;
1923+ let logger = logger. clone ( ) ;
18521924 async move {
1853- web3. eth ( )
1925+ let block1 = web3
1926+ . eth ( )
18541927 . block ( BlockId :: Number ( next_number. into ( ) ) )
18551928 . await
18561929 . map ( |block_opt| block_opt. and_then ( |block| block. hash ) )
1857- . map_err ( Error :: from)
1930+ . map_err ( Error :: from) ;
1931+ let block2 = Self :: load_block_rpc_alloy ( alloy, next_number as u64 , & logger)
1932+ . await
1933+ . map ( |block_opt| block_opt. and_then ( |block| block. hash ) )
1934+ . map_err ( Error :: from) ;
1935+ match ( & block1, & block2) {
1936+ ( Ok ( bl1) , Ok ( bl2) ) => assert_eq ! ( bl1, bl2) ,
1937+ ( _, _) => panic ! ( "next_existing_ptr_to_number" ) ,
1938+ } ;
1939+
1940+ block1
18581941 }
18591942 } )
18601943 . await
0 commit comments