11#[ path = "./common/mod.rs" ]
22mod test_common;
33
4+ use alloy:: {
5+ consensus:: { BlockBody , BlockHeader , Signed , TxEip1559 , TxEnvelope } ,
6+ primitives:: { Address , B256 , U256 } ,
7+ signers:: Signature ,
8+ } ;
9+ use reth:: providers:: { BlockNumReader , BlockReader } ;
10+ use signet_constants:: test_utils:: { DEPLOY_HEIGHT , RU_CHAIN_ID } ;
411use signet_db:: RuWriter ;
12+ use signet_types:: primitives:: { RecoveredBlock , SealedBlock , SealedHeader } ;
13+ use signet_zenith:: Zenith ;
514
615#[ test]
716fn test_ru_writer ( ) {
@@ -11,3 +20,63 @@ fn test_ru_writer() {
1120
1221 dbg ! ( writer. last_block_number( ) . unwrap( ) ) ;
1322}
23+
24+ #[ test]
25+ fn test_insert_signet_block ( ) {
26+ let factory = test_common:: create_test_provider_factory ( ) ;
27+ let writer = factory. provider_rw ( ) . unwrap ( ) ;
28+
29+ let journal_hash = B256 :: repeat_byte ( 0x55 ) ;
30+ let header = Some ( Zenith :: BlockHeader {
31+ rollupChainId : U256 :: from ( RU_CHAIN_ID ) ,
32+ hostBlockNumber : U256 :: from ( DEPLOY_HEIGHT ) ,
33+ gasLimit : U256 :: from ( 30_000_000 ) ,
34+ rewardAddress : Address :: repeat_byte ( 0x11 ) ,
35+ blockDataHash : B256 :: repeat_byte ( 0x22 ) ,
36+ } ) ;
37+
38+ let block = RecoveredBlock {
39+ block : SealedBlock {
40+ header : SealedHeader :: new ( alloy:: consensus:: Header :: default ( ) ) ,
41+ body : BlockBody {
42+ transactions : std:: iter:: repeat (
43+ TxEnvelope :: Eip1559 ( Signed :: new_unhashed (
44+ TxEip1559 :: default ( ) ,
45+ Signature :: test_signature ( ) ,
46+ ) )
47+ . into ( ) ,
48+ )
49+ . take ( 10 )
50+ . collect ( ) ,
51+ ommers : vec ! [ ] ,
52+ withdrawals : None ,
53+ } ,
54+ } ,
55+ senders : std:: iter:: repeat ( Address :: repeat_byte ( 0x33 ) ) . take ( 10 ) . collect ( ) ,
56+ } ;
57+
58+ writer
59+ . insert_signet_block ( header, & block, journal_hash, reth:: providers:: StorageLocation :: Both )
60+ . unwrap ( ) ;
61+
62+ // Check basic updates
63+ assert_eq ! ( writer. last_block_number( ) . unwrap( ) , block. number( ) ) ;
64+ assert_eq ! ( writer. latest_journal_hash( ) . unwrap( ) , journal_hash) ;
65+ assert_eq ! ( writer. get_journal_hash( block. number( ) ) . unwrap( ) , Some ( journal_hash) ) ;
66+ // This tests resolving `BlockId::Latest`
67+ assert_eq ! ( writer. best_block_number( ) . unwrap( ) , block. number( ) ) ;
68+
69+ // Check that the block can be loaded back
70+ let loaded_block = writer
71+ . recovered_block_range ( block. number ( ) ..=block. number ( ) )
72+ . unwrap ( )
73+ . first ( )
74+ . cloned ( )
75+ . unwrap ( ) ;
76+ assert_eq ! ( loaded_block. header( ) , block. block. header. header( ) ) ;
77+ assert_eq ! ( loaded_block. body( ) . transactions. len( ) , block. block. body. transactions. len( ) ) ;
78+
79+ // Check that the ZenithHeader can be loaded back
80+ let loaded_header = writer. get_signet_header ( block. number ( ) ) . unwrap ( ) ;
81+ assert_eq ! ( loaded_header, header) ;
82+ }
0 commit comments