@@ -19,6 +19,7 @@ use graph::futures03::future::try_join_all;
19
19
use graph:: futures03:: {
20
20
self , compat:: Future01CompatExt , FutureExt , StreamExt , TryFutureExt , TryStreamExt ,
21
21
} ;
22
+ use graph:: prelude:: alloy:: consensus:: BlockHeader ;
22
23
use graph:: prelude:: {
23
24
alloy:: {
24
25
self ,
@@ -44,12 +45,13 @@ use graph::slog::o;
44
45
use graph:: tokio:: sync:: RwLock ;
45
46
use graph:: tokio:: time:: timeout;
46
47
use graph:: util:: conversions:: alloy_block_to_web3_block;
48
+ use graph:: util:: conversions:: alloy_block_to_web3_block_arc;
47
49
use graph:: {
48
50
blockchain:: { block_stream:: BlockWithTriggers , BlockPtr , IngestorError } ,
49
51
prelude:: {
50
52
anyhow:: { self , anyhow, bail, ensure, Context } ,
51
53
async_trait, debug, error, hex, info, retry, serde_json as json, trace, warn,
52
- web3:: types:: { BlockId , Transaction , H256 } ,
54
+ web3:: types:: { Transaction , H256 } ,
53
55
BlockNumber , ChainStore , CheapClone , DynTryFuture , Error , EthereumCallCache , Logger ,
54
56
TimeoutError ,
55
57
} ,
@@ -718,12 +720,12 @@ impl EthereumAdapter {
718
720
fn load_blocks_rpc (
719
721
& self ,
720
722
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 ( ) ;
724
726
725
727
futures03:: stream:: iter ( ids. into_iter ( ) . map ( move |hash| {
726
- let web3 = web3 . clone ( ) ;
728
+ let alloy = alloy . clone ( ) ;
727
729
let logger = logger. clone ( ) ;
728
730
729
731
async move {
@@ -732,10 +734,11 @@ impl EthereumAdapter {
732
734
. limit ( ENV_VARS . request_retries )
733
735
. timeout_secs ( ENV_VARS . json_rpc_timeout . as_secs ( ) )
734
736
. run ( move || {
735
- let web3 = web3 . cheap_clone ( ) ;
737
+ let alloy = alloy . cheap_clone ( ) ;
736
738
async move {
737
- web3. eth ( )
738
- . block_with_txs ( BlockId :: Hash ( hash) )
739
+ alloy
740
+ . get_block_by_hash ( hash)
741
+ . full ( )
739
742
. await
740
743
. map_err ( Error :: from)
741
744
. and_then ( |block| {
@@ -1615,11 +1618,11 @@ impl EthereumAdapterTrait for EthereumAdapter {
1615
1618
& self ,
1616
1619
logger : Logger ,
1617
1620
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 > {
1620
1623
let block_hashes: Vec < _ > = block_hashes. iter ( ) . cloned ( ) . collect ( ) ;
1621
1624
// 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
1623
1626
. cheap_clone ( )
1624
1627
. blocks ( block_hashes. iter ( ) . map ( |& b| b. into ( ) ) . collect :: < Vec < _ > > ( ) )
1625
1628
. await
@@ -1633,18 +1636,18 @@ impl EthereumAdapterTrait for EthereumAdapter {
1633
1636
let missing_blocks = Vec :: from_iter (
1634
1637
block_hashes
1635
1638
. into_iter ( )
1636
- . filter ( |hash| !blocks. iter ( ) . any ( |b| b. hash == Some ( * hash) ) ) ,
1639
+ . filter ( |hash| !blocks. iter ( ) . any ( |b| b. header . hash == * hash) ) ,
1637
1640
) ;
1638
1641
1639
1642
// Return a stream that lazily loads batches of blocks.
1640
1643
debug ! ( logger, "Requesting {} block(s)" , missing_blocks. len( ) ) ;
1641
- let new_blocks: Vec < Arc < LightEthereumBlock > > = self
1644
+ let new_blocks: Vec < Arc < AlloyBlock > > = self
1642
1645
. load_blocks_rpc ( logger. clone ( ) , missing_blocks)
1643
1646
. try_collect ( )
1644
1647
. await ?;
1645
1648
let upsert_blocks: Vec < _ > = new_blocks
1646
1649
. iter ( )
1647
- . map ( |block| BlockFinality :: Final ( block. clone ( ) ) )
1650
+ . map ( |block| BlockFinality :: Final ( alloy_block_to_web3_block_arc ( block. clone ( ) ) ) )
1648
1651
. collect ( ) ;
1649
1652
let block_refs: Vec < _ > = upsert_blocks
1650
1653
. iter ( )
@@ -1654,7 +1657,7 @@ impl EthereumAdapterTrait for EthereumAdapter {
1654
1657
error ! ( logger, "Error writing to block cache {}" , e) ;
1655
1658
}
1656
1659
blocks. extend ( new_blocks) ;
1657
- blocks. sort_by_key ( |block| block. number ) ;
1660
+ blocks. sort_by_key ( |block| block. header . number ) ;
1658
1661
Ok ( blocks)
1659
1662
}
1660
1663
}
@@ -1697,7 +1700,7 @@ pub(crate) async fn blocks_with_triggers(
1697
1700
debug ! ( logger, "Finding nearest valid `to` block to {}" , to) ;
1698
1701
1699
1702
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 ( ) ;
1701
1704
let to = to_ptr. block_number ( ) ;
1702
1705
1703
1706
// 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(
1774
1777
. await
1775
1778
. with_context ( || format ! ( "Failed to obtain triggers for block {}" , to) ) ?;
1776
1779
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 ( ) ;
1779
1784
let mut triggers_by_block: HashMap < BlockNumber , Vec < EthereumTrigger > > =
1780
1785
triggers. into_iter ( ) . fold ( HashMap :: new ( ) , |mut map, t| {
1781
1786
map. entry ( t. block_number ( ) ) . or_default ( ) . push ( t) ;
@@ -1795,15 +1800,15 @@ pub(crate) async fn blocks_with_triggers(
1795
1800
. await ?
1796
1801
. into_iter ( )
1797
1802
. 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 ) ) {
1799
1804
Some ( triggers) => Ok ( BlockWithTriggers :: new (
1800
- BlockFinality :: Final ( block) ,
1805
+ BlockFinality :: Final ( alloy_block_to_web3_block_arc ( block) ) ,
1801
1806
triggers,
1802
1807
& logger2,
1803
1808
) ) ,
1804
1809
None => Err ( anyhow ! (
1805
1810
"block {} not found in `triggers_by_block`" ,
1806
- block. block_ptr ( )
1811
+ BlockPtr :: new ( block. header . hash . into ( ) , block . header . number as i32 )
1807
1812
) ) ,
1808
1813
} ,
1809
1814
)
0 commit comments