@@ -2,7 +2,6 @@ package relayer
22
33import (
44 "context"
5- "crypto/ecdsa"
65 "errors"
76 "fmt"
87 "math/big"
@@ -76,18 +75,33 @@ type Layer2Relayer struct {
7675
7776// NewLayer2Relayer will return a new instance of Layer2RelayerClient
7877func NewLayer2Relayer (ctx context.Context , l2Client * ethclient.Client , db * gorm.DB , cfg * config.RelayerConfig , chainCfg * params.ChainConfig , initGenesis bool , serviceType ServiceType , reg prometheus.Registerer ) (* Layer2Relayer , error ) {
79- gasOracleSenderPrivateKey , commitSenderPrivateKey , finalizeSenderPrivateKey , err := parsePrivateKeys (cfg )
78+
79+ var gasOracleSender , commitSender , finalizeSender * sender.Sender
80+ var err error
81+
82+ // check that all 3 signer addresses are different, because there will be a problem in managing nonce for different senders
83+ gasOracleSenderAddr , err := addrFromSignerConfig (cfg .GasOracleSenderSignerConfig )
84+ if err != nil {
85+ return nil , fmt .Errorf ("failed to parse addr from gas oracle signer config, err: %v" , err )
86+ }
87+ commitSenderAddr , err := addrFromSignerConfig (cfg .CommitSenderSignerConfig )
88+ if err != nil {
89+ return nil , fmt .Errorf ("failed to parse addr from commit sender config, err: %v" , err )
90+ }
91+ finalizeSenderAddr , err := addrFromSignerConfig (cfg .FinalizeSenderSignerConfig )
8092 if err != nil {
81- return nil , fmt .Errorf ("failed to parse private keys provided by config, err: %v" , err )
93+ return nil , fmt .Errorf ("failed to parse addr from finalize sender config, err: %v" , err )
94+ }
95+ if gasOracleSenderAddr == commitSenderAddr || gasOracleSenderAddr == finalizeSenderAddr || commitSenderAddr == finalizeSenderAddr {
96+ return nil , fmt .Errorf ("gas oracle, commit, and finalize sender addresses must be different. Got: Gas Oracle=%s, Commit=%s, Finalize=%s" ,
97+ gasOracleSenderAddr .Hex (), commitSenderAddr .Hex (), finalizeSenderAddr .Hex ())
8298 }
8399
84- var gasOracleSender , commitSender , finalizeSender * sender.Sender
85100 switch serviceType {
86101 case ServiceTypeL2GasOracle :
87- gasOracleSender , err = sender .NewSender (ctx , cfg .SenderConfig , gasOracleSenderPrivateKey , "l2_relayer" , "gas_oracle_sender" , types .SenderTypeL2GasOracle , db , reg )
102+ gasOracleSender , err = sender .NewSender (ctx , cfg .SenderConfig , cfg . GasOracleSenderSignerConfig , "l2_relayer" , "gas_oracle_sender" , types .SenderTypeL2GasOracle , db , reg )
88103 if err != nil {
89- addr := crypto .PubkeyToAddress (gasOracleSenderPrivateKey .PublicKey )
90- return nil , fmt .Errorf ("new gas oracle sender failed for address %s, err: %w" , addr .Hex (), err )
104+ return nil , fmt .Errorf ("new gas oracle sender failed, err: %w" , err )
91105 }
92106
93107 // Ensure test features aren't enabled on the ethereum mainnet.
@@ -96,16 +110,14 @@ func NewLayer2Relayer(ctx context.Context, l2Client *ethclient.Client, db *gorm.
96110 }
97111
98112 case ServiceTypeL2RollupRelayer :
99- commitSender , err = sender .NewSender (ctx , cfg .SenderConfig , commitSenderPrivateKey , "l2_relayer" , "commit_sender" , types .SenderTypeCommitBatch , db , reg )
113+ commitSender , err = sender .NewSender (ctx , cfg .SenderConfig , cfg . CommitSenderSignerConfig , "l2_relayer" , "commit_sender" , types .SenderTypeCommitBatch , db , reg )
100114 if err != nil {
101- addr := crypto .PubkeyToAddress (commitSenderPrivateKey .PublicKey )
102- return nil , fmt .Errorf ("new commit sender failed for address %s, err: %w" , addr .Hex (), err )
115+ return nil , fmt .Errorf ("new commit sender failed, err: %w" , err )
103116 }
104117
105- finalizeSender , err = sender .NewSender (ctx , cfg .SenderConfig , finalizeSenderPrivateKey , "l2_relayer" , "finalize_sender" , types .SenderTypeFinalizeBatch , db , reg )
118+ finalizeSender , err = sender .NewSender (ctx , cfg .SenderConfig , cfg . FinalizeSenderSignerConfig , "l2_relayer" , "finalize_sender" , types .SenderTypeFinalizeBatch , db , reg )
106119 if err != nil {
107- addr := crypto .PubkeyToAddress (finalizeSenderPrivateKey .PublicKey )
108- return nil , fmt .Errorf ("new finalize sender failed for address %s, err: %w" , addr .Hex (), err )
120+ return nil , fmt .Errorf ("new finalize sender failed, err: %w" , err )
109121 }
110122
111123 // Ensure test features aren't enabled on the ethereum mainnet.
@@ -1287,35 +1299,20 @@ func (r *Layer2Relayer) StopSenders() {
12871299 }
12881300}
12891301
1290- func parsePrivateKeys (cfg * config.RelayerConfig ) (* ecdsa.PrivateKey , * ecdsa.PrivateKey , * ecdsa.PrivateKey , error ) {
1291- parseKey := func (hexKey string ) (* ecdsa.PrivateKey , error ) {
1292- return crypto .ToECDSA (common .FromHex (hexKey ))
1293- }
1294-
1295- gasOracleKey , err := parseKey (cfg .GasOracleSenderPrivateKey )
1296- if err != nil {
1297- return nil , nil , nil , fmt .Errorf ("parse gas oracle sender private key failed: %w" , err )
1298- }
1299-
1300- commitKey , err := parseKey (cfg .CommitSenderPrivateKey )
1301- if err != nil {
1302- return nil , nil , nil , fmt .Errorf ("parse commit sender private key failed: %w" , err )
1303- }
1304-
1305- finalizeKey , err := parseKey (cfg .FinalizeSenderPrivateKey )
1306- if err != nil {
1307- return nil , nil , nil , fmt .Errorf ("parse finalize sender private key failed: %w" , err )
1308- }
1309-
1310- // Check if all three private keys are different
1311- addrGasOracle := crypto .PubkeyToAddress (gasOracleKey .PublicKey )
1312- addrCommit := crypto .PubkeyToAddress (commitKey .PublicKey )
1313- addrFinalize := crypto .PubkeyToAddress (finalizeKey .PublicKey )
1314-
1315- if addrGasOracle == addrCommit || addrGasOracle == addrFinalize || addrCommit == addrFinalize {
1316- return nil , nil , nil , fmt .Errorf ("gas oracle, commit, and finalize sender addresses must be different. Got: Gas Oracle=%s, Commit=%s, Finalize=%s" ,
1317- addrGasOracle .Hex (), addrCommit .Hex (), addrFinalize .Hex ())
1302+ func addrFromSignerConfig (config * config.SignerConfig ) (common.Address , error ) {
1303+ switch config .SignerType {
1304+ case sender .PrivateKeySignerType :
1305+ privKey , err := crypto .ToECDSA (common .FromHex (config .PrivateKeySignerConfig .PrivateKey ))
1306+ if err != nil {
1307+ return common.Address {}, fmt .Errorf ("parse sender private key failed: %w" , err )
1308+ }
1309+ return crypto .PubkeyToAddress (privKey .PublicKey ), nil
1310+ case sender .RemoteSignerType :
1311+ if config .RemoteSignerConfig .SignerAddress == "" {
1312+ return common.Address {}, fmt .Errorf ("signer address is empty" )
1313+ }
1314+ return common .HexToAddress (config .RemoteSignerConfig .SignerAddress ), nil
1315+ default :
1316+ return common.Address {}, fmt .Errorf ("failed to determine signer address, unknown signer type: %v" , config .SignerType )
13181317 }
1319-
1320- return gasOracleKey , commitKey , finalizeKey , nil
13211318}
0 commit comments