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
dc6d4ca3
Unverified
Commit
dc6d4ca3
authored
Oct 09, 2022
by
Matthew Slipper
Committed by
GitHub
Oct 09, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
indexer: Add new indexing functions (#3665)
parent
b9c1ce0f
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
235 additions
and
1 deletion
+235
-1
addresses.go
indexer/services/addresses.go
+105
-0
bridge.go
indexer/services/l1/bridge/bridge.go
+10
-1
portal.go
indexer/services/l1/bridge/portal.go
+63
-0
erc20.go
indexer/services/query/erc20.go
+37
-0
headers.go
indexer/services/query/headers.go
+20
-0
No files found.
indexer/services/addresses.go
0 → 100644
View file @
dc6d4ca3
package
services
import
(
"github.com/ethereum-optimism/optimism/indexer/bindings/legacy/scc"
"github.com/ethereum-optimism/optimism/op-bindings/bindings"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
)
type
AddressManager
interface
{
L1StandardBridge
()
(
common
.
Address
,
*
bindings
.
L1StandardBridge
)
StateCommitmentChain
()
(
common
.
Address
,
*
scc
.
StateCommitmentChain
)
OptimismPortal
()
(
common
.
Address
,
*
bindings
.
OptimismPortal
)
}
type
LegacyAddresses
struct
{
l1SB
*
bindings
.
L1StandardBridge
l1SBAddr
common
.
Address
scc
*
scc
.
StateCommitmentChain
sccAddr
common
.
Address
}
var
_
AddressManager
=
(
*
LegacyAddresses
)(
nil
)
func
NewLegacyAddresses
(
client
bind
.
ContractBackend
,
addrMgrAddr
common
.
Address
)
(
AddressManager
,
error
)
{
mgr
,
err
:=
bindings
.
NewAddressManager
(
addrMgrAddr
,
client
)
if
err
!=
nil
{
return
nil
,
err
}
l1SBAddr
,
err
:=
mgr
.
GetAddress
(
nil
,
"Proxy__OVM_L1StandardBridge"
)
if
err
!=
nil
{
return
nil
,
err
}
sccAddr
,
err
:=
mgr
.
GetAddress
(
nil
,
"StateCommitmentChain"
)
if
err
!=
nil
{
return
nil
,
err
}
l1SB
,
err
:=
bindings
.
NewL1StandardBridge
(
l1SBAddr
,
client
)
if
err
!=
nil
{
return
nil
,
err
}
sccContract
,
err
:=
scc
.
NewStateCommitmentChain
(
sccAddr
,
client
)
if
err
!=
nil
{
return
nil
,
err
}
return
&
LegacyAddresses
{
l1SB
:
l1SB
,
l1SBAddr
:
l1SBAddr
,
scc
:
sccContract
,
sccAddr
:
sccAddr
,
},
nil
}
func
(
a
*
LegacyAddresses
)
L1StandardBridge
()
(
common
.
Address
,
*
bindings
.
L1StandardBridge
)
{
return
a
.
l1SBAddr
,
a
.
l1SB
}
func
(
a
*
LegacyAddresses
)
StateCommitmentChain
()
(
common
.
Address
,
*
scc
.
StateCommitmentChain
)
{
return
a
.
sccAddr
,
a
.
scc
}
func
(
a
*
LegacyAddresses
)
OptimismPortal
()
(
common
.
Address
,
*
bindings
.
OptimismPortal
)
{
panic
(
"OptimismPortal not configured on legacy networks - this is a programmer error"
)
}
type
BedrockAddresses
struct
{
l1SB
*
bindings
.
L1StandardBridge
l1SBAddr
common
.
Address
portal
*
bindings
.
OptimismPortal
portalAddr
common
.
Address
}
var
_
AddressManager
=
(
*
BedrockAddresses
)(
nil
)
func
NewBedrockAddresses
(
client
bind
.
ContractBackend
,
l1SBAddr
,
portalAddr
common
.
Address
)
(
AddressManager
,
error
)
{
l1SB
,
err
:=
bindings
.
NewL1StandardBridge
(
l1SBAddr
,
client
)
if
err
!=
nil
{
return
nil
,
err
}
portal
,
err
:=
bindings
.
NewOptimismPortal
(
portalAddr
,
client
)
if
err
!=
nil
{
return
nil
,
err
}
return
&
BedrockAddresses
{
l1SB
:
l1SB
,
l1SBAddr
:
l1SBAddr
,
portal
:
portal
,
portalAddr
:
portalAddr
,
},
nil
}
func
(
b
*
BedrockAddresses
)
L1StandardBridge
()
(
common
.
Address
,
*
bindings
.
L1StandardBridge
)
{
return
b
.
l1SBAddr
,
b
.
l1SB
}
func
(
b
*
BedrockAddresses
)
StateCommitmentChain
()
(
common
.
Address
,
*
scc
.
StateCommitmentChain
)
{
panic
(
"SCC not configured on legacy networks - this is a programmer error"
)
}
func
(
b
*
BedrockAddresses
)
OptimismPortal
()
(
common
.
Address
,
*
bindings
.
OptimismPortal
)
{
return
b
.
portalAddr
,
b
.
portal
}
indexer/services/l1/bridge/bridge.go
View file @
dc6d4ca3
...
@@ -13,8 +13,17 @@ import (
...
@@ -13,8 +13,17 @@ import (
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common"
)
)
// DepositsMap is a collection of deposit objects keyed
// on block hashes.
type
DepositsMap
map
[
common
.
Hash
][]
db
.
Deposit
type
DepositsMap
map
[
common
.
Hash
][]
db
.
Deposit
type
WithdrawalsMap
map
[
common
.
Hash
][]
db
.
Withdrawal
// Finalizations
// 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
FinalizedWithdrawalsMap
map
[
common
.
Hash
][]
db
.
FinalizedWithdrawal
type
Bridge
interface
{
type
Bridge
interface
{
Address
()
common
.
Address
Address
()
common
.
Address
...
...
indexer/services/l1/bridge/portal.go
0 → 100644
View file @
dc6d4ca3
package
bridge
import
(
"context"
"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-service/backoff"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
)
type
Portal
struct
{
address
common
.
Address
contract
*
bindings
.
OptimismPortal
}
func
NewPortal
(
addrs
services
.
AddressManager
)
*
Portal
{
address
,
contract
:=
addrs
.
OptimismPortal
()
return
&
Portal
{
address
:
address
,
contract
:
contract
,
}
}
func
(
p
*
Portal
)
Address
()
common
.
Address
{
return
p
.
address
}
func
(
p
*
Portal
)
GetFinalizedWithdrawalsByBlockRange
(
ctx
context
.
Context
,
start
,
end
uint64
)
(
FinalizedWithdrawalsMap
,
error
)
{
wdsByBlockHash
:=
make
(
FinalizedWithdrawalsMap
)
opts
:=
&
bind
.
FilterOpts
{
Context
:
ctx
,
Start
:
start
,
End
:
&
end
,
}
var
iter
*
bindings
.
OptimismPortalWithdrawalFinalizedIterator
err
:=
backoff
.
Do
(
3
,
backoff
.
Exponential
(),
func
()
error
{
var
err
error
iter
,
err
=
p
.
contract
.
FilterWithdrawalFinalized
(
opts
,
nil
)
return
err
})
if
err
!=
nil
{
return
nil
,
err
}
defer
iter
.
Close
()
for
iter
.
Next
()
{
wdsByBlockHash
[
iter
.
Event
.
Raw
.
BlockHash
]
=
append
(
wdsByBlockHash
[
iter
.
Event
.
Raw
.
BlockHash
],
db
.
FinalizedWithdrawal
{
TxHash
:
iter
.
Event
.
Raw
.
TxHash
,
WithdrawalHash
:
iter
.
Event
.
WithdrawalHash
,
Success
:
iter
.
Event
.
Success
,
LogIndex
:
iter
.
Event
.
Raw
.
Index
,
},
)
}
return
wdsByBlockHash
,
iter
.
Error
()
}
indexer/services/query/erc20.go
0 → 100644
View file @
dc6d4ca3
package
query
import
(
"github.com/ethereum-optimism/optimism/indexer/db"
"github.com/ethereum-optimism/optimism/op-bindings/bindings"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/ethclient"
)
func
NewERC20
(
address
common
.
Address
,
client
*
ethclient
.
Client
)
(
*
db
.
Token
,
error
)
{
contract
,
err
:=
bindings
.
NewERC20
(
address
,
client
)
if
err
!=
nil
{
return
nil
,
err
}
name
,
err
:=
contract
.
Name
(
&
bind
.
CallOpts
{})
if
err
!=
nil
{
return
nil
,
err
}
symbol
,
err
:=
contract
.
Symbol
(
&
bind
.
CallOpts
{})
if
err
!=
nil
{
return
nil
,
err
}
decimals
,
err
:=
contract
.
Decimals
(
&
bind
.
CallOpts
{})
if
err
!=
nil
{
return
nil
,
err
}
return
&
db
.
Token
{
Name
:
name
,
Symbol
:
symbol
,
Decimals
:
decimals
,
},
nil
}
indexer/services/query/headers.go
0 → 100644
View file @
dc6d4ca3
package
query
import
(
"context"
"github.com/ethereum-optimism/optimism/op-service/backoff"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/ethclient"
)
// HeaderByNumberWithRetry retries getting headers.
func
HeaderByNumberWithRetry
(
ctx
context
.
Context
,
client
*
ethclient
.
Client
)
(
*
types
.
Header
,
error
)
{
var
res
*
types
.
Header
err
:=
backoff
.
DoCtx
(
ctx
,
3
,
backoff
.
Exponential
(),
func
()
error
{
var
err
error
res
,
err
=
client
.
HeaderByNumber
(
ctx
,
nil
)
return
err
})
return
res
,
err
}
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