@@ -19,6 +19,7 @@ use graph::futures03::future::try_join_all;
1919use graph:: futures03:: {
2020 self , compat:: Future01CompatExt , FutureExt , StreamExt , TryFutureExt , TryStreamExt ,
2121} ;
22+ use graph:: prelude:: alloy:: consensus:: BlockHeader ;
2223use graph:: prelude:: {
2324 alloy:: {
2425 self ,
@@ -44,12 +45,13 @@ use graph::slog::o;
4445use graph:: tokio:: sync:: RwLock ;
4546use graph:: tokio:: time:: timeout;
4647use graph:: util:: conversions:: alloy_block_to_web3_block;
48+ use graph:: util:: conversions:: alloy_block_to_web3_block_arc;
4749use graph:: {
4850 blockchain:: { block_stream:: BlockWithTriggers , BlockPtr , IngestorError } ,
4951 prelude:: {
5052 anyhow:: { self , anyhow, bail, ensure, Context } ,
5153 async_trait, debug, error, hex, info, retry, serde_json as json, trace, warn,
52- web3:: types:: { BlockId , Transaction , H256 } ,
54+ web3:: types:: { Transaction , H256 } ,
5355 BlockNumber , ChainStore , CheapClone , DynTryFuture , Error , EthereumCallCache , Logger ,
5456 TimeoutError ,
5557 } ,
@@ -718,12 +720,12 @@ impl EthereumAdapter {
718720 fn load_blocks_rpc (
719721 & self ,
720722 logger : Logger ,
721- ids : Vec < H256 > ,
722- ) -> impl futures03:: Stream < Item = Result < Arc < LightEthereumBlock > , Error > > + Send {
723- let web3 = self . web3 . clone ( ) ;
723+ ids : Vec < B256 > ,
724+ ) -> impl futures03:: Stream < Item = Result < Arc < AlloyBlock > , Error > > + Send {
725+ let alloy = self . alloy . clone ( ) ;
724726
725727 futures03:: stream:: iter ( ids. into_iter ( ) . map ( move |hash| {
726- let web3 = web3 . clone ( ) ;
728+ let alloy = alloy . clone ( ) ;
727729 let logger = logger. clone ( ) ;
728730
729731 async move {
@@ -732,10 +734,11 @@ impl EthereumAdapter {
732734 . limit ( ENV_VARS . request_retries )
733735 . timeout_secs ( ENV_VARS . json_rpc_timeout . as_secs ( ) )
734736 . run ( move || {
735- let web3 = web3 . cheap_clone ( ) ;
737+ let alloy = alloy . cheap_clone ( ) ;
736738 async move {
737- web3. eth ( )
738- . block_with_txs ( BlockId :: Hash ( hash) )
739+ alloy
740+ . get_block_by_hash ( hash)
741+ . full ( )
739742 . await
740743 . map_err ( Error :: from)
741744 . and_then ( |block| {
@@ -1615,11 +1618,11 @@ impl EthereumAdapterTrait for EthereumAdapter {
16151618 & self ,
16161619 logger : Logger ,
16171620 chain_store : Arc < dyn ChainStore > ,
1618- block_hashes : HashSet < H256 > ,
1619- ) -> Result < Vec < Arc < LightEthereumBlock > > , Error > {
1621+ block_hashes : HashSet < B256 > ,
1622+ ) -> Result < Vec < Arc < AlloyBlock > > , Error > {
16201623 let block_hashes: Vec < _ > = block_hashes. iter ( ) . cloned ( ) . collect ( ) ;
16211624 // Search for the block in the store first then use json-rpc as a backup.
1622- let mut blocks: Vec < Arc < LightEthereumBlock > > = chain_store
1625+ let mut blocks: Vec < Arc < AlloyBlock > > = chain_store
16231626 . cheap_clone ( )
16241627 . blocks ( block_hashes. iter ( ) . map ( |& b| b. into ( ) ) . collect :: < Vec < _ > > ( ) )
16251628 . await
@@ -1633,18 +1636,18 @@ impl EthereumAdapterTrait for EthereumAdapter {
16331636 let missing_blocks = Vec :: from_iter (
16341637 block_hashes
16351638 . into_iter ( )
1636- . filter ( |hash| !blocks. iter ( ) . any ( |b| b. hash == Some ( * hash) ) ) ,
1639+ . filter ( |hash| !blocks. iter ( ) . any ( |b| b. header . hash == * hash) ) ,
16371640 ) ;
16381641
16391642 // Return a stream that lazily loads batches of blocks.
16401643 debug ! ( logger, "Requesting {} block(s)" , missing_blocks. len( ) ) ;
1641- let new_blocks: Vec < Arc < LightEthereumBlock > > = self
1644+ let new_blocks: Vec < Arc < AlloyBlock > > = self
16421645 . load_blocks_rpc ( logger. clone ( ) , missing_blocks)
16431646 . try_collect ( )
16441647 . await ?;
16451648 let upsert_blocks: Vec < _ > = new_blocks
16461649 . iter ( )
1647- . map ( |block| BlockFinality :: Final ( block. clone ( ) ) )
1650+ . map ( |block| BlockFinality :: Final ( alloy_block_to_web3_block_arc ( block. clone ( ) ) ) )
16481651 . collect ( ) ;
16491652 let block_refs: Vec < _ > = upsert_blocks
16501653 . iter ( )
@@ -1654,7 +1657,7 @@ impl EthereumAdapterTrait for EthereumAdapter {
16541657 error ! ( logger, "Error writing to block cache {}" , e) ;
16551658 }
16561659 blocks. extend ( new_blocks) ;
1657- blocks. sort_by_key ( |block| block. number ) ;
1660+ blocks. sort_by_key ( |block| block. header . number ) ;
16581661 Ok ( blocks)
16591662 }
16601663}
@@ -1697,7 +1700,7 @@ pub(crate) async fn blocks_with_triggers(
16971700 debug ! ( logger, "Finding nearest valid `to` block to {}" , to) ;
16981701
16991702 let to_ptr = eth. next_existing_ptr_to_number ( & logger, to) . await ?;
1700- let to_hash = to_ptr. hash_as_h256 ( ) ;
1703+ let to_hash = to_ptr. hash_as_b256 ( ) ;
17011704 let to = to_ptr. block_number ( ) ;
17021705
17031706 // This is for `start` triggers which can be initialization handlers which needs to be run
@@ -1774,8 +1777,10 @@ pub(crate) async fn blocks_with_triggers(
17741777 . await
17751778 . with_context ( || format ! ( "Failed to obtain triggers for block {}" , to) ) ?;
17761779
1777- let mut block_hashes: HashSet < H256 > =
1778- triggers. iter ( ) . map ( EthereumTrigger :: block_hash) . collect ( ) ;
1780+ let mut block_hashes: HashSet < B256 > = triggers
1781+ . iter ( )
1782+ . map ( |trigger| h256_to_b256 ( trigger. block_hash ( ) ) )
1783+ . collect ( ) ;
17791784 let mut triggers_by_block: HashMap < BlockNumber , Vec < EthereumTrigger > > =
17801785 triggers. into_iter ( ) . fold ( HashMap :: new ( ) , |mut map, t| {
17811786 map. entry ( t. block_number ( ) ) . or_default ( ) . push ( t) ;
@@ -1795,15 +1800,15 @@ pub(crate) async fn blocks_with_triggers(
17951800 . await ?
17961801 . into_iter ( )
17971802 . map (
1798- move |block| match triggers_by_block. remove ( & ( block. number ( ) as BlockNumber ) ) {
1803+ move |block| match triggers_by_block. remove ( & ( block. header . number ( ) as BlockNumber ) ) {
17991804 Some ( triggers) => Ok ( BlockWithTriggers :: new (
1800- BlockFinality :: Final ( block) ,
1805+ BlockFinality :: Final ( alloy_block_to_web3_block_arc ( block) ) ,
18011806 triggers,
18021807 & logger2,
18031808 ) ) ,
18041809 None => Err ( anyhow ! (
18051810 "block {} not found in `triggers_by_block`" ,
1806- block. block_ptr ( )
1811+ BlockPtr :: new ( block. header . hash . into ( ) , block . header . number as i32 )
18071812 ) ) ,
18081813 } ,
18091814 )
0 commit comments