Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
nebula
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
exchain
nebula
Commits
475b2bfa
Unverified
Commit
475b2bfa
authored
Oct 09, 2022
by
Matthew Slipper
Committed by
GitHub
Oct 09, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
indexer: Upgrade L1 services (#3667)
parent
dc6d4ca3
Changes
10
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
323 additions
and
309 deletions
+323
-309
indexer.go
indexer/indexer.go
+1
-2
metrics.go
indexer/metrics/metrics.go
+12
-0
bridge.go
indexer/services/l1/bridge/bridge.go
+33
-41
bridge.go.orig
indexer/services/l1/bridge/bridge.go.orig
+107
-0
eth_bridge.go
indexer/services/l1/bridge/eth_bridge.go
+16
-42
filter.go
indexer/services/l1/bridge/filter.go
+4
-52
standard_bridge.go
indexer/services/l1/bridge/standard_bridge.go
+16
-44
confirmed_headers.go
indexer/services/l1/confirmed_headers.go
+2
-3
query.go
indexer/services/l1/query.go
+21
-22
service.go
indexer/services/l1/service.go
+111
-103
No files found.
indexer/indexer.go
View file @
475b2bfa
...
@@ -22,7 +22,7 @@ import (
...
@@ -22,7 +22,7 @@ import (
"github.com/ethereum/go-ethereum/ethclient"
"github.com/ethereum/go-ethereum/ethclient"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/rpc"
"github.com/ethereum/go-ethereum/rpc"
sentry
"github.com/getsentry/sentry-go"
"github.com/getsentry/sentry-go"
"github.com/gorilla/mux"
"github.com/gorilla/mux"
"github.com/urfave/cli"
"github.com/urfave/cli"
)
)
...
@@ -169,7 +169,6 @@ func NewIndexer(cfg Config, gitVersion string) (*Indexer, error) {
...
@@ -169,7 +169,6 @@ func NewIndexer(cfg Config, gitVersion string) (*Indexer, error) {
ConfDepth
:
cfg
.
ConfDepth
,
ConfDepth
:
cfg
.
ConfDepth
,
MaxHeaderBatchSize
:
cfg
.
MaxHeaderBatchSize
,
MaxHeaderBatchSize
:
cfg
.
MaxHeaderBatchSize
,
StartBlockNumber
:
cfg
.
StartBlockNumber
,
StartBlockNumber
:
cfg
.
StartBlockNumber
,
StartBlockHash
:
cfg
.
StartBlockHash
,
})
})
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
...
...
indexer/metrics/metrics.go
View file @
475b2bfa
...
@@ -21,6 +21,8 @@ type Metrics struct {
...
@@ -21,6 +21,8 @@ type Metrics struct {
WithdrawalsCount
*
prometheus
.
CounterVec
WithdrawalsCount
*
prometheus
.
CounterVec
StateBatchesCount
prometheus
.
Counter
L1CatchingUp
prometheus
.
Gauge
L1CatchingUp
prometheus
.
Gauge
L2CatchingUp
prometheus
.
Gauge
L2CatchingUp
prometheus
.
Gauge
...
@@ -72,6 +74,12 @@ func NewMetrics(monitoredTokens map[string]string) *Metrics {
...
@@ -72,6 +74,12 @@ func NewMetrics(monitoredTokens map[string]string) *Metrics {
"symbol"
,
"symbol"
,
}),
}),
StateBatchesCount
:
promauto
.
NewCounter
(
prometheus
.
CounterOpts
{
Name
:
"state_batches_count"
,
Help
:
"The number of state batches indexed."
,
Namespace
:
metricsNamespace
,
}),
L1CatchingUp
:
promauto
.
NewGauge
(
prometheus
.
GaugeOpts
{
L1CatchingUp
:
promauto
.
NewGauge
(
prometheus
.
GaugeOpts
{
Name
:
"l1_catching_up"
,
Name
:
"l1_catching_up"
,
Help
:
"Whether or not L1 is far behind the chain tip."
,
Help
:
"Whether or not L1 is far behind the chain tip."
,
...
@@ -160,6 +168,10 @@ func (m *Metrics) RecordWithdrawal(addr common.Address) {
...
@@ -160,6 +168,10 @@ func (m *Metrics) RecordWithdrawal(addr common.Address) {
m
.
WithdrawalsCount
.
WithLabelValues
(
sym
)
.
Inc
()
m
.
WithdrawalsCount
.
WithLabelValues
(
sym
)
.
Inc
()
}
}
func
(
m
*
Metrics
)
RecordStateBatches
(
count
int
)
{
m
.
StateBatchesCount
.
Add
(
float64
(
count
))
}
func
(
m
*
Metrics
)
SetL1CatchingUp
(
state
bool
)
{
func
(
m
*
Metrics
)
SetL1CatchingUp
(
state
bool
)
{
var
catchingUp
float64
var
catchingUp
float64
if
state
{
if
state
{
...
...
indexer/services/l1/bridge/bridge.go
View file @
475b2bfa
...
@@ -5,10 +5,10 @@ import (
...
@@ -5,10 +5,10 @@ import (
"errors"
"errors"
"math/big"
"math/big"
"github.com/ethereum-optimism/optimism/indexer/bindings/legacy/scc"
"github.com/ethereum-optimism/optimism/indexer/db"
"github.com/ethereum-optimism/optimism/indexer/db"
"github.com/ethereum-optimism/optimism/indexer/services"
"github.com/ethereum-optimism/optimism/op-bindings/bindings"
"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/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common"
)
)
...
@@ -19,7 +19,7 @@ type DepositsMap map[common.Hash][]db.Deposit
...
@@ -19,7 +19,7 @@ type DepositsMap map[common.Hash][]db.Deposit
// WithdrawalsMap is a collection of withdrawal objects keyed
// WithdrawalsMap is a collection of withdrawal objects keyed
// on block hashes.
// on block hashes.
type
Withdrawals
Map
map
[
common
.
Hash
][]
db
.
Withdrawal
type
InitiatedWithdrawal
Map
map
[
common
.
Hash
][]
db
.
Withdrawal
// FinalizedWithdrawalsMap is a collection of finalized withdrawal
// FinalizedWithdrawalsMap is a collection of finalized withdrawal
// objected keyed on block hashes.
// objected keyed on block hashes.
...
@@ -27,80 +27,63 @@ type FinalizedWithdrawalsMap map[common.Hash][]db.FinalizedWithdrawal
...
@@ -27,80 +27,63 @@ type FinalizedWithdrawalsMap map[common.Hash][]db.FinalizedWithdrawal
type
Bridge
interface
{
type
Bridge
interface
{
Address
()
common
.
Address
Address
()
common
.
Address
GetDepositsByBlockRange
(
uint64
,
uint64
)
(
DepositsMap
,
error
)
GetDepositsByBlockRange
(
context
.
Context
,
uint64
,
uint64
)
(
DepositsMap
,
error
)
GetWithdrawalsByBlockRange
(
uint64
,
uint64
)
(
WithdrawalsMap
,
error
)
String
()
string
String
()
string
}
}
type
implConfig
struct
{
type
implConfig
struct
{
name
string
name
string
impl
string
impl
string
addr
string
addr
common
.
Address
}
var
defaultBridgeCfgs
=
map
[
uint64
][]
*
implConfig
{
// Devnet
900
:
{
{
"Standard"
,
"StandardBridge"
,
predeploys
.
DevL1StandardBridge
},
{
"ETH"
,
"ETHBridge"
,
predeploys
.
DevL1StandardBridge
},
},
// Goerli
5
:
{
{
"Standard"
,
"StandardBridge"
,
"0xFf94B6C486350aD92561Ba09bad3a59df764Da92"
},
{
"ETH"
,
"ETHBridge"
,
"0xFf94B6C486350aD92561Ba09bad3a59df764Da92"
},
},
}
}
var
customBridgeCfgs
=
map
[
uint64
][]
*
implConfig
{
var
customBridgeCfgs
=
map
[
uint64
][]
*
implConfig
{
// Mainnet
// Mainnet
1
:
{
1
:
{
{
"BitBTC"
,
"StandardBridge"
,
"0xaBA2c5F108F7E820C049D5Af70B16ac266c8f128"
},
{
"BitBTC"
,
"StandardBridge"
,
common
.
HexToAddress
(
"0xaBA2c5F108F7E820C049D5Af70B16ac266c8f128"
)},
{
"DAI"
,
"StandardBridge"
,
"0x10E6593CDda8c58a1d0f14C5164B376352a55f2F"
},
{
"DAI"
,
"StandardBridge"
,
common
.
HexToAddress
(
"0x10E6593CDda8c58a1d0f14C5164B376352a55f2F"
)},
{
"wstETH"
,
"StandardBridge"
,
common
.
HexToAddress
(
"0x76943C0D61395d8F2edF9060e1533529cAe05dE6"
)},
},
},
// Kovan
// Kovan
42
:
{
42
:
{
{
"BitBTC"
,
"StandardBridge"
,
"0x0b651A42F32069d62d5ECf4f2a7e5Bd3E9438746"
},
{
"BitBTC"
,
"StandardBridge"
,
common
.
HexToAddress
(
"0x0b651A42F32069d62d5ECf4f2a7e5Bd3E9438746"
)},
{
"USX"
,
"StandardBridge"
,
"0x40E862341b2416345F02c41Ac70df08525150dC7"
},
{
"USX"
,
"StandardBridge"
,
common
.
HexToAddress
(
"0x40E862341b2416345F02c41Ac70df08525150dC7"
)},
{
"DAI"
,
"StandardBridge"
,
"0xb415e822C4983ecD6B1c1596e8a5f976cf6CD9e3"
},
{
"DAI"
,
"StandardBridge"
,
common
.
HexToAddress
(
"0xb415e822C4983ecD6B1c1596e8a5f976cf6CD9e3"
)},
{
"wstETH"
,
"StandardBridge"
,
common
.
HexToAddress
(
"0x65321bf24210b81500230dCEce14Faa70a9f50a7"
)},
},
},
}
}
func
BridgesByChainID
(
chainID
*
big
.
Int
,
client
bind
.
ContractBackend
,
ctx
context
.
Context
)
(
map
[
string
]
Bridge
,
error
)
{
func
BridgesByChainID
(
chainID
*
big
.
Int
,
client
bind
.
ContractBackend
,
addrs
services
.
AddressManager
)
(
map
[
string
]
Bridge
,
error
)
{
allCfgs
:=
make
([]
*
implConfig
,
0
)
l1SBAddr
,
_
:=
addrs
.
L1StandardBridge
()
allCfgs
=
append
(
allCfgs
,
defaultBridgeCfgs
[
chainID
.
Uint64
()]
...
)
allCfgs
:=
[]
*
implConfig
{
{
"Standard"
,
"StandardBridge"
,
l1SBAddr
},
{
"ETH"
,
"ETHBridge"
,
l1SBAddr
},
}
allCfgs
=
append
(
allCfgs
,
customBridgeCfgs
[
chainID
.
Uint64
()]
...
)
allCfgs
=
append
(
allCfgs
,
customBridgeCfgs
[
chainID
.
Uint64
()]
...
)
bridges
:=
make
(
map
[
string
]
Bridge
)
bridges
:=
make
(
map
[
string
]
Bridge
)
for
_
,
bridge
:=
range
allCfgs
{
for
_
,
bridge
:=
range
allCfgs
{
switch
bridge
.
impl
{
switch
bridge
.
impl
{
case
"StandardBridge"
:
case
"StandardBridge"
:
l1StandardBridgeAddress
:=
common
.
HexToAddress
(
bridge
.
addr
)
l1SB
,
err
:=
bindings
.
NewL1StandardBridge
(
bridge
.
addr
,
client
)
l1StandardBridgeFilter
,
err
:=
bindings
.
NewL1StandardBridgeFilterer
(
l1StandardBridgeAddress
,
client
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
standardBridge
:=
&
StandardBridge
{
standardBridge
:=
&
StandardBridge
{
name
:
bridge
.
name
,
name
:
bridge
.
name
,
ctx
:
ctx
,
address
:
bridge
.
addr
,
address
:
l1StandardBridgeAddress
,
contract
:
l1SB
,
client
:
client
,
filterer
:
l1StandardBridgeFilter
,
}
}
bridges
[
bridge
.
name
]
=
standardBridge
bridges
[
bridge
.
name
]
=
standardBridge
case
"ETHBridge"
:
case
"ETHBridge"
:
l1StandardBridgeAddress
:=
common
.
HexToAddress
(
bridge
.
addr
)
l1SB
,
err
:=
bindings
.
NewL1StandardBridge
(
bridge
.
addr
,
client
)
l1EthBridgeFilter
,
err
:=
bindings
.
NewL1StandardBridgeFilterer
(
l1StandardBridgeAddress
,
client
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
ethBridge
:=
&
EthBridge
{
ethBridge
:=
&
EthBridge
{
name
:
bridge
.
name
,
name
:
bridge
.
name
,
ctx
:
ctx
,
address
:
bridge
.
addr
,
address
:
l1StandardBridgeAddress
,
contract
:
l1SB
,
client
:
client
,
filterer
:
l1EthBridgeFilter
,
}
}
bridges
[
bridge
.
name
]
=
ethBridge
bridges
[
bridge
.
name
]
=
ethBridge
default
:
default
:
...
@@ -109,3 +92,12 @@ func BridgesByChainID(chainID *big.Int, client bind.ContractBackend, ctx context
...
@@ -109,3 +92,12 @@ func BridgesByChainID(chainID *big.Int, client bind.ContractBackend, ctx context
}
}
return
bridges
,
nil
return
bridges
,
nil
}
}
func
StateCommitmentChainScanner
(
client
bind
.
ContractFilterer
,
addrs
services
.
AddressManager
)
(
*
scc
.
StateCommitmentChainFilterer
,
error
)
{
sccAddr
,
_
:=
addrs
.
StateCommitmentChain
()
filter
,
err
:=
scc
.
NewStateCommitmentChainFilterer
(
sccAddr
,
client
)
if
err
!=
nil
{
return
nil
,
err
}
return
filter
,
nil
}
indexer/services/l1/bridge/bridge.go.orig
0 → 100644
View file @
475b2bfa
package
bridge
import
(
"context"
"errors"
"math/big"
"github.com/ethereum-optimism/optimism/indexer/bindings/legacy/scc"
"github.com/ethereum-optimism/optimism/indexer/db"
"github.com/ethereum-optimism/optimism/indexer/services"
"github.com/ethereum-optimism/optimism/op-bindings/bindings"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
)
//
DepositsMap
is
a
collection
of
deposit
objects
keyed
//
on
block
hashes
.
type
DepositsMap
map
[
common
.
Hash
][]
db
.
Deposit
<<<<<<<
HEAD
//
WithdrawalsMap
is
a
collection
of
withdrawal
objects
keyed
//
on
block
hashes
.
type
WithdrawalsMap
map
[
common
.
Hash
][]
db
.
Withdrawal
//
FinalizedWithdrawalsMap
is
a
collection
of
finalized
withdrawal
//
objected
keyed
on
block
hashes
.
=======
type
InitiatedWithdrawalMap
map
[
common
.
Hash
][]
db
.
Withdrawal
>>>>>>>
22
c039efc
(
indexer
:
Upgrade
L1
services
)
type
FinalizedWithdrawalsMap
map
[
common
.
Hash
][]
db
.
FinalizedWithdrawal
type
Bridge
interface
{
Address
()
common
.
Address
GetDepositsByBlockRange
(
context
.
Context
,
uint64
,
uint64
)
(
DepositsMap
,
error
)
String
()
string
}
type
implConfig
struct
{
name
string
impl
string
addr
common
.
Address
}
var
customBridgeCfgs
=
map
[
uint64
][]*
implConfig
{
//
Mainnet
1
:
{
{
"BitBTC"
,
"StandardBridge"
,
common
.
HexToAddress
(
"0xaBA2c5F108F7E820C049D5Af70B16ac266c8f128"
)},
{
"DAI"
,
"StandardBridge"
,
common
.
HexToAddress
(
"0x10E6593CDda8c58a1d0f14C5164B376352a55f2F"
)},
{
"wstETH"
,
"StandardBridge"
,
common
.
HexToAddress
(
"0x76943C0D61395d8F2edF9060e1533529cAe05dE6"
)},
},
//
Kovan
42
:
{
{
"BitBTC"
,
"StandardBridge"
,
common
.
HexToAddress
(
"0x0b651A42F32069d62d5ECf4f2a7e5Bd3E9438746"
)},
{
"USX"
,
"StandardBridge"
,
common
.
HexToAddress
(
"0x40E862341b2416345F02c41Ac70df08525150dC7"
)},
{
"DAI"
,
"StandardBridge"
,
common
.
HexToAddress
(
"0xb415e822C4983ecD6B1c1596e8a5f976cf6CD9e3"
)},
{
"wstETH"
,
"StandardBridge"
,
common
.
HexToAddress
(
"0x65321bf24210b81500230dCEce14Faa70a9f50a7"
)},
},
}
func
BridgesByChainID
(
chainID
*
big
.
Int
,
client
bind
.
ContractBackend
,
addrs
services
.
AddressManager
)
(
map
[
string
]
Bridge
,
error
)
{
l1SBAddr
,
_
:=
addrs
.
L1StandardBridge
()
allCfgs
:=
[]*
implConfig
{
{
"Standard"
,
"StandardBridge"
,
l1SBAddr
},
{
"ETH"
,
"ETHBridge"
,
l1SBAddr
},
}
allCfgs
=
append
(
allCfgs
,
customBridgeCfgs
[
chainID
.
Uint64
()]...)
bridges
:=
make
(
map
[
string
]
Bridge
)
for
_
,
bridge
:=
range
allCfgs
{
switch
bridge
.
impl
{
case
"StandardBridge"
:
l1SB
,
err
:=
bindings
.
NewL1StandardBridge
(
bridge
.
addr
,
client
)
if
err
!= nil {
return
nil
,
err
}
standardBridge
:=
&
StandardBridge
{
name
:
bridge
.
name
,
address
:
bridge
.
addr
,
contract
:
l1SB
,
}
bridges
[
bridge
.
name
]
=
standardBridge
case
"ETHBridge"
:
l1SB
,
err
:=
bindings
.
NewL1StandardBridge
(
bridge
.
addr
,
client
)
if
err
!= nil {
return
nil
,
err
}
ethBridge
:=
&
EthBridge
{
name
:
bridge
.
name
,
address
:
bridge
.
addr
,
contract
:
l1SB
,
}
bridges
[
bridge
.
name
]
=
ethBridge
default
:
return
nil
,
errors
.
New
(
"unsupported bridge"
)
}
}
return
bridges
,
nil
}
func
StateCommitmentChainScanner
(
client
bind
.
ContractFilterer
,
addrs
services
.
AddressManager
)
(*
scc
.
StateCommitmentChainFilterer
,
error
)
{
sccAddr
,
_
:=
addrs
.
StateCommitmentChain
()
filter
,
err
:=
scc
.
NewStateCommitmentChainFilterer
(
sccAddr
,
client
)
if
err
!= nil {
return
nil
,
err
}
return
filter
,
nil
}
indexer/services/l1/bridge/eth_bridge.go
View file @
475b2bfa
...
@@ -5,66 +5,43 @@ import (
...
@@ -5,66 +5,43 @@ import (
"github.com/ethereum-optimism/optimism/indexer/db"
"github.com/ethereum-optimism/optimism/indexer/db"
"github.com/ethereum-optimism/optimism/op-bindings/bindings"
"github.com/ethereum-optimism/optimism/op-bindings/bindings"
"github.com/ethereum-optimism/optimism/op-service/backoff"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common"
)
)
type
EthBridge
struct
{
type
EthBridge
struct
{
name
string
name
string
ctx
context
.
Context
address
common
.
Address
address
common
.
Address
client
bind
.
ContractFilterer
contract
*
bindings
.
L1StandardBridge
filterer
*
bindings
.
L1StandardBridgeFilterer
}
}
func
(
e
*
EthBridge
)
Address
()
common
.
Address
{
func
(
e
*
EthBridge
)
Address
()
common
.
Address
{
return
e
.
address
return
e
.
address
}
}
func
(
e
*
EthBridge
)
GetDepositsByBlockRange
(
start
,
end
uint64
)
(
DepositsMap
,
error
)
{
func
(
e
*
EthBridge
)
GetDepositsByBlockRange
(
ctx
context
.
Context
,
start
,
end
uint64
)
(
DepositsMap
,
error
)
{
depositsByBlockhash
:=
make
(
DepositsMap
)
depositsByBlockhash
:=
make
(
DepositsMap
)
opts
:=
&
bind
.
FilterOpts
{
iter
,
err
:=
FilterETHDepositInitiatedWithRetry
(
e
.
ctx
,
e
.
filterer
,
&
bind
.
FilterOpts
{
Context
:
ctx
,
Start
:
start
,
Start
:
start
,
End
:
&
end
,
End
:
&
end
,
})
if
err
!=
nil
{
logger
.
Error
(
"Error fetching filter"
,
"err"
,
err
)
}
for
iter
.
Next
()
{
depositsByBlockhash
[
iter
.
Event
.
Raw
.
BlockHash
]
=
append
(
depositsByBlockhash
[
iter
.
Event
.
Raw
.
BlockHash
],
db
.
Deposit
{
TxHash
:
iter
.
Event
.
Raw
.
TxHash
,
FromAddress
:
iter
.
Event
.
From
,
ToAddress
:
iter
.
Event
.
To
,
Amount
:
iter
.
Event
.
Amount
,
Data
:
iter
.
Event
.
ExtraData
,
LogIndex
:
iter
.
Event
.
Raw
.
Index
,
})
}
if
err
:=
iter
.
Error
();
err
!=
nil
{
return
nil
,
err
}
}
return
depositsByBlockhash
,
nil
var
iter
*
bindings
.
L1StandardBridgeETHDepositInitiatedIterator
}
err
:=
backoff
.
Do
(
3
,
backoff
.
Exponential
(),
func
()
error
{
var
err
error
func
(
s
*
EthBridge
)
GetWithdrawalsByBlockRange
(
start
,
end
uint64
)
(
WithdrawalsMap
,
error
)
{
iter
,
err
=
e
.
contract
.
FilterETHDepositInitiated
(
opts
,
nil
,
nil
)
withdrawalsByBlockHash
:=
make
(
WithdrawalsMap
)
return
err
iter
,
err
:=
FilterETHWithdrawalFinalizedWithRetry
(
s
.
ctx
,
s
.
filterer
,
&
bind
.
FilterOpts
{
Start
:
start
,
End
:
&
end
,
})
})
if
err
!=
nil
{
if
err
!=
nil
{
logger
.
Error
(
"Error fetching filter"
,
"err"
,
err
)
return
nil
,
err
}
}
defer
iter
.
Close
()
for
iter
.
Next
()
{
for
iter
.
Next
()
{
withdrawalsByBlockH
ash
[
iter
.
Event
.
Raw
.
BlockHash
]
=
append
(
depositsByBlockh
ash
[
iter
.
Event
.
Raw
.
BlockHash
]
=
append
(
withdrawalsByBlockHash
[
iter
.
Event
.
Raw
.
BlockHash
],
db
.
Withdrawal
{
depositsByBlockhash
[
iter
.
Event
.
Raw
.
BlockHash
],
db
.
Deposit
{
TxHash
:
iter
.
Event
.
Raw
.
TxHash
,
TxHash
:
iter
.
Event
.
Raw
.
TxHash
,
FromAddress
:
iter
.
Event
.
From
,
FromAddress
:
iter
.
Event
.
From
,
ToAddress
:
iter
.
Event
.
To
,
ToAddress
:
iter
.
Event
.
To
,
...
@@ -73,11 +50,8 @@ func (s *EthBridge) GetWithdrawalsByBlockRange(start, end uint64) (WithdrawalsMa
...
@@ -73,11 +50,8 @@ func (s *EthBridge) GetWithdrawalsByBlockRange(start, end uint64) (WithdrawalsMa
LogIndex
:
iter
.
Event
.
Raw
.
Index
,
LogIndex
:
iter
.
Event
.
Raw
.
Index
,
})
})
}
}
if
err
:=
iter
.
Error
();
err
!=
nil
{
return
nil
,
err
}
return
withdrawalsByBlockHash
,
nil
return
depositsByBlockhash
,
iter
.
Error
()
}
}
func
(
e
*
EthBridge
)
String
()
string
{
func
(
e
*
EthBridge
)
String
()
string
{
...
...
indexer/services/l1/bridge/filter.go
View file @
475b2bfa
...
@@ -4,7 +4,7 @@ import (
...
@@ -4,7 +4,7 @@ import (
"context"
"context"
"time"
"time"
"github.com/ethereum-optimism/optimism/
op-bindings/bindings
"
"github.com/ethereum-optimism/optimism/
indexer/bindings/legacy/scc
"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
)
)
...
@@ -12,61 +12,13 @@ import (
...
@@ -12,61 +12,13 @@ import (
// calls.
// calls.
var
clientRetryInterval
=
5
*
time
.
Second
var
clientRetryInterval
=
5
*
time
.
Second
// Filter
ETHDepositInitiat
edWithRetry retries the given func until it succeeds,
// Filter
StateBatchAppend
edWithRetry retries the given func until it succeeds,
// waiting for clientRetryInterval duration after every call.
// waiting for clientRetryInterval duration after every call.
func
Filter
ETHDepositInitiatedWithRetry
(
ctx
context
.
Context
,
filterer
*
bindings
.
L1StandardBridgeFilterer
,
opts
*
bind
.
FilterOpts
)
(
*
bindings
.
L1StandardBridgeETHDepositInitiat
edIterator
,
error
)
{
func
Filter
StateBatchAppendedWithRetry
(
ctx
context
.
Context
,
filterer
*
scc
.
StateCommitmentChainFilterer
,
opts
*
bind
.
FilterOpts
)
(
*
scc
.
StateCommitmentChainStateBatchAppend
edIterator
,
error
)
{
for
{
for
{
ctxt
,
cancel
:=
context
.
WithTimeout
(
ctx
,
DefaultConnectionTimeout
)
ctxt
,
cancel
:=
context
.
WithTimeout
(
ctx
,
DefaultConnectionTimeout
)
opts
.
Context
=
ctxt
opts
.
Context
=
ctxt
res
,
err
:=
filterer
.
FilterETHDepositInitiated
(
opts
,
nil
,
nil
)
res
,
err
:=
filterer
.
FilterStateBatchAppended
(
opts
,
nil
)
cancel
()
if
err
==
nil
{
return
res
,
nil
}
logger
.
Error
(
"Error fetching filter"
,
"err"
,
err
)
time
.
Sleep
(
clientRetryInterval
)
}
}
// FilterERC20DepositInitiatedWithRetry retries the given func until it succeeds,
// waiting for clientRetryInterval duration after every call.
func
FilterERC20DepositInitiatedWithRetry
(
ctx
context
.
Context
,
filterer
*
bindings
.
L1StandardBridgeFilterer
,
opts
*
bind
.
FilterOpts
)
(
*
bindings
.
L1StandardBridgeERC20DepositInitiatedIterator
,
error
)
{
for
{
ctxt
,
cancel
:=
context
.
WithTimeout
(
ctx
,
DefaultConnectionTimeout
)
opts
.
Context
=
ctxt
res
,
err
:=
filterer
.
FilterERC20DepositInitiated
(
opts
,
nil
,
nil
,
nil
)
cancel
()
if
err
==
nil
{
return
res
,
nil
}
logger
.
Error
(
"Error fetching filter"
,
"err"
,
err
)
time
.
Sleep
(
clientRetryInterval
)
}
}
// FilterETHWithdrawalFinalizedWithRetry retries the given func until it succeeds,
// waiting for clientRetryInterval duration after every call.
func
FilterETHWithdrawalFinalizedWithRetry
(
ctx
context
.
Context
,
filterer
*
bindings
.
L1StandardBridgeFilterer
,
opts
*
bind
.
FilterOpts
)
(
*
bindings
.
L1StandardBridgeETHWithdrawalFinalizedIterator
,
error
)
{
for
{
ctxt
,
cancel
:=
context
.
WithTimeout
(
ctx
,
DefaultConnectionTimeout
)
opts
.
Context
=
ctxt
res
,
err
:=
filterer
.
FilterETHWithdrawalFinalized
(
opts
,
nil
,
nil
)
cancel
()
if
err
==
nil
{
return
res
,
nil
}
logger
.
Error
(
"Error fetching filter"
,
"err"
,
err
)
time
.
Sleep
(
clientRetryInterval
)
}
}
// FilterERC20WithdrawalFinalizedWithRetry retries the given func until it succeeds,
// waiting for clientRetryInterval duration after every call.
func
FilterERC20WithdrawalFinalizedWithRetry
(
ctx
context
.
Context
,
filterer
*
bindings
.
L1StandardBridgeFilterer
,
opts
*
bind
.
FilterOpts
)
(
*
bindings
.
L1StandardBridgeERC20WithdrawalFinalizedIterator
,
error
)
{
for
{
ctxt
,
cancel
:=
context
.
WithTimeout
(
ctx
,
DefaultConnectionTimeout
)
opts
.
Context
=
ctxt
res
,
err
:=
filterer
.
FilterERC20WithdrawalFinalized
(
opts
,
nil
,
nil
,
nil
)
cancel
()
cancel
()
if
err
==
nil
{
if
err
==
nil
{
return
res
,
nil
return
res
,
nil
...
...
indexer/services/l1/bridge/standard_bridge.go
View file @
475b2bfa
...
@@ -5,68 +5,43 @@ import (
...
@@ -5,68 +5,43 @@ import (
"github.com/ethereum-optimism/optimism/indexer/db"
"github.com/ethereum-optimism/optimism/indexer/db"
"github.com/ethereum-optimism/optimism/op-bindings/bindings"
"github.com/ethereum-optimism/optimism/op-bindings/bindings"
"github.com/ethereum-optimism/optimism/op-service/backoff"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common"
)
)
type
StandardBridge
struct
{
type
StandardBridge
struct
{
name
string
name
string
ctx
context
.
Context
address
common
.
Address
address
common
.
Address
client
bind
.
ContractFilterer
contract
*
bindings
.
L1StandardBridge
filterer
*
bindings
.
L1StandardBridgeFilterer
}
}
func
(
s
*
StandardBridge
)
Address
()
common
.
Address
{
func
(
s
*
StandardBridge
)
Address
()
common
.
Address
{
return
s
.
address
return
s
.
address
}
}
func
(
s
*
StandardBridge
)
GetDepositsByBlockRange
(
start
,
end
uint64
)
(
DepositsMap
,
error
)
{
func
(
s
*
StandardBridge
)
GetDepositsByBlockRange
(
ctx
context
.
Context
,
start
,
end
uint64
)
(
DepositsMap
,
error
)
{
depositsByBlockhash
:=
make
(
DepositsMap
)
depositsByBlockhash
:=
make
(
DepositsMap
)
opts
:=
&
bind
.
FilterOpts
{
iter
,
err
:=
FilterERC20DepositInitiatedWithRetry
(
s
.
ctx
,
s
.
filterer
,
&
bind
.
FilterOpts
{
Context
:
ctx
,
Start
:
start
,
Start
:
start
,
End
:
&
end
,
End
:
&
end
,
})
if
err
!=
nil
{
logger
.
Error
(
"Error fetching filter"
,
"err"
,
err
)
}
for
iter
.
Next
()
{
depositsByBlockhash
[
iter
.
Event
.
Raw
.
BlockHash
]
=
append
(
depositsByBlockhash
[
iter
.
Event
.
Raw
.
BlockHash
],
db
.
Deposit
{
TxHash
:
iter
.
Event
.
Raw
.
TxHash
,
L1Token
:
iter
.
Event
.
L1Token
,
L2Token
:
iter
.
Event
.
L2Token
,
FromAddress
:
iter
.
Event
.
From
,
ToAddress
:
iter
.
Event
.
To
,
Amount
:
iter
.
Event
.
Amount
,
Data
:
iter
.
Event
.
ExtraData
,
LogIndex
:
iter
.
Event
.
Raw
.
Index
,
})
}
if
err
:=
iter
.
Error
();
err
!=
nil
{
return
nil
,
err
}
}
return
depositsByBlockhash
,
nil
var
iter
*
bindings
.
L1StandardBridgeERC20DepositInitiatedIterator
}
err
:=
backoff
.
Do
(
3
,
backoff
.
Exponential
(),
func
()
error
{
var
err
error
func
(
s
*
StandardBridge
)
GetWithdrawalsByBlockRange
(
start
,
end
uint64
)
(
WithdrawalsMap
,
error
)
{
iter
,
err
=
s
.
contract
.
FilterERC20DepositInitiated
(
opts
,
nil
,
nil
,
nil
)
withdrawalsByBlockHash
:=
make
(
WithdrawalsMap
)
return
err
iter
,
err
:=
FilterERC20WithdrawalFinalizedWithRetry
(
s
.
ctx
,
s
.
filterer
,
&
bind
.
FilterOpts
{
Start
:
start
,
End
:
&
end
,
})
})
if
err
!=
nil
{
if
err
!=
nil
{
logger
.
Error
(
"Error fetching filter"
,
"err"
,
err
)
return
nil
,
err
}
}
defer
iter
.
Close
()
for
iter
.
Next
()
{
for
iter
.
Next
()
{
withdrawalsByBlockH
ash
[
iter
.
Event
.
Raw
.
BlockHash
]
=
append
(
depositsByBlockh
ash
[
iter
.
Event
.
Raw
.
BlockHash
]
=
append
(
withdrawalsByBlockHash
[
iter
.
Event
.
Raw
.
BlockHash
],
db
.
Withdrawal
{
depositsByBlockhash
[
iter
.
Event
.
Raw
.
BlockHash
],
db
.
Deposit
{
TxHash
:
iter
.
Event
.
Raw
.
TxHash
,
TxHash
:
iter
.
Event
.
Raw
.
TxHash
,
L1Token
:
iter
.
Event
.
L1Token
,
L1Token
:
iter
.
Event
.
L1Token
,
L2Token
:
iter
.
Event
.
L2Token
,
L2Token
:
iter
.
Event
.
L2Token
,
...
@@ -77,11 +52,8 @@ func (s *StandardBridge) GetWithdrawalsByBlockRange(start, end uint64) (Withdraw
...
@@ -77,11 +52,8 @@ func (s *StandardBridge) GetWithdrawalsByBlockRange(start, end uint64) (Withdraw
LogIndex
:
iter
.
Event
.
Raw
.
Index
,
LogIndex
:
iter
.
Event
.
Raw
.
Index
,
})
})
}
}
if
err
:=
iter
.
Error
();
err
!=
nil
{
return
nil
,
err
}
return
withdrawalsByBlockHash
,
nil
return
depositsByBlockhash
,
iter
.
Error
()
}
}
func
(
s
*
StandardBridge
)
String
()
string
{
func
(
s
*
StandardBridge
)
String
()
string
{
...
...
indexer/services/l1/confirmed_headers.go
View file @
475b2bfa
...
@@ -18,7 +18,6 @@ import (
...
@@ -18,7 +18,6 @@ import (
const
(
const
(
DefaultConnectionTimeout
=
30
*
time
.
Second
DefaultConnectionTimeout
=
30
*
time
.
Second
DefaultConfDepth
uint64
=
20
DefaultMaxBatchSize
=
100
DefaultMaxBatchSize
=
100
)
)
...
...
indexer/services/l1/query.go
View file @
475b2bfa
package
l1
package
l1
import
(
import
(
"
github.com/ethereum/go-ethereum/ethclien
t"
"
contex
t"
"github.com/ethereum-optimism/optimism/indexer/bindings/legacy/scc"
"github.com/ethereum-optimism/optimism/indexer/db"
"github.com/ethereum-optimism/optimism/indexer/db"
"github.com/ethereum-optimism/optimism/
op-bindings/bindings
"
"github.com/ethereum-optimism/optimism/
indexer/services/l1/bridge
"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common"
)
)
func
QueryERC20
(
address
common
.
Address
,
client
*
ethclient
.
Client
)
(
*
db
.
Token
,
error
)
{
func
QueryStateBatches
(
filterer
*
scc
.
StateCommitmentChainFilterer
,
startHeight
,
endHeight
uint64
,
ctx
context
.
Context
)
(
map
[
common
.
Hash
][]
db
.
StateBatch
,
error
)
{
contract
,
err
:=
bindings
.
NewERC20
(
address
,
client
)
batches
:=
make
(
map
[
common
.
Hash
][]
db
.
StateBatch
)
if
err
!=
nil
{
return
nil
,
err
}
name
,
err
:=
contract
.
Name
(
&
bind
.
CallOpts
{})
if
err
!=
nil
{
return
nil
,
err
}
symbol
,
err
:=
contract
.
Symbol
(
&
bind
.
CallOpts
{})
iter
,
err
:=
bridge
.
FilterStateBatchAppendedWithRetry
(
ctx
,
filterer
,
&
bind
.
FilterOpts
{
Start
:
startHeight
,
End
:
&
endHeight
,
})
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
}
}
decimals
,
err
:=
contract
.
Decimals
(
&
bind
.
CallOpts
{})
defer
iter
.
Close
()
if
err
!=
nil
{
for
iter
.
Next
()
{
return
nil
,
err
batches
[
iter
.
Event
.
Raw
.
BlockHash
]
=
append
(
batches
[
iter
.
Event
.
Raw
.
BlockHash
],
db
.
StateBatch
{
Index
:
iter
.
Event
.
BatchIndex
,
Root
:
iter
.
Event
.
BatchRoot
,
Size
:
iter
.
Event
.
BatchSize
,
PrevTotal
:
iter
.
Event
.
PrevTotalElements
,
ExtraData
:
iter
.
Event
.
ExtraData
,
BlockHash
:
iter
.
Event
.
Raw
.
BlockHash
,
})
}
}
return
batches
,
iter
.
Error
()
return
&
db
.
Token
{
Name
:
name
,
Symbol
:
symbol
,
Decimals
:
decimals
,
},
nil
}
}
indexer/services/l1/service.go
View file @
475b2bfa
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment