Commit 6bd1c85f authored by Javed Khan's avatar Javed Khan Committed by GitHub

indexer: scan eth/standard bridge for deposits (#3350)

* indexer: scan eth/standard bridge for deposits

* indexer: fix standard bridge addr, add eth bridge

* indexer: use predeploy addr const

* indexer: map chainID -> default bridge address

* indexer: l2 - map chainID to bridge addresses
Co-authored-by: default avatarMatthew Slipper <me@matthewslipper.com>
parent cbca9c8e
......@@ -65,7 +65,7 @@ CREATE TABLE IF NOT EXISTS withdrawals (
log_index INTEGER NOT NULL,
l1_block_hash VARCHAR REFERENCES l1_blocks(hash),
l2_block_hash VARCHAR NOT NULL REFERENCES l2_blocks(hash),
tx_hash VARCHAR NOT NULL,
tx_hash VARCHAR NOT NULL
)
`
......
......@@ -7,6 +7,7 @@ import (
"github.com/ethereum-optimism/optimism/indexer/db"
"github.com/ethereum-optimism/optimism/op-bindings/bindings"
"github.com/ethereum-optimism/optimism/op-bindings/predeploys"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
......@@ -25,37 +26,42 @@ type Bridge interface {
type implConfig struct {
name string
impl string
addr common.Address
addr string
}
var addrs map[string]common.Address
var defaultBridgeCfgs = map[uint64][]*implConfig{
// Devnet
900: {
{"Standard", "StandardBridge", predeploys.DevL1StandardBridge},
{"ETH", "ETHBridge", predeploys.DevL1StandardBridge},
},
}
var customBridgeCfgs = map[uint64][]*implConfig{
// Mainnet
1: {
{"BitBTC", "StandardBridge", common.HexToAddress("0xaBA2c5F108F7E820C049D5Af70B16ac266c8f128")},
{"DAI", "StandardBridge", common.HexToAddress("0x10E6593CDda8c58a1d0f14C5164B376352a55f2F")},
{"BitBTC", "StandardBridge", "0xaBA2c5F108F7E820C049D5Af70B16ac266c8f128"},
{"DAI", "StandardBridge", "0x10E6593CDda8c58a1d0f14C5164B376352a55f2F"},
},
// Kovan
42: {
{"BitBTC", "StandardBridge", common.HexToAddress("0x0b651A42F32069d62d5ECf4f2a7e5Bd3E9438746")},
{"USX", "StandardBridge", common.HexToAddress("0x40E862341b2416345F02c41Ac70df08525150dC7")},
{"DAI", "StandardBridge", common.HexToAddress("0xb415e822C4983ecD6B1c1596e8a5f976cf6CD9e3")},
{"BitBTC", "StandardBridge", "0x0b651A42F32069d62d5ECf4f2a7e5Bd3E9438746"},
{"USX", "StandardBridge", "0x40E862341b2416345F02c41Ac70df08525150dC7"},
{"DAI", "StandardBridge", "0xb415e822C4983ecD6B1c1596e8a5f976cf6CD9e3"},
},
}
func BridgesByChainID(chainID *big.Int, client bind.ContractBackend, ctx context.Context) (map[string]Bridge, error) {
allCfgs := []*implConfig{
{"Standard", "StandardBridge", addrs["L1StandardBridge"]},
{"ETH", "ETHBridge", addrs["L1StandardBridge"]},
}
allCfgs := make([]*implConfig, 0)
allCfgs = append(allCfgs, defaultBridgeCfgs[chainID.Uint64()]...)
allCfgs = append(allCfgs, customBridgeCfgs[chainID.Uint64()]...)
bridges := make(map[string]Bridge)
for _, bridge := range allCfgs {
switch bridge.impl {
case "StandardBridge":
l1StandardBridgeFilter, err := bindings.NewL1StandardBridgeFilterer(bridge.addr, client)
l1StandardBridgeAddress := common.HexToAddress(bridge.addr)
l1StandardBridgeFilter, err := bindings.NewL1StandardBridgeFilterer(l1StandardBridgeAddress, client)
if err != nil {
return nil, err
}
......@@ -63,13 +69,14 @@ func BridgesByChainID(chainID *big.Int, client bind.ContractBackend, ctx context
standardBridge := &StandardBridge{
name: bridge.name,
ctx: ctx,
address: bridge.addr,
address: l1StandardBridgeAddress,
client: client,
filterer: l1StandardBridgeFilter,
}
bridges[bridge.name] = standardBridge
case "ETHBridge":
l1EthBridgeFilter, err := bindings.NewL1StandardBridgeFilterer(bridge.addr, client)
l1StandardBridgeAddress := common.HexToAddress(bridge.addr)
l1EthBridgeFilter, err := bindings.NewL1StandardBridgeFilterer(l1StandardBridgeAddress, client)
if err != nil {
return nil, err
}
......@@ -77,7 +84,7 @@ func BridgesByChainID(chainID *big.Int, client bind.ContractBackend, ctx context
ethBridge := &EthBridge{
name: bridge.name,
ctx: ctx,
address: bridge.addr,
address: l1StandardBridgeAddress,
client: client,
filterer: l1EthBridgeFilter,
}
......
......@@ -113,7 +113,11 @@ func NewService(cfg ServiceConfig) (*Service, error) {
return nil, fmt.Errorf("chain ID configured with %d but got %d", cfg.ChainID, chainID)
}
var bridges map[string]bridge.Bridge
bridges, err := bridge.BridgesByChainID(cfg.ChainID, cfg.L1Client, ctx)
if err != nil {
cancel()
return nil, err
}
logger.Info("Scanning bridges for deposits", "bridges", bridges)
confirmedHeaderSelector, err := NewConfirmedHeaderSelector(HeaderSelectorConfig{
......@@ -278,7 +282,7 @@ func (s *Service) Update(newHeader *types.Header) error {
}
receives++
if receives == len(s.bridges) {
if receives == 2*len(s.bridges) {
break
}
}
......
......@@ -28,8 +28,11 @@ type implConfig struct {
addr string
}
var defaultBridgeCfgs = []*implConfig{
{"Standard", "StandardBridge", L2StandardBridgeAddr},
var defaultBridgeCfgs = map[uint64][]*implConfig{
// Devnet
901: {
{"Standard", "StandardBridge", L2StandardBridgeAddr},
},
}
var customBridgeCfgs = map[uint64][]*implConfig{
......@@ -48,7 +51,7 @@ var customBridgeCfgs = map[uint64][]*implConfig{
func BridgesByChainID(chainID *big.Int, client bind.ContractFilterer, ctx context.Context) (map[string]Bridge, error) {
allCfgs := make([]*implConfig, 0)
allCfgs = append(allCfgs, defaultBridgeCfgs...)
allCfgs = append(allCfgs, defaultBridgeCfgs[chainID.Uint64()]...)
allCfgs = append(allCfgs, customBridgeCfgs[chainID.Uint64()]...)
bridges := make(map[string]Bridge)
......
......@@ -278,7 +278,7 @@ func (s *Service) Update(newHeader *types.Header) error {
}
receives++
if receives == len(s.bridges) {
if receives == 2*len(s.bridges) {
break
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment