Skip to content

Commit e3c87e6

Browse files
authored
feat(sender): support web3signer (#1524)
1 parent a1d1cbc commit e3c87e6

File tree

16 files changed

+534
-145
lines changed

16 files changed

+534
-145
lines changed

common/testcontainers/testcontainers.go

Lines changed: 58 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,10 @@ import (
2121

2222
// TestcontainerApps testcontainers struct
2323
type TestcontainerApps struct {
24-
postgresContainer *postgres.PostgresContainer
25-
l2GethContainer *testcontainers.DockerContainer
26-
poSL1Container compose.ComposeStack
24+
postgresContainer *postgres.PostgresContainer
25+
l2GethContainer *testcontainers.DockerContainer
26+
poSL1Container compose.ComposeStack
27+
web3SignerContainer *testcontainers.DockerContainer
2728

2829
// common time stamp in nanoseconds.
2930
Timestamp int
@@ -112,6 +113,47 @@ func (t *TestcontainerApps) StartPoSL1Container() error {
112113
return nil
113114
}
114115

116+
func (t *TestcontainerApps) StartWeb3SignerContainer(chainId int) error {
117+
if t.web3SignerContainer != nil && t.web3SignerContainer.IsRunning() {
118+
return nil
119+
}
120+
var (
121+
err error
122+
rootDir string
123+
)
124+
if rootDir, err = findProjectRootDir(); err != nil {
125+
return fmt.Errorf("failed to find project root directory: %v", err)
126+
}
127+
128+
// web3signerconf/keyconf.yaml may contain multiple keys configured and web3signer then choses one corresponding to from field of tx
129+
web3SignerConfDir := filepath.Join(rootDir, "common", "testcontainers", "web3signerconf")
130+
131+
req := testcontainers.ContainerRequest{
132+
Image: "consensys/web3signer:develop",
133+
ExposedPorts: []string{"9000/tcp"},
134+
Cmd: []string{"--key-config-path", "/web3signerconf/", "eth1", "--chain-id", fmt.Sprintf("%d", chainId)},
135+
Files: []testcontainers.ContainerFile{
136+
{
137+
HostFilePath: web3SignerConfDir,
138+
ContainerFilePath: "/",
139+
FileMode: 0o777,
140+
},
141+
},
142+
WaitingFor: wait.ForLog("ready to handle signing requests"),
143+
}
144+
genericContainerReq := testcontainers.GenericContainerRequest{
145+
ContainerRequest: req,
146+
Started: true,
147+
}
148+
container, err := testcontainers.GenericContainer(context.Background(), genericContainerReq)
149+
if err != nil {
150+
log.Printf("failed to start web3signer container: %s", err)
151+
return err
152+
}
153+
t.web3SignerContainer, _ = container.(*testcontainers.DockerContainer)
154+
return nil
155+
}
156+
115157
// GetPoSL1EndPoint returns the endpoint of the running PoS L1 endpoint
116158
func (t *TestcontainerApps) GetPoSL1EndPoint() (string, error) {
117159
if t.poSL1Container == nil {
@@ -153,6 +195,14 @@ func (t *TestcontainerApps) GetL2GethEndPoint() (string, error) {
153195
return endpoint, nil
154196
}
155197

198+
// GetL2GethEndPoint returns the endpoint of the running L2Geth container
199+
func (t *TestcontainerApps) GetWeb3SignerEndpoint() (string, error) {
200+
if t.web3SignerContainer == nil || !t.web3SignerContainer.IsRunning() {
201+
return "", errors.New("web3signer is not running")
202+
}
203+
return t.web3SignerContainer.PortEndpoint(context.Background(), "9000/tcp", "http")
204+
}
205+
156206
// GetGormDBClient returns a gorm.DB by connecting to the running postgres container
157207
func (t *TestcontainerApps) GetGormDBClient() (*gorm.DB, error) {
158208
endpoint, err := t.GetDBEndPoint()
@@ -201,6 +251,11 @@ func (t *TestcontainerApps) Free() {
201251
t.poSL1Container = nil
202252
}
203253
}
254+
if t.web3SignerContainer != nil && t.web3SignerContainer.IsRunning() {
255+
if err := t.web3SignerContainer.Terminate(ctx); err != nil {
256+
log.Printf("failed to stop web3signer container: %s", err)
257+
}
258+
}
204259
}
205260

206261
// findProjectRootDir find project root directory

common/testcontainers/testcontainers_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,11 @@ func TestNewTestcontainerApps(t *testing.T) {
4444
assert.NoError(t, err)
4545
assert.NotNil(t, ethclient)
4646

47+
assert.NoError(t, testApps.StartWeb3SignerContainer(1))
48+
endpoint, err = testApps.GetWeb3SignerEndpoint()
49+
assert.NoError(t, err)
50+
assert.NotEmpty(t, endpoint)
51+
4752
// test free testcontainers
4853
testApps.Free()
4954
endpoint, err = testApps.GetDBEndPoint()
@@ -57,4 +62,8 @@ func TestNewTestcontainerApps(t *testing.T) {
5762
endpoint, err = testApps.GetPoSL1EndPoint()
5863
assert.EqualError(t, err, "PoS L1 container is not running")
5964
assert.Empty(t, endpoint)
65+
66+
endpoint, err = testApps.GetWeb3SignerEndpoint()
67+
assert.EqualError(t, err, "web3signer is not running")
68+
assert.Empty(t, endpoint)
6069
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
type: "file-raw"
2+
keyType: "SECP256K1"
3+
privateKey: "0x1313131313131313131313131313131313131313131313131313131313131313"
4+
---
5+
type: "file-raw"
6+
keyType: "SECP256K1"
7+
privateKey: "0x1212121212121212121212121212121212121212121212121212121212121212"

common/version/version.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import (
55
"runtime/debug"
66
)
77

8-
var tag = "v4.4.63"
8+
var tag = "v4.4.64"
99

1010
var commit = func() string {
1111
if info, ok := debug.ReadBuildInfo(); ok {

rollup/conf/config.json

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,12 @@
2424
"l1_base_fee_default": 15000000000,
2525
"l1_blob_base_fee_default": 1
2626
},
27-
"gas_oracle_sender_private_key": "1313131313131313131313131313131313131313131313131313131313131313"
27+
"gas_oracle_sender_signer_config": {
28+
"signer_type": "PrivateKey",
29+
"private_key_signer_config": {
30+
"private_key": "1313131313131313131313131313131313131313131313131313131313131313"
31+
}
32+
}
2833
}
2934
},
3035
"l2_config": {
@@ -60,9 +65,24 @@
6065
"enable_test_env_bypass_features": true,
6166
"finalize_batch_without_proof_timeout_sec": 7200,
6267
"finalize_bundle_without_proof_timeout_sec": 7200,
63-
"gas_oracle_sender_private_key": "1313131313131313131313131313131313131313131313131313131313131313",
64-
"commit_sender_private_key": "1414141414141414141414141414141414141414141414141414141414141414",
65-
"finalize_sender_private_key": "1515151515151515151515151515151515151515151515151515151515151515",
68+
"gas_oracle_sender_signer_config": {
69+
"signer_type": "PrivateKey",
70+
"private_key_signer_config": {
71+
"private_key": "1313131313131313131313131313131313131313131313131313131313131313"
72+
}
73+
},
74+
"commit_sender_signer_config": {
75+
"signer_type": "PrivateKey",
76+
"private_key_signer_config": {
77+
"private_key": "1414141414141414141414141414141414141414141414141414141414141414"
78+
}
79+
},
80+
"finalize_sender_signer_config": {
81+
"signer_type": "PrivateKey",
82+
"private_key_signer_config": {
83+
"private_key": "1515151515151515151515151515151515151515151515151515151515151515"
84+
}
85+
},
6686
"l1_commit_gas_limit_multiplier": 1.2
6787
},
6888
"chunk_proposer_config": {

rollup/internal/config/config_test.go

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -61,24 +61,25 @@ func TestConfig(t *testing.T) {
6161
assert.NoError(t, err)
6262

6363
os.Setenv("SCROLL_ROLLUP_DB_CONFIG_DSN", "postgres://test:test@postgresql:5432/scroll?sslmode=disable")
64-
os.Setenv("SCROLL_ROLLUP_L1_CONFIG_RELAYER_CONFIG_GAS_ORACLE_SENDER_PRIVATE_KEY", "1616161616161616161616161616161616161616161616161616161616161616")
65-
os.Setenv("SCROLL_ROLLUP_L2_CONFIG_RELAYER_CONFIG_GAS_ORACLE_SENDER_PRIVATE_KEY", "1717171717171717171717171717171717171717171717171717171717171717")
66-
os.Setenv("SCROLL_ROLLUP_L2_CONFIG_RELAYER_CONFIG_COMMIT_SENDER_PRIVATE_KEY", "1818181818181818181818181818181818181818181818181818181818181818")
67-
os.Setenv("SCROLL_ROLLUP_L2_CONFIG_RELAYER_CONFIG_FINALIZE_SENDER_PRIVATE_KEY", "1919191919191919191919191919191919191919191919191919191919191919")
64+
os.Setenv("SCROLL_ROLLUP_L1_CONFIG_RELAYER_CONFIG_GAS_ORACLE_SENDER_SIGNER_CONFIG_PRIVATE_KEY_SIGNER_CONFIG_PRIVATE_KEY", "1616161616161616161616161616161616161616161616161616161616161616")
65+
os.Setenv("SCROLL_ROLLUP_L2_CONFIG_RELAYER_CONFIG_GAS_ORACLE_SENDER_SIGNER_CONFIG_PRIVATE_KEY_SIGNER_CONFIG_PRIVATE_KEY", "1717171717171717171717171717171717171717171717171717171717171717")
66+
os.Setenv("SCROLL_ROLLUP_L2_CONFIG_RELAYER_CONFIG_COMMIT_SENDER_SIGNER_CONFIG_PRIVATE_KEY_SIGNER_CONFIG_PRIVATE_KEY", "1818181818181818181818181818181818181818181818181818181818181818")
67+
os.Setenv("SCROLL_ROLLUP_L2_CONFIG_RELAYER_CONFIG_FINALIZE_SENDER_SIGNER_CONFIG_PRIVATE_KEY_SIGNER_CONFIG_PRIVATE_KEY", "1919191919191919191919191919191919191919191919191919191919191919")
6868

6969
cfg2, err := NewConfig("../../conf/config.json")
7070
assert.NoError(t, err)
7171

7272
assert.NotEqual(t, cfg.DBConfig.DSN, cfg2.DBConfig.DSN)
73-
assert.NotEqual(t, cfg.L1Config.RelayerConfig.GasOracleSenderPrivateKey, cfg2.L1Config.RelayerConfig.GasOracleSenderPrivateKey)
74-
assert.NotEqual(t, cfg.L2Config.RelayerConfig.GasOracleSenderPrivateKey, cfg2.L2Config.RelayerConfig.GasOracleSenderPrivateKey)
75-
assert.NotEqual(t, cfg.L2Config.RelayerConfig.CommitSenderPrivateKey, cfg2.L2Config.RelayerConfig.CommitSenderPrivateKey)
76-
assert.NotEqual(t, cfg.L2Config.RelayerConfig.FinalizeSenderPrivateKey, cfg2.L2Config.RelayerConfig.FinalizeSenderPrivateKey)
73+
assert.NotEqual(t, cfg.L1Config.RelayerConfig.GasOracleSenderSignerConfig, cfg2.L1Config.RelayerConfig.GasOracleSenderSignerConfig)
74+
assert.NotEqual(t, cfg.L2Config.RelayerConfig.GasOracleSenderSignerConfig, cfg2.L2Config.RelayerConfig.GasOracleSenderSignerConfig)
75+
assert.NotEqual(t, cfg.L2Config.RelayerConfig.CommitSenderSignerConfig, cfg2.L2Config.RelayerConfig.CommitSenderSignerConfig)
76+
assert.NotEqual(t, cfg.L2Config.RelayerConfig.FinalizeSenderSignerConfig, cfg2.L2Config.RelayerConfig.FinalizeSenderSignerConfig)
7777

7878
assert.Equal(t, cfg2.DBConfig.DSN, "postgres://test:test@postgresql:5432/scroll?sslmode=disable")
79-
assert.Equal(t, "1616161616161616161616161616161616161616161616161616161616161616", cfg2.L1Config.RelayerConfig.GasOracleSenderPrivateKey)
80-
assert.Equal(t, "1717171717171717171717171717171717171717171717171717171717171717", cfg2.L2Config.RelayerConfig.GasOracleSenderPrivateKey)
81-
assert.Equal(t, "1818181818181818181818181818181818181818181818181818181818181818", cfg2.L2Config.RelayerConfig.CommitSenderPrivateKey)
82-
assert.Equal(t, "1919191919191919191919191919191919191919191919191919191919191919", cfg2.L2Config.RelayerConfig.FinalizeSenderPrivateKey)
79+
assert.Equal(t, "1414141414141414141414141414141414141414141414141414141414141414", cfg.L2Config.RelayerConfig.CommitSenderSignerConfig.PrivateKeySignerConfig.PrivateKey)
80+
assert.Equal(t, "1616161616161616161616161616161616161616161616161616161616161616", cfg2.L1Config.RelayerConfig.GasOracleSenderSignerConfig.PrivateKeySignerConfig.PrivateKey)
81+
assert.Equal(t, "1717171717171717171717171717171717171717171717171717171717171717", cfg2.L2Config.RelayerConfig.GasOracleSenderSignerConfig.PrivateKeySignerConfig.PrivateKey)
82+
assert.Equal(t, "1818181818181818181818181818181818181818181818181818181818181818", cfg2.L2Config.RelayerConfig.CommitSenderSignerConfig.PrivateKeySignerConfig.PrivateKey)
83+
assert.Equal(t, "1919191919191919191919191919191919191919191919191919191919191919", cfg2.L2Config.RelayerConfig.FinalizeSenderSignerConfig.PrivateKeySignerConfig.PrivateKey)
8384
})
8485
}

rollup/internal/config/relayer.go

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,11 @@ type RelayerConfig struct {
5454
ChainMonitor *ChainMonitor `json:"chain_monitor"`
5555
// L1CommitGasLimitMultiplier multiplier for fallback gas limit in commitBatch txs
5656
L1CommitGasLimitMultiplier float64 `json:"l1_commit_gas_limit_multiplier,omitempty"`
57-
// The private key of the relayer
58-
GasOracleSenderPrivateKey string `json:"gas_oracle_sender_private_key"`
59-
CommitSenderPrivateKey string `json:"commit_sender_private_key"`
60-
FinalizeSenderPrivateKey string `json:"finalize_sender_private_key"`
57+
58+
// Configs of transaction signers (GasOracle, Commit, Finalize)
59+
GasOracleSenderSignerConfig *SignerConfig `json:"gas_oracle_sender_signer_config"`
60+
CommitSenderSignerConfig *SignerConfig `json:"commit_sender_signer_config"`
61+
FinalizeSenderSignerConfig *SignerConfig `json:"finalize_sender_signer_config"`
6162

6263
// Indicates if bypass features specific to testing environments are enabled.
6364
EnableTestEnvBypassFeatures bool `json:"enable_test_env_bypass_features"`
@@ -84,3 +85,21 @@ type GasOracleConfig struct {
8485
L1BaseFeeDefault uint64 `json:"l1_base_fee_default"`
8586
L1BlobBaseFeeDefault uint64 `json:"l1_blob_base_fee_default"`
8687
}
88+
89+
// SignerConfig - config of signer, contains type and config corresponding to type
90+
type SignerConfig struct {
91+
SignerType string `json:"signer_type"` // type of signer can be PrivateKey or RemoteSigner
92+
PrivateKeySignerConfig *PrivateKeySignerConfig `json:"private_key_signer_config"`
93+
RemoteSignerConfig *RemoteSignerConfig `json:"remote_signer_config"`
94+
}
95+
96+
// PrivateKeySignerConfig - config of private signer, contains private key
97+
type PrivateKeySignerConfig struct {
98+
PrivateKey string `json:"private_key"` // private key of signer in case of PrivateKey signerType
99+
}
100+
101+
// RemoteSignerConfig - config of private signer, contains address and remote URL
102+
type RemoteSignerConfig struct {
103+
RemoteSignerUrl string `json:"remote_signer_url"` // remote signer url (web3signer) in case of RemoteSigner signerType
104+
SignerAddress string `json:"signer_address"` // address of signer
105+
}

rollup/internal/controller/relayer/l1_relayer.go

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ import (
1010

1111
"github.com/prometheus/client_golang/prometheus"
1212
"github.com/scroll-tech/go-ethereum/accounts/abi"
13-
"github.com/scroll-tech/go-ethereum/common"
14-
"github.com/scroll-tech/go-ethereum/crypto"
1513
"github.com/scroll-tech/go-ethereum/log"
1614
"github.com/scroll-tech/go-ethereum/params"
1715
"gorm.io/gorm"
@@ -54,18 +52,13 @@ type Layer1Relayer struct {
5452
// NewLayer1Relayer will return a new instance of Layer1RelayerClient
5553
func NewLayer1Relayer(ctx context.Context, db *gorm.DB, cfg *config.RelayerConfig, chainCfg *params.ChainConfig, serviceType ServiceType, reg prometheus.Registerer) (*Layer1Relayer, error) {
5654
var gasOracleSender *sender.Sender
55+
var err error
5756

5857
switch serviceType {
5958
case ServiceTypeL1GasOracle:
60-
pKey, err := crypto.ToECDSA(common.FromHex(cfg.GasOracleSenderPrivateKey))
59+
gasOracleSender, err = sender.NewSender(ctx, cfg.SenderConfig, cfg.GasOracleSenderSignerConfig, "l1_relayer", "gas_oracle_sender", types.SenderTypeL1GasOracle, db, reg)
6160
if err != nil {
62-
return nil, fmt.Errorf("new gas oracle sender failed, err: %v", err)
63-
}
64-
65-
gasOracleSender, err = sender.NewSender(ctx, cfg.SenderConfig, pKey, "l1_relayer", "gas_oracle_sender", types.SenderTypeL1GasOracle, db, reg)
66-
if err != nil {
67-
addr := crypto.PubkeyToAddress(pKey.PublicKey)
68-
return nil, fmt.Errorf("new gas oracle sender failed for address %s, err: %v", addr.Hex(), err)
61+
return nil, fmt.Errorf("new gas oracle sender failed, err: %w", err)
6962
}
7063

7164
// Ensure test features aren't enabled on the scroll mainnet.

rollup/internal/controller/relayer/l2_relayer.go

Lines changed: 40 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package relayer
22

33
import (
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
7877
func 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

Comments
 (0)