@@ -676,14 +676,27 @@ func (client Client) CreateDummyBlocks(
676676 }
677677 gasPrice := big .NewInt (legacy .BaseFee )
678678 txSigner := types .LatestSignerForChainID (chainID )
679+ blockNumber , err := client .BlockNumber ()
680+ if err != nil {
681+ return fmt .Errorf ("client.BlockNumber failure: %w" , err )
682+ }
683+ nonce , err := client .NonceAt (addr .Hex ())
684+ if err != nil {
685+ return fmt .Errorf ("client.NonceAt failure: %w" , err )
686+ }
679687 for i := 0 ; i < numBlocks ; i ++ {
680- prevBlockNumber , err := client . BlockNumber ()
681- if err != nil {
688+ // it may be the case that we hit an outdated node with the rpc, so lets not fully trust the API
689+ if blockNumberFromAPI , err := client . BlockNumber (); err != nil {
682690 return fmt .Errorf ("client.BlockNumber failure at step %d: %w" , i , err )
691+ } else if blockNumberFromAPI > blockNumber {
692+ // changes from outside
693+ blockNumber = blockNumberFromAPI
683694 }
684- nonce , err := client .NonceAt (addr .Hex ())
685- if err != nil {
695+ if nonceFromAPI , err := client .NonceAt (addr .Hex ()); err != nil {
686696 return fmt .Errorf ("client.NonceAt failure at step %d: %w" , i , err )
697+ } else if nonceFromAPI > nonce {
698+ // changes from outside
699+ nonce = nonceFromAPI
687700 }
688701 // send Big1 to himself
689702 tx := types .NewTransaction (nonce , addr , common .Big1 , params .TxGas , gasPrice , nil )
@@ -694,9 +707,14 @@ func (client Client) CreateDummyBlocks(
694707 if err := client .SendTransaction (triggerTx ); err != nil {
695708 return fmt .Errorf ("client.SendTransaction failure at step %d: %w" , i , err )
696709 }
697- if err := client .WaitForNewBlock (prevBlockNumber , 0 ); err != nil {
710+ if err := client .WaitForNewBlock (blockNumber , 0 ); err != nil {
698711 return fmt .Errorf ("WaitForNewBlock failure at step %d: %w" , i , err )
699712 }
713+ blockNumber ++
714+ nonce ++
715+ if i != numBlocks - 1 {
716+ time .Sleep (5 * time .Second )
717+ }
700718 }
701719 return nil
702720}
0 commit comments