Skip to content

Commit 4030ac2

Browse files
authored
Optional handlers (ChainSafe#643)
* initial if statements for optional handlers * Squash commits * clean up bulkiness of handler contract check at chain initialization
1 parent e494294 commit 4030ac2

File tree

2 files changed

+25
-12
lines changed

2 files changed

+25
-12
lines changed

chains/ethereum/chain.go

+13-6
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
erc721Handler "github.com/ChainSafe/ChainBridge/bindings/ERC721Handler"
3030
"github.com/ChainSafe/ChainBridge/bindings/GenericHandler"
3131
connection "github.com/ChainSafe/ChainBridge/connections/ethereum"
32+
utils "github.com/ChainSafe/ChainBridge/shared/ethereum"
3233
"github.com/ChainSafe/chainbridge-utils/blockstore"
3334
"github.com/ChainSafe/chainbridge-utils/core"
3435
"github.com/ChainSafe/chainbridge-utils/crypto/secp256k1"
@@ -116,13 +117,19 @@ func InitializeChain(chainCfg *core.ChainConfig, logger log15.Logger, sysErr cha
116117
if err != nil {
117118
return nil, err
118119
}
119-
err = conn.EnsureHasBytecode(cfg.erc20HandlerContract)
120-
if err != nil {
121-
return nil, err
120+
121+
if cfg.erc20HandlerContract != utils.ZeroAddress {
122+
err = conn.EnsureHasBytecode(cfg.erc20HandlerContract)
123+
if err != nil {
124+
return nil, err
125+
}
122126
}
123-
err = conn.EnsureHasBytecode(cfg.genericHandlerContract)
124-
if err != nil {
125-
return nil, err
127+
128+
if cfg.genericHandlerContract != utils.ZeroAddress {
129+
err = conn.EnsureHasBytecode(cfg.genericHandlerContract)
130+
if err != nil {
131+
return nil, err
132+
}
126133
}
127134

128135
bridgeContract, err := bridge.NewBridge(cfg.bridgeContract, conn.Client())

chains/ethereum/config.go

+12-6
Original file line numberDiff line numberDiff line change
@@ -91,14 +91,20 @@ func parseChainConfig(chainCfg *core.ChainConfig) (*Config, error) {
9191
return nil, fmt.Errorf("must provide opts.bridge field for ethereum config")
9292
}
9393

94-
config.erc20HandlerContract = common.HexToAddress(chainCfg.Opts[Erc20HandlerOpt])
95-
delete(chainCfg.Opts, Erc20HandlerOpt)
94+
if contract, ok := chainCfg.Opts[Erc20HandlerOpt]; ok {
95+
config.erc20HandlerContract = common.HexToAddress(contract)
96+
delete(chainCfg.Opts, Erc20HandlerOpt)
97+
}
9698

97-
config.erc721HandlerContract = common.HexToAddress(chainCfg.Opts[Erc721HandlerOpt])
98-
delete(chainCfg.Opts, Erc721HandlerOpt)
99+
if contract, ok := chainCfg.Opts[Erc721HandlerOpt]; ok {
100+
config.erc721HandlerContract = common.HexToAddress(contract)
101+
delete(chainCfg.Opts, Erc721HandlerOpt)
102+
}
99103

100-
config.genericHandlerContract = common.HexToAddress(chainCfg.Opts[GenericHandlerOpt])
101-
delete(chainCfg.Opts, GenericHandlerOpt)
104+
if contract, ok := chainCfg.Opts[GenericHandlerOpt]; ok {
105+
config.genericHandlerContract = common.HexToAddress(contract)
106+
delete(chainCfg.Opts, GenericHandlerOpt)
107+
}
102108

103109
if gasPrice, ok := chainCfg.Opts[MaxGasPriceOpt]; ok {
104110
price := big.NewInt(0)

0 commit comments

Comments
 (0)