@@ -875,17 +875,17 @@ func (s *DriverTestSuite) TestGossipMessagesRandomReorgs() {
875
875
s .Equal (l2Head1 .Number .Uint64 (), headL1Origin .BlockID .Uint64 ())
876
876
}
877
877
878
- func (s * DriverTestSuite ) TestOnUnsafeL2PayloadWithMissingAncients () {
878
+ func (s * DriverTestSuite ) TestOnUnsafeL2PayloadWithMissingChildren () {
879
879
s .ForkIntoPacaya (s .p , s .d .ChainSyncer ().BlobSyncer ())
880
880
// Propose some valid L2 blocks
881
881
s .ProposeAndInsertEmptyBlocks (s .p , s .d .ChainSyncer ().BlobSyncer ())
882
882
883
- l2Head1 , err := s .d .rpc .L2 .HeaderByNumber (context .Background (), nil )
883
+ l2Head1 , err := s .d .rpc .L2 .BlockByNumber (context .Background (), nil )
884
884
s .Nil (err )
885
885
886
886
headL1Origin , err := s .RPCClient .L2 .HeadL1Origin (context .Background ())
887
887
s .Nil (err )
888
- s .Equal (l2Head1 .Number .Uint64 (), headL1Origin .BlockID .Uint64 ())
888
+ s .Equal (l2Head1 .Number () .Uint64 (), headL1Origin .BlockID .Uint64 ())
889
889
890
890
snapshotID := s .SetL1Snapshot ()
891
891
@@ -895,33 +895,54 @@ func (s *DriverTestSuite) TestOnUnsafeL2PayloadWithMissingAncients() {
895
895
896
896
l2Head2 , err := s .d .rpc .L2 .HeaderByNumber (context .Background (), nil )
897
897
s .Nil (err )
898
- s .Greater (l2Head2 .Number .Uint64 (), l2Head1 .Number .Uint64 ())
898
+ s .Greater (l2Head2 .Number .Uint64 (), l2Head1 .Number () .Uint64 ())
899
899
900
900
blocks := []* types.Block {}
901
- for i := l2Head1 .Number .Uint64 () + 1 ; i <= l2Head2 .Number .Uint64 (); i ++ {
901
+ for i := l2Head1 .Number () .Uint64 () + 1 ; i <= l2Head2 .Number .Uint64 (); i ++ {
902
902
block , err := s .RPCClient .L2 .BlockByNumber (context .Background (), new (big.Int ).SetUint64 (i ))
903
903
s .Nil (err )
904
904
blocks = append (blocks , block )
905
905
}
906
- s .Equal (l2Head2 .Number .Uint64 ()- l2Head1 .Number .Uint64 (), uint64 (len (blocks )))
906
+ s .Equal (l2Head2 .Number .Uint64 ()- l2Head1 .Number () .Uint64 (), uint64 (len (blocks )))
907
907
908
908
s .RevertL1Snapshot (snapshotID )
909
- s .Nil (rpc .SetHead (context .Background (), s .RPCClient .L2 , l2Head1 .Number ))
909
+ s .Nil (rpc .SetHead (context .Background (), s .RPCClient .L2 , l2Head1 .Number () ))
910
910
_ , err = s .RPCClient .L2Engine .SetHeadL1Origin (context .Background (), headL1Origin .BlockID )
911
911
s .Nil (err )
912
912
913
913
headL1Origin , err = s .RPCClient .L2 .HeadL1Origin (context .Background ())
914
914
s .Nil (err )
915
- s .Equal (l2Head1 .Number .Uint64 (), headL1Origin .BlockID .Uint64 ())
915
+ s .Equal (l2Head1 .Number () .Uint64 (), headL1Origin .BlockID .Uint64 ())
916
916
917
- l2Head3 , err := s .d .rpc .L2 .HeaderByNumber (context .Background (), nil )
917
+ l2Head3 , err := s .d .rpc .L2 .BlockByNumber (context .Background (), nil )
918
+ s .Nil (err )
919
+ s .Equal (l2Head1 .Number ().Uint64 (), l2Head3 .Number ().Uint64 ())
920
+
921
+ baseFee , overflow := uint256 .FromBig (l2Head1 .BaseFee ())
922
+ s .False (overflow )
923
+
924
+ b , err := utils .EncodeAndCompressTxList (l2Head1 .Transactions ())
918
925
s .Nil (err )
919
- s .Equal (l2Head1 .Number .Uint64 (), l2Head3 .Number .Uint64 ())
926
+ s .GreaterOrEqual (len (l2Head1 .Transactions ()), 1 )
927
+
928
+ s .d .preconfBlockServer .PutPayloadsCache (l2Head1 .Number ().Uint64 (), & eth.ExecutionPayload {
929
+ BlockHash : l2Head1 .Hash (),
930
+ ParentHash : l2Head1 .ParentHash (),
931
+ FeeRecipient : l2Head1 .Coinbase (),
932
+ PrevRandao : eth .Bytes32 (l2Head1 .MixDigest ()),
933
+ BlockNumber : eth .Uint64Quantity (l2Head1 .Number ().Uint64 ()),
934
+ GasLimit : eth .Uint64Quantity (l2Head1 .GasLimit ()),
935
+ Timestamp : eth .Uint64Quantity (l2Head1 .Time ()),
936
+ ExtraData : l2Head1 .Extra (),
937
+ BaseFeePerGas : eth .Uint256Quantity (* baseFee ),
938
+ Transactions : []eth.Data {b },
939
+ Withdrawals : & types.Withdrawals {},
940
+ })
920
941
921
942
// Randomly gossip preconfirmation messages with missing ancients
922
943
blockNums := rand .Perm (len (blocks ))
923
944
for i := range blockNums {
924
- blockNums [i ] += int (l2Head1 .Number .Uint64 () + 1 )
945
+ blockNums [i ] += int (l2Head1 .Number () .Uint64 () + 1 )
925
946
}
926
947
927
948
getBlock := func (blockNum uint64 ) * types.Block {
@@ -1001,7 +1022,7 @@ func (s *DriverTestSuite) TestOnUnsafeL2PayloadWithMissingAncients() {
1001
1022
1002
1023
// Insert all blocks except the first one
1003
1024
for _ , blockNum := range blockNums {
1004
- if blockNum == int (l2Head1 .Number .Uint64 ()+ 1 ) {
1025
+ if blockNum <= int (l2Head1 .Number () .Uint64 ()+ 2 ) {
1005
1026
continue
1006
1027
}
1007
1028
@@ -1013,10 +1034,33 @@ func (s *DriverTestSuite) TestOnUnsafeL2PayloadWithMissingAncients() {
1013
1034
1014
1035
l2Head4 , err := s .d .rpc .L2 .BlockByNumber (context .Background (), nil )
1015
1036
s .Nil (err )
1016
- s .Equal (l2Head1 .Number .Uint64 (), l2Head4 .Number ().Uint64 ())
1037
+ s .Equal (l2Head1 .Number ().Uint64 (), l2Head4 .Number ().Uint64 ())
1038
+
1039
+ // Insert the only two missing ancient blocks
1040
+ block := getBlock (l2Head1 .Number ().Uint64 () + 1 )
1041
+ s .NotNil (block )
1042
+ baseFee , overflow = uint256 .FromBig (block .BaseFee ())
1043
+ s .False (overflow )
1044
+
1045
+ b , err = utils .EncodeAndCompressTxList (block .Transactions ())
1046
+ s .Nil (err )
1047
+ s .GreaterOrEqual (len (block .Transactions ()), 1 )
1048
+
1049
+ s .d .preconfBlockServer .PutPayloadsCache (block .Number ().Uint64 (), & eth.ExecutionPayload {
1050
+ BlockHash : block .Hash (),
1051
+ ParentHash : block .ParentHash (),
1052
+ FeeRecipient : block .Coinbase (),
1053
+ PrevRandao : eth .Bytes32 (block .MixDigest ()),
1054
+ BlockNumber : eth .Uint64Quantity (block .Number ().Uint64 ()),
1055
+ GasLimit : eth .Uint64Quantity (block .GasLimit ()),
1056
+ Timestamp : eth .Uint64Quantity (block .Time ()),
1057
+ ExtraData : block .Extra (),
1058
+ BaseFeePerGas : eth .Uint256Quantity (* baseFee ),
1059
+ Transactions : []eth.Data {b },
1060
+ Withdrawals : & types.Withdrawals {},
1061
+ })
1017
1062
1018
- // Insert the only missing ancient block
1019
- block := getBlock (l2Head1 .Number .Uint64 () + 1 )
1063
+ block = getBlock (l2Head1 .Number ().Uint64 () + 2 )
1020
1064
s .NotNil (block )
1021
1065
insertPayloadFromBlock (block , false )
1022
1066
0 commit comments