@@ -205,7 +205,6 @@ func checkLogEvents(t *testing.T, logsCh <-chan []*types.Log, rmLogsCh <-chan co
205205func TestInvalidPayloadTimestamp (t * testing.T ) {
206206 genesis , preMergeBlocks := generatePreMergeChain (10 )
207207 n , ethservice := startEthService (t , genesis , preMergeBlocks )
208- ethservice .Merger ().ReachTTD ()
209208 defer n .Close ()
210209 var (
211210 api = NewConsensusAPI (ethservice )
@@ -250,7 +249,6 @@ func TestInvalidPayloadTimestamp(t *testing.T) {
250249func TestEth2NewBlock (t * testing.T ) {
251250 genesis , preMergeBlocks := generatePreMergeChain (10 )
252251 n , ethservice := startEthService (t , genesis , preMergeBlocks )
253- ethservice .Merger ().ReachTTD ()
254252 defer n .Close ()
255253
256254 var (
@@ -427,7 +425,6 @@ func startEthService(t *testing.T, genesis *core.Genesis, blocks []*types.Block)
427425func TestFullAPI (t * testing.T ) {
428426 genesis , preMergeBlocks := generatePreMergeChain (10 )
429427 n , ethservice := startEthService (t , genesis , preMergeBlocks )
430- ethservice .Merger ().ReachTTD ()
431428 defer n .Close ()
432429 var (
433430 parent = ethservice .BlockChain ().CurrentBlock ()
@@ -480,7 +477,6 @@ func setupBlocks(t *testing.T, ethservice *eth.Ethereum, n int, parent *types.Bl
480477func TestExchangeTransitionConfig (t * testing.T ) {
481478 genesis , preMergeBlocks := generatePreMergeChain (10 )
482479 n , ethservice := startEthService (t , genesis , preMergeBlocks )
483- ethservice .Merger ().ReachTTD ()
484480 defer n .Close ()
485481 var (
486482 api = NewConsensusAPI (ethservice )
@@ -543,7 +539,6 @@ CommonAncestor◄─▲── P1 ◄── P2 ◄─ P3 ◄─ ... ◄─ Pn
543539func TestNewPayloadOnInvalidChain (t * testing.T ) {
544540 genesis , preMergeBlocks := generatePreMergeChain (10 )
545541 n , ethservice := startEthService (t , genesis , preMergeBlocks )
546- ethservice .Merger ().ReachTTD ()
547542 defer n .Close ()
548543
549544 var (
@@ -618,7 +613,6 @@ func assembleBlock(api *ConsensusAPI, parentHash common.Hash, params *beacon.Pay
618613func TestEmptyBlocks (t * testing.T ) {
619614 genesis , preMergeBlocks := generatePreMergeChain (10 )
620615 n , ethservice := startEthService (t , genesis , preMergeBlocks )
621- ethservice .Merger ().ReachTTD ()
622616 defer n .Close ()
623617
624618 commonAncestor := ethservice .BlockChain ().CurrentBlock ()
@@ -734,8 +728,6 @@ func TestTrickRemoteBlockCache(t *testing.T) {
734728 genesis , preMergeBlocks := generatePreMergeChain (10 )
735729 nodeA , ethserviceA := startEthService (t , genesis , preMergeBlocks )
736730 nodeB , ethserviceB := startEthService (t , genesis , preMergeBlocks )
737- ethserviceA .Merger ().ReachTTD ()
738- ethserviceB .Merger ().ReachTTD ()
739731 defer nodeA .Close ()
740732 defer nodeB .Close ()
741733 for nodeB .Server ().NodeInfo ().Ports .Listener == 0 {
@@ -794,3 +786,51 @@ func TestTrickRemoteBlockCache(t *testing.T) {
794786 time .Sleep (100 * time .Millisecond )
795787 }
796788}
789+
790+ func TestNewPayloadOnInvalidTerminalBlock (t * testing.T ) {
791+ genesis , preMergeBlocks := generatePreMergeChain (100 )
792+ fmt .Println (genesis .Config .TerminalTotalDifficulty )
793+ genesis .Config .TerminalTotalDifficulty = preMergeBlocks [0 ].Difficulty () //.Sub(genesis.Config.TerminalTotalDifficulty, preMergeBlocks[len(preMergeBlocks)-1].Difficulty())
794+
795+ fmt .Println (genesis .Config .TerminalTotalDifficulty )
796+ n , ethservice := startEthService (t , genesis , preMergeBlocks )
797+ defer n .Close ()
798+
799+ var (
800+ api = NewConsensusAPI (ethservice )
801+ parent = preMergeBlocks [len (preMergeBlocks )- 1 ]
802+ )
803+
804+ // Test parent already post TTD in FCU
805+ fcState := beacon.ForkchoiceStateV1 {
806+ HeadBlockHash : parent .Hash (),
807+ SafeBlockHash : common.Hash {},
808+ FinalizedBlockHash : common.Hash {},
809+ }
810+ resp , err := api .ForkchoiceUpdatedV1 (fcState , nil )
811+ if err != nil {
812+ t .Fatalf ("error sending forkchoice, err=%v" , err )
813+ }
814+ if resp .PayloadStatus != beacon .INVALID_TERMINAL_BLOCK {
815+ t .Fatalf ("error sending invalid forkchoice, invalid status: %v" , resp .PayloadStatus .Status )
816+ }
817+
818+ // Test parent already post TTD in NewPayload
819+ params := beacon.PayloadAttributesV1 {
820+ Timestamp : parent .Time () + 1 ,
821+ Random : crypto .Keccak256Hash ([]byte {byte (1 )}),
822+ SuggestedFeeRecipient : parent .Coinbase (),
823+ }
824+ empty , err := api .eth .Miner ().GetSealingBlockSync (parent .Hash (), params .Timestamp , params .SuggestedFeeRecipient , params .Random , true )
825+ if err != nil {
826+ t .Fatalf ("error preparing payload, err=%v" , err )
827+ }
828+ data := * beacon .BlockToExecutableData (empty )
829+ resp2 , err := api .NewPayloadV1 (data )
830+ if err != nil {
831+ t .Fatalf ("error sending NewPayload, err=%v" , err )
832+ }
833+ if resp2 != beacon .INVALID_TERMINAL_BLOCK {
834+ t .Fatalf ("error sending invalid forkchoice, invalid status: %v" , resp .PayloadStatus .Status )
835+ }
836+ }
0 commit comments