Skip to content

Commit 60bcd17

Browse files
author
Zoran Cvetkov
committed
two more
1 parent 7e0cb5f commit 60bcd17

File tree

1 file changed

+94
-11
lines changed

1 file changed

+94
-11
lines changed

chain/ethereum/src/ethereum_adapter.rs

Lines changed: 94 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)