Skip to content

Commit a322fb7

Browse files
lukeiannucciZaptoss
authored andcommitted
Move RegisterSigner to BatchPoster (EspressoSystems#691)
* dont register signer if dataposter is less than onchain * fixes * dont send tx if dataposter is ahead of on chain * cleanup * address comments
1 parent 5724652 commit a322fb7

File tree

6 files changed

+42
-21
lines changed

6 files changed

+42
-21
lines changed

arbnode/batch_poster.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1918,7 +1918,11 @@ func (b *BatchPoster) MaybePostSequencerBatch(ctx context.Context) (bool, error)
19181918
if espressoSubmitter := b.streamer.espressoSubmitter; espressoSubmitter != nil {
19191919
registered := espressoSubmitter.GetKeyManager().HasRegistered()
19201920
if !registered {
1921-
return false, fmt.Errorf("ephemeral keys are not yet registered in Espresso TEE Contract")
1921+
log.Warn("ephemeral keys are not yet registered in Espresso TEE Contract")
1922+
err := espressoSubmitter.RegisterSigner()
1923+
if err != nil {
1924+
return false, fmt.Errorf("unable to register signer: %w", err)
1925+
}
19221926
}
19231927
}
19241928

espresso/submitter/polling_espresso_submitter.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -704,12 +704,7 @@ func (s *PollingEspressoSubmitter) RegisterSigner() error {
704704

705705
func (s *PollingEspressoSubmitter) Start(sw *stopwaiter.StopWaiter) error {
706706
if s.lightClientReader != nil && s.espressoClient != nil {
707-
err := s.RegisterSigner()
708-
if err != nil {
709-
log.Error("failed to register espresso key manager", "err", err)
710-
return err
711-
}
712-
err = stopwaiter.CallIterativelyWith[struct{}](sw, s.pollSubmittedTransactionForFinality, nil)
707+
err := stopwaiter.CallIterativelyWith[struct{}](sw, s.pollSubmittedTransactionForFinality, nil)
713708
if err != nil {
714709
return err
715710
}

espresso/submitter/submitter.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ type EspressoSubmitter interface {
2424
Start(sw *stopwaiter.StopWaiter) error
2525
NotifyNewPendingMessages(pos arbutil.MessageIndex, messages []arbostypes.MessageWithMetadataAndBlockInfo) error
2626
GetKeyManager() espresso_key_manager.EspressoKeyManagerInterface
27+
RegisterSigner() error
2728

2829
IsEscapeHatchEnabled() bool
2930
GetLastConfirmedPosition() (*arbutil.MessageIndex, error)

espressotee/espresso_tee_helpers.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
package espressotee
22

33
import (
4+
"context"
45
"fmt"
56
"math/big"
67
"strings"
78
"time"
89

910
"github.com/spf13/pflag"
1011

12+
"github.com/ethereum/go-ethereum/ethclient"
1113
"github.com/ethereum/go-ethereum/log"
14+
15+
"github.com/offchainlabs/nitro/arbnode/dataposter"
1216
)
1317

1418
type TEE uint8
@@ -99,6 +103,30 @@ func BaseFeeCheck(
99103
return nil
100104
}
101105

106+
/**
107+
* This functions checks the dataposter nonce and the parent chains nonce
108+
* If these two differ, dont send a transaction as registering the signer is costly and we dont want to send multiple transactions.
109+
* This will constantly be called when we try and post a batch which will allow time for the two to eventually sync up.
110+
*/
111+
func NonceValidation(context context.Context, l1Client *ethclient.Client, dataPoster *dataposter.DataPoster) error {
112+
nonce, err := l1Client.NonceAt(context, dataPoster.Sender(), nil)
113+
if err != nil {
114+
log.Warn("could not retrieve on-chain nonce", "err", err)
115+
return err
116+
}
117+
dataPosterNonce, _, err := dataPoster.GetNextNonceAndMeta(context)
118+
if err != nil {
119+
log.Warn("error getting dataposter nonce", "err", err)
120+
return err
121+
}
122+
log.Info("successfully got datapaster next nonce and on-chain nonce", "dataposter nonce", dataPosterNonce, "on-chain nonce", nonce)
123+
if dataPosterNonce != nonce {
124+
log.Warn("dataposter and on-chain nonce have mismatch, not sending txn", "dataposter nonce", dataPosterNonce, "on-chain nonce", nonce)
125+
return err
126+
}
127+
return nil
128+
}
129+
102130
type EspressoRegisterSignerConfig struct {
103131
MaxTxnWaitTime time.Duration `koanf:"max-txn-wait-time"`
104132
RetryBaseFeeDelay time.Duration `koanf:"retry-base-fee-delay"`

espressotee/espresso_verifier.go

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -84,13 +84,10 @@ func (e *EspressoTEEVerifier) RegisterSigner(
8484
if err != nil {
8585
return err
8686
}
87-
nonce, err := e.l1Client.NonceAt(context.Background(), dataPoster.Sender(), nil)
88-
if err == nil {
89-
log.Info("registering signer: on chain nonce", "nonce", nonce)
90-
}
91-
dataPosterNonce, _, err := dataPoster.GetNextNonceAndMeta(context.Background())
92-
if err == nil {
93-
log.Info("registering signer: dataposter next nonce", "nonce", dataPosterNonce)
87+
88+
err = NonceValidation(context.Background(), e.l1Client, dataPoster)
89+
if err != nil {
90+
return err
9491
}
9592
// Add a buffer to the estimate for the gas limit
9693
gasLimit := estimate * (100 + registerSignerOpts.GasLimitBufferIncreasePercent) / 100

espressotee/nitro_verifier.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -91,13 +91,9 @@ func (e *EspressoNitroTEEVerifier) VerifyCert(
9191
if err != nil {
9292
return certHash, err
9393
}
94-
nonce, err := e.l1Client.NonceAt(context.Background(), dataPoster.Sender(), nil)
95-
if err == nil {
96-
log.Info("verify cert: on chain nonce", "nonce", nonce)
97-
}
98-
dataPosterNonce, _, err := dataPoster.GetNextNonceAndMeta(context.Background())
99-
if err == nil {
100-
log.Info("verify cert: dataposter next nonce", "nonce", dataPosterNonce)
94+
err = NonceValidation(context.Background(), e.l1Client, dataPoster)
95+
if err != nil {
96+
return certHash, err
10197
}
10298
// Add a buffer to the estimate for the gas limit
10399
gasLimit := estimate * (100 + registerSignerOpts.GasLimitBufferIncreasePercent) / 100

0 commit comments

Comments
 (0)