From 79e3c70f4d7c9ad204f8c164ff4bca96b8245fee Mon Sep 17 00:00:00 2001 From: Nazarii Denha Date: Sun, 29 Sep 2024 22:06:42 +0200 Subject: [PATCH] address comments --- rollup/internal/config/relayer.go | 4 +- .../internal/controller/relayer/l2_relayer.go | 38 +++++++++++++++++++ .../controller/sender/transaction_signer.go | 14 +++---- .../sender/transaction_signer_test.go | 7 ++-- 4 files changed, 50 insertions(+), 13 deletions(-) diff --git a/rollup/internal/config/relayer.go b/rollup/internal/config/relayer.go index fe776ebf2..78202c996 100644 --- a/rollup/internal/config/relayer.go +++ b/rollup/internal/config/relayer.go @@ -86,10 +86,10 @@ type GasOracleConfig struct { L1BlobBaseFeeDefault uint64 `json:"l1_blob_base_fee_default"` } -// SignerConfig - config of signer, contains type and private_key/address,remoteUrl depending on type +// SignerConfig - config of signer, contains type, private key (for PrivateKey type), address and remote URL (for RemoteSigner type) type SignerConfig struct { SignerType string `json:"signer_type"` // type of signer can be PrivateKey or RemoteSigner PrivateKey string `json:"private_key"` // private key of signer in case of PrivateKey signerType - RemoteSignerUrl string `json:"remote_signer_url"` // remote signer url (web3signer) if case of RemoteSigner signerType + RemoteSignerUrl string `json:"remote_signer_url"` // remote signer url (web3signer) in case of RemoteSigner signerType SignerAddress string `json:"signer_address"` // address of signer } diff --git a/rollup/internal/controller/relayer/l2_relayer.go b/rollup/internal/controller/relayer/l2_relayer.go index 371143355..57997b3fe 100644 --- a/rollup/internal/controller/relayer/l2_relayer.go +++ b/rollup/internal/controller/relayer/l2_relayer.go @@ -20,6 +20,7 @@ import ( "github.com/scroll-tech/go-ethereum/accounts/abi" "github.com/scroll-tech/go-ethereum/common" gethTypes "github.com/scroll-tech/go-ethereum/core/types" + "github.com/scroll-tech/go-ethereum/crypto" "github.com/scroll-tech/go-ethereum/crypto/kzg4844" "github.com/scroll-tech/go-ethereum/ethclient" "github.com/scroll-tech/go-ethereum/log" @@ -77,6 +78,25 @@ func NewLayer2Relayer(ctx context.Context, l2Client *ethclient.Client, db *gorm. var gasOracleSender, commitSender, finalizeSender *sender.Sender var err error + + // check that all 3 signer addresses are different, because there will be a problem in managing nonce for different senders + gasOracleSenderAddr, err := addrFromSignerConfig(cfg.GasOracleSenderSignerConfig) + if err != nil { + return nil, fmt.Errorf("failed to parse addr from gas oracle signer config, err: %v", err) + } + commitSenderAddr, err := addrFromSignerConfig(cfg.CommitSenderSignerConfig) + if err != nil { + return nil, fmt.Errorf("failed to parse addr from commit sender config, err: %v", err) + } + finalizeSenderAddr, err := addrFromSignerConfig(cfg.FinalizeSenderSignerConfig) + if err != nil { + return nil, fmt.Errorf("failed to parse addr from finalize sender config, err: %v", err) + } + if gasOracleSenderAddr == commitSenderAddr || gasOracleSenderAddr == finalizeSenderAddr || commitSenderAddr == finalizeSenderAddr { + return nil, fmt.Errorf("gas oracle, commit, and finalize sender addresses must be different. Got: Gas Oracle=%s, Commit=%s, Finalize=%s", + gasOracleSenderAddr.Hex(), commitSenderAddr.Hex(), finalizeSenderAddr.Hex()) + } + switch serviceType { case ServiceTypeL2GasOracle: gasOracleSender, err = sender.NewSender(ctx, cfg.SenderConfig, cfg.GasOracleSenderSignerConfig, "l2_relayer", "gas_oracle_sender", types.SenderTypeL2GasOracle, db, reg) @@ -1278,3 +1298,21 @@ func (r *Layer2Relayer) StopSenders() { r.finalizeSender.Stop() } } + +func addrFromSignerConfig(config *config.SignerConfig) (common.Address, error) { + switch config.SignerType { + case sender.PrivateKeySignerType: + privKey, err := crypto.ToECDSA(common.FromHex(config.PrivateKey)) + if err != nil { + return common.Address{}, fmt.Errorf("parse sender private key failed: %w", err) + } + return crypto.PubkeyToAddress(privKey.PublicKey), nil + case sender.RemoteSignerSignerType: + if config.SignerAddress == "" { + return common.Address{}, fmt.Errorf("signer address is empty") + } + return common.HexToAddress(config.SignerAddress), nil + default: + return common.Address{}, fmt.Errorf("failed to determine signer address, unknown signer type: %v", config.SignerType) + } +} diff --git a/rollup/internal/controller/sender/transaction_signer.go b/rollup/internal/controller/sender/transaction_signer.go index e500bd3fc..6250bd545 100644 --- a/rollup/internal/controller/sender/transaction_signer.go +++ b/rollup/internal/controller/sender/transaction_signer.go @@ -5,16 +5,15 @@ import ( "fmt" "math/big" - "scroll-tech/rollup/internal/config" - "github.com/scroll-tech/go-ethereum/accounts/abi/bind" + "github.com/scroll-tech/go-ethereum/common" "github.com/scroll-tech/go-ethereum/common/hexutil" gethTypes "github.com/scroll-tech/go-ethereum/core/types" "github.com/scroll-tech/go-ethereum/crypto" "github.com/scroll-tech/go-ethereum/log" - - "github.com/scroll-tech/go-ethereum/common" "github.com/scroll-tech/go-ethereum/rpc" + + "scroll-tech/rollup/internal/config" ) const ( @@ -46,10 +45,9 @@ func NewTransactionSigner(config *config.SignerConfig, chainID *big.Int) (*Trans return nil, fmt.Errorf("failed to create transactor with chain ID %v, err: %w", chainID, err) } return &TransactionSigner{ - config: config, - auth: auth, - rpcClient: nil, - addr: crypto.PubkeyToAddress(privKey.PublicKey), + config: config, + auth: auth, + addr: crypto.PubkeyToAddress(privKey.PublicKey), }, nil case RemoteSignerSignerType: if config.SignerAddress == "" { diff --git a/rollup/internal/controller/sender/transaction_signer_test.go b/rollup/internal/controller/sender/transaction_signer_test.go index b8878f8b0..fa877b42e 100644 --- a/rollup/internal/controller/sender/transaction_signer_test.go +++ b/rollup/internal/controller/sender/transaction_signer_test.go @@ -4,16 +4,17 @@ import ( "context" "math/big" "os" - "scroll-tech/common/testcontainers" "testing" - "scroll-tech/rollup/internal/config" - "github.com/holiman/uint256" "github.com/scroll-tech/go-ethereum/common" gethTypes "github.com/scroll-tech/go-ethereum/core/types" "github.com/scroll-tech/go-ethereum/log" "github.com/stretchr/testify/assert" + + "scroll-tech/common/testcontainers" + + "scroll-tech/rollup/internal/config" ) var (