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
57ee51b6
Commit
57ee51b6
authored
Aug 13, 2023
by
Will Cory
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: Implement presets for toml file
parent
912a3fa3
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
163 additions
and
7 deletions
+163
-7
config.go
indexer/config/config.go
+14
-4
config_test.go
indexer/config/config_test.go
+75
-2
presets.go
indexer/config/presets.go
+63
-0
indexer.toml
indexer/indexer.toml
+11
-1
No files found.
indexer/config/config.go
View file @
57ee51b6
package
config
import
(
"fmt"
"os"
"reflect"
...
...
@@ -12,6 +13,8 @@ import (
"github.com/joho/godotenv"
)
// in future presets can just be onchain config and fetched on initialization
// Config represents the `indexer.toml` file used to configure the indexer
type
Config
struct
{
Chain
ChainConfig
...
...
@@ -52,7 +55,8 @@ func (c L1Contracts) ToSlice() []common.Address {
// ChainConfig configures of the chain being indexed
type
ChainConfig
struct
{
// Configure known chains with the l2 chain id
Preset
int
Preset
int
// Configure custom chains via providing the L1Contract addresses
L1Contracts
L1Contracts
}
...
...
@@ -94,21 +98,27 @@ func LoadConfig(logger geth_log.Logger, path string) (Config, error) {
var
conf
Config
// Read the config file.
data
,
err
:=
os
.
ReadFile
(
path
)
if
err
!=
nil
{
return
conf
,
err
}
// Replace environment variables.
data
=
[]
byte
(
os
.
ExpandEnv
(
string
(
data
)))
// Decode the TOML data.
if
_
,
err
:=
toml
.
Decode
(
string
(
data
),
&
conf
);
err
!=
nil
{
logger
.
Info
(
"Failed to decode config file"
,
"message"
,
err
)
return
conf
,
err
}
if
conf
.
Chain
.
Preset
!=
0
{
knownContracts
,
ok
:=
presetL1Contracts
[
conf
.
Chain
.
Preset
]
if
ok
{
conf
.
Chain
.
L1Contracts
=
knownContracts
}
else
{
return
conf
,
fmt
.
Errorf
(
"unknown preset: %d"
,
conf
.
Chain
.
Preset
)
}
}
logger
.
Debug
(
"Loaded config file"
,
conf
)
return
conf
,
nil
...
...
indexer/config/config_test.go
View file @
57ee51b6
package
config
import
(
"fmt"
"os"
"testing"
"github.com/ethereum-optimism/optimism/op-node/testlog"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/log"
"github.com/stretchr/testify/require"
)
...
...
@@ -18,7 +20,7 @@ func TestLoadConfig(t *testing.T) {
testData
:=
`
[chain]
preset =
1234
preset =
420
[rpcs]
l1-rpc = "https://l1.example.com"
...
...
@@ -51,7 +53,12 @@ func TestLoadConfig(t *testing.T) {
conf
,
err
:=
LoadConfig
(
logger
,
tmpfile
.
Name
())
require
.
NoError
(
t
,
err
)
require
.
Equal
(
t
,
conf
.
Chain
.
Preset
,
1234
)
require
.
Equal
(
t
,
conf
.
Chain
.
Preset
,
420
)
require
.
Equal
(
t
,
conf
.
Chain
.
L1Contracts
.
OptimismPortal
.
String
(),
presetL1Contracts
[
420
]
.
OptimismPortal
.
String
())
require
.
Equal
(
t
,
conf
.
Chain
.
L1Contracts
.
L1CrossDomainMessenger
.
String
(),
presetL1Contracts
[
420
]
.
L1CrossDomainMessenger
.
String
())
require
.
Equal
(
t
,
conf
.
Chain
.
L1Contracts
.
L1ERC721Bridge
.
String
(),
presetL1Contracts
[
420
]
.
L1ERC721Bridge
.
String
())
require
.
Equal
(
t
,
conf
.
Chain
.
L1Contracts
.
L1StandardBridge
.
String
(),
presetL1Contracts
[
420
]
.
L1StandardBridge
.
String
())
require
.
Equal
(
t
,
conf
.
Chain
.
L1Contracts
.
L2OutputOracle
.
String
(),
presetL1Contracts
[
420
]
.
L2OutputOracle
.
String
())
require
.
Equal
(
t
,
conf
.
RPCs
.
L1RPC
,
"https://l1.example.com"
)
require
.
Equal
(
t
,
conf
.
RPCs
.
L2RPC
,
"https://l2.example.com"
)
require
.
Equal
(
t
,
conf
.
DB
.
Host
,
"127.0.0.1"
)
...
...
@@ -64,3 +71,69 @@ func TestLoadConfig(t *testing.T) {
require
.
Equal
(
t
,
conf
.
Metrics
.
Host
,
"127.0.0.1"
)
require
.
Equal
(
t
,
conf
.
Metrics
.
Port
,
7300
)
}
func
TestLoadConfig_WithoutPreset
(
t
*
testing
.
T
)
{
tmpfile
,
err
:=
os
.
CreateTemp
(
""
,
"test_without_preset.toml"
)
require
.
NoError
(
t
,
err
)
defer
os
.
Remove
(
tmpfile
.
Name
())
defer
tmpfile
.
Close
()
testData
:=
`
[chain]
l1contracts = { OptimismPortal = "0x4205Fc579115071764c7423A4f12eDde41f106Ed", L2OutputOracle = "0x42097868233d1aa22e815a266982f2cf17685a27", L1CrossDomainMessenger = "0x420ce71c97B33Cc4729CF772ae268934F7ab5fA1", L1StandardBridge = "0x4209fc46f92E8a1c0deC1b1747d010903E884bE1", L1ERC721Bridge ="0x420749f83b81B301cAb5f48EB8516B986DAef23D" }
[rpcs]
l1-rpc = "https://l1.example.com"
l2-rpc = "https://l2.example.com"
`
data
:=
[]
byte
(
testData
)
err
=
os
.
WriteFile
(
tmpfile
.
Name
(),
data
,
0644
)
require
.
NoError
(
t
,
err
)
defer
os
.
Remove
(
tmpfile
.
Name
())
err
=
tmpfile
.
Close
()
require
.
NoError
(
t
,
err
)
logger
:=
testlog
.
Logger
(
t
,
log
.
LvlInfo
)
conf
,
err
:=
LoadConfig
(
logger
,
tmpfile
.
Name
())
require
.
NoError
(
t
,
err
)
require
.
Equal
(
t
,
conf
.
Chain
.
L1Contracts
.
OptimismPortal
.
String
(),
common
.
HexToAddress
(
"0x4205Fc579115071764c7423A4f12eDde41f106Ed"
)
.
String
())
require
.
Equal
(
t
,
conf
.
Chain
.
L1Contracts
.
L2OutputOracle
.
String
(),
common
.
HexToAddress
(
"0x42097868233d1aa22e815a266982f2cf17685a27"
)
.
String
())
require
.
Equal
(
t
,
conf
.
Chain
.
L1Contracts
.
L1CrossDomainMessenger
.
String
(),
common
.
HexToAddress
(
"0x420ce71c97B33Cc4729CF772ae268934F7ab5fA1"
)
.
String
())
require
.
Equal
(
t
,
conf
.
Chain
.
L1Contracts
.
L1StandardBridge
.
String
(),
common
.
HexToAddress
(
"0x4209fc46f92E8a1c0deC1b1747d010903E884bE1"
)
.
String
())
require
.
Equal
(
t
,
conf
.
Chain
.
L1Contracts
.
L1ERC721Bridge
.
String
(),
common
.
HexToAddress
(
"0x420749f83b81B301cAb5f48EB8516B986DAef23D"
)
.
String
())
require
.
Equal
(
t
,
conf
.
Chain
.
Preset
,
0
)
}
func
TestLoadConfig_WithUnknownPreset
(
t
*
testing
.
T
)
{
tmpfile
,
err
:=
os
.
CreateTemp
(
""
,
"test_bad_preset.toml"
)
require
.
NoError
(
t
,
err
)
defer
os
.
Remove
(
tmpfile
.
Name
())
defer
tmpfile
.
Close
()
testData
:=
`
[chain]
preset = 1234567890 # this preset doesn't exist
[rpcs]
l1-rpc = "https://l1.example.com"
l2-rpc = "https://l2.example.com"
`
data
:=
[]
byte
(
testData
)
err
=
os
.
WriteFile
(
tmpfile
.
Name
(),
data
,
0644
)
require
.
NoError
(
t
,
err
)
defer
os
.
Remove
(
tmpfile
.
Name
())
err
=
tmpfile
.
Close
()
require
.
NoError
(
t
,
err
)
logger
:=
testlog
.
Logger
(
t
,
log
.
LvlInfo
)
conf
,
err
:=
LoadConfig
(
logger
,
tmpfile
.
Name
())
var
faultyPreset
=
1234567890
require
.
Equal
(
t
,
conf
.
Chain
.
Preset
,
faultyPreset
)
require
.
Error
(
t
,
err
)
require
.
Equal
(
t
,
fmt
.
Sprintf
(
"unknown preset: %d"
,
faultyPreset
),
err
.
Error
())
}
indexer/config/presets.go
0 → 100644
View file @
57ee51b6
package
config
import
(
"github.com/ethereum/go-ethereum/common"
)
// in future presets can just be onchain config and fetched on initialization
// Mapping of l2 chain ids to their preset chain configurations
var
presetL1Contracts
=
map
[
int
]
L1Contracts
{
// OP Mainnet
10
:
{
OptimismPortal
:
common
.
HexToAddress
(
"0xbEb5Fc579115071764c7423A4f12eDde41f106Ed"
),
L2OutputOracle
:
common
.
HexToAddress
(
"0xdfe97868233d1aa22e815a266982f2cf17685a27"
),
L1CrossDomainMessenger
:
common
.
HexToAddress
(
"0x25ace71c97B33Cc4729CF772ae268934F7ab5fA1"
),
L1StandardBridge
:
common
.
HexToAddress
(
"0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1"
),
L1ERC721Bridge
:
common
.
HexToAddress
(
"0x5a7749f83b81B301cAb5f48EB8516B986DAef23D"
),
},
// OP Goerli
420
:
{
OptimismPortal
:
common
.
HexToAddress
(
"0x5b47E1A08Ea6d985D6649300584e6722Ec4B1383"
),
L2OutputOracle
:
common
.
HexToAddress
(
"0xE6Dfba0953616Bacab0c9A8ecb3a9BBa77FC15c0"
),
L1CrossDomainMessenger
:
common
.
HexToAddress
(
"0x5086d1eEF304eb5284A0f6720f79403b4e9bE294"
),
L1StandardBridge
:
common
.
HexToAddress
(
"0x636Af16bf2f682dD3109e60102b8E1A089FedAa8"
),
L1ERC721Bridge
:
common
.
HexToAddress
(
"0x8DD330DdE8D9898d43b4dc840Da27A07dF91b3c9"
),
},
// Base Mainnet
8453
:
{
OptimismPortal
:
common
.
HexToAddress
(
"0x49048044D57e1C92A77f79988d21Fa8fAF74E97e"
),
L2OutputOracle
:
common
.
HexToAddress
(
"0x56315b90c40730925ec5485cf004d835058518A0"
),
L1CrossDomainMessenger
:
common
.
HexToAddress
(
"0x866E82a600A1414e583f7F13623F1aC5d58b0Afa"
),
L1StandardBridge
:
common
.
HexToAddress
(
"0x3154Cf16ccdb4C6d922629664174b904d80F2C35"
),
// FIXME update this to the correct address
L1ERC721Bridge
:
common
.
HexToAddress
(
"0x0000000000000000000000000000000000000000"
),
},
// Base Goerli
84531
:
{
OptimismPortal
:
common
.
HexToAddress
(
"0xe93c8cD0D409341205A592f8c4Ac1A5fe5585cfA"
),
L2OutputOracle
:
common
.
HexToAddress
(
"0x2A35891ff30313CcFa6CE88dcf3858bb075A2298"
),
L1CrossDomainMessenger
:
common
.
HexToAddress
(
"0x8e5693140eA606bcEB98761d9beB1BC87383706D"
),
L1StandardBridge
:
common
.
HexToAddress
(
"0xfA6D8Ee5BE770F84FC001D098C4bD604Fe01284a"
),
// FIXME update this to the correct address
L1ERC721Bridge
:
common
.
HexToAddress
(
"0x0000000000000000000000000000000000000000"
),
},
// Zora mainnet
7777777
:
{
OptimismPortal
:
common
.
HexToAddress
(
"0x1a0ad011913A150f69f6A19DF447A0CfD9551054"
),
L2OutputOracle
:
common
.
HexToAddress
(
"0x9E6204F750cD866b299594e2aC9eA824E2e5f95c"
),
L1CrossDomainMessenger
:
common
.
HexToAddress
(
"0xdC40a14d9abd6F410226f1E6de71aE03441ca506"
),
L1StandardBridge
:
common
.
HexToAddress
(
"0x3e2Ea9B92B7E48A52296fD261dc26fd995284631"
),
// FIXME update this to the correct address
L1ERC721Bridge
:
common
.
HexToAddress
(
"0x0000000000000000000000000000000000000000"
),
},
// Zora goerli
999
:
{
OptimismPortal
:
common
.
HexToAddress
(
"0xDb9F51790365e7dc196e7D072728df39Be958ACe"
),
L2OutputOracle
:
common
.
HexToAddress
(
"0xdD292C9eEd00f6A32Ff5245d0BCd7f2a15f24e00"
),
L1CrossDomainMessenger
:
common
.
HexToAddress
(
"0xD87342e16352D33170557A7dA1e5fB966a60FafC"
),
L1StandardBridge
:
common
.
HexToAddress
(
"0x7CC09AC2452D6555d5e0C213Ab9E2d44eFbFc956"
),
// FIXME update this to the correct address
L1ERC721Bridge
:
common
.
HexToAddress
(
"0x0000000000000000000000000000000000000000"
),
},
}
indexer/indexer.toml
View file @
57ee51b6
# Chain configures l1 chain addresses
# Can configure them manually or use a preset l2 ChainId for known chains including OP Mainnet, OP Goerli, Base, Base Goerli, Zora, and Zora goerli
[chain]
# OP Goerli
preset
=
420
[rpcs]
l1-rpc
=
"${INDEXER_RPC_URL_L1}"
l2-rpc
=
"${INDEXER_RPC_URL_L2}"
...
...
@@ -20,3 +22,11 @@ port = 8080
host
=
"127.0.0.1"
port
=
7300
[logger]
# Log level: trace, debug, info, warn, error, crit. Capitals are accepted too.
level
=
"info"
# Color the log output. Defaults to true if terminal is detected.
color
=
true
# Format the log output. Supported formats: 'text', 'terminal', 'logfmt', 'json', 'json-pretty'
format
=
"terminal"
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