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
014976df
Unverified
Commit
014976df
authored
Feb 18, 2022
by
Conner Fromknecht
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: add teleportr flags and config
parent
8a24ce32
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
404 additions
and
0 deletions
+404
-0
config.go
go/teleportr/config.go
+149
-0
flags.go
go/teleportr/flags/flags.go
+227
-0
flags_test.go
go/teleportr/flags/flags_test.go
+28
-0
No files found.
go/teleportr/config.go
0 → 100644
View file @
014976df
package
teleportr
import
(
"time"
"github.com/ethereum-optimism/optimism/go/teleportr/flags"
"github.com/urfave/cli"
)
type
Config
struct
{
/* Required Params */
// BuildEnv identifies the environment this binary is intended for, i.e.
// production, development, etc.
BuildEnv
string
// EthNetworkName identifies the intended Ethereum network.
EthNetworkName
string
// L1EthRpc is the HTTP provider URL for L1.
L1EthRpc
string
// L2EthRpc is the HTTP provider URL for L1.
L2EthRpc
string
// DepositAddress is the TeleportrDeposit contract adddress.
DepositAddress
string
// DepositDeployBlockNumber is the deployment block number of the
// TeleportrDeposit contract.
DepositDeployBlockNumber
uint64
// FilterQueryMaxBlocks is the maximum range of a filter query in blocks.
FilterQueryMaxBlocks
uint64
// DisburserAddress is the TeleportrDisburser contract address.
DisburserAddress
string
// MaxL2TxSize is the maximum size in bytes of any L2 transactions generated
// for teleportr disbursements.
MaxL2TxSize
uint64
// NumDepositConfirmations is the number of confirmations required before a
// deposit is considered confirmed.
NumDepositConfirmations
uint64
// PollInterval is the delay between querying L2 for more transaction
// and creating a new batch.
PollInterval
time
.
Duration
// SafeAbortNonceTooLowCount is the number of ErrNonceTooLowObservations
// required to give up on a tx at a particular nonce without receiving
// confirmation.
SafeAbortNonceTooLowCount
uint64
// ResubmissionTimeout is time we will wait before resubmitting a
// transaction.
ResubmissionTimeout
time
.
Duration
// PostgresHost is the host of the teleportr postgres instance.
PostgresHost
string
// PostgresPort is the port of the teleportr postgres instance.
PostgresPort
uint16
// PostgresUser is the username for the teleportr postgres instance.
PostgresUser
string
// PostgresPassword is the password for the teleportr postgres instance.
PostgresPassword
string
// PostgresDBName is the database name of the teleportr postgres instance.
PostgresDBName
string
// PostgresEnableSSL determines whether or not to enable SSL on connections
// to the teleportr postgres instance.
PostgresEnableSSL
bool
/* Optional Params */
// LogLevel is the lowest log level that will be output.
LogLevel
string
// LogTerminal if true, prints to stdout in terminal format, otherwise
// prints using JSON. If SentryEnable is true this flag is ignored, and logs
// are printed using JSON.
LogTerminal
bool
// DisburserPrivKey the private key of the wallet used to submit
// transactions to the TeleportrDisburser contract.
DisburserPrivKey
string
// Mnemonic is the HD seed used to derive the wallet private key for
// submitting to the TeleportrDisburser. Must be used in conjunction with
// DisburserHDPath.
Mnemonic
string
// DisburserHDPath is the derivation path used to obtain the private key for
// the disburser transactions.
DisburserHDPath
string
// MetricsServerEnable if true, will create a metrics client and log to
// Prometheus.
MetricsServerEnable
bool
// MetricsHostname is the hostname at which the metrics server is running.
MetricsHostname
string
// MetricsPort is the port at which the metrics server is running.
MetricsPort
uint64
// DisableHTTP2 disables HTTP2 support.
DisableHTTP2
bool
}
func
NewConfig
(
ctx
*
cli
.
Context
)
(
Config
,
error
)
{
return
Config
{
/* Required Flags */
BuildEnv
:
ctx
.
GlobalString
(
flags
.
BuildEnvFlag
.
Name
),
EthNetworkName
:
ctx
.
GlobalString
(
flags
.
EthNetworkNameFlag
.
Name
),
L1EthRpc
:
ctx
.
GlobalString
(
flags
.
L1EthRpcFlag
.
Name
),
L2EthRpc
:
ctx
.
GlobalString
(
flags
.
L2EthRpcFlag
.
Name
),
DepositAddress
:
ctx
.
GlobalString
(
flags
.
DepositAddressFlag
.
Name
),
DepositDeployBlockNumber
:
ctx
.
GlobalUint64
(
flags
.
DepositDeployBlockNumberFlag
.
Name
),
DisburserAddress
:
ctx
.
GlobalString
(
flags
.
DisburserAddressFlag
.
Name
),
MaxL2TxSize
:
ctx
.
GlobalUint64
(
flags
.
MaxL2TxSizeFlag
.
Name
),
NumDepositConfirmations
:
ctx
.
GlobalUint64
(
flags
.
NumDepositConfirmationsFlag
.
Name
),
FilterQueryMaxBlocks
:
ctx
.
GlobalUint64
(
flags
.
FilterQueryMaxBlocksFlag
.
Name
),
PollInterval
:
ctx
.
GlobalDuration
(
flags
.
PollIntervalFlag
.
Name
),
SafeAbortNonceTooLowCount
:
ctx
.
GlobalUint64
(
flags
.
SafeAbortNonceTooLowCountFlag
.
Name
),
ResubmissionTimeout
:
ctx
.
GlobalDuration
(
flags
.
ResubmissionTimeoutFlag
.
Name
),
PostgresHost
:
ctx
.
GlobalString
(
flags
.
PostgresHostFlag
.
Name
),
PostgresPort
:
uint16
(
ctx
.
GlobalUint64
(
flags
.
PostgresPortFlag
.
Name
)),
PostgresUser
:
ctx
.
GlobalString
(
flags
.
PostgresUserFlag
.
Name
),
PostgresPassword
:
ctx
.
GlobalString
(
flags
.
PostgresPasswordFlag
.
Name
),
PostgresDBName
:
ctx
.
GlobalString
(
flags
.
PostgresDBNameFlag
.
Name
),
PostgresEnableSSL
:
ctx
.
GlobalBool
(
flags
.
PostgresEnableSSLFlag
.
Name
),
/* Optional flags */
LogLevel
:
ctx
.
GlobalString
(
flags
.
LogLevelFlag
.
Name
),
LogTerminal
:
ctx
.
GlobalBool
(
flags
.
LogTerminalFlag
.
Name
),
DisburserPrivKey
:
ctx
.
GlobalString
(
flags
.
DisburserPrivateKeyFlag
.
Name
),
Mnemonic
:
ctx
.
GlobalString
(
flags
.
MnemonicFlag
.
Name
),
DisburserHDPath
:
ctx
.
GlobalString
(
flags
.
DisburserHDPathFlag
.
Name
),
MetricsServerEnable
:
ctx
.
GlobalBool
(
flags
.
MetricsServerEnableFlag
.
Name
),
MetricsHostname
:
ctx
.
GlobalString
(
flags
.
MetricsHostnameFlag
.
Name
),
MetricsPort
:
ctx
.
GlobalUint64
(
flags
.
MetricsPortFlag
.
Name
),
DisableHTTP2
:
ctx
.
GlobalBool
(
flags
.
HTTP2DisableFlag
.
Name
),
},
nil
}
go/teleportr/flags/flags.go
0 → 100644
View file @
014976df
package
flags
import
"github.com/urfave/cli"
const
envVarPrefix
=
"TELEPORTR_"
func
prefixEnvVar
(
name
string
)
string
{
return
envVarPrefix
+
name
}
var
(
/* Required Flags */
BuildEnvFlag
=
cli
.
StringFlag
{
Name
:
"build-env"
,
Usage
:
"Build environment for which the binary is produced, "
+
"e.g. production or development"
,
Required
:
true
,
EnvVar
:
"BUILD_ENV"
,
}
EthNetworkNameFlag
=
cli
.
StringFlag
{
Name
:
"eth-network-name"
,
Usage
:
"Ethereum network name"
,
Required
:
true
,
EnvVar
:
"ETH_NETWORK_NAME"
,
}
L1EthRpcFlag
=
cli
.
StringFlag
{
Name
:
"l1-eth-rpc"
,
Usage
:
"HTTP provider URL for L1"
,
Required
:
true
,
EnvVar
:
"L1_ETH_RPC"
,
}
L2EthRpcFlag
=
cli
.
StringFlag
{
Name
:
"l2-eth-rpc"
,
Usage
:
"HTTP provider URL for L2"
,
Required
:
true
,
EnvVar
:
"L2_ETH_RPC"
,
}
DepositAddressFlag
=
cli
.
StringFlag
{
Name
:
"deposit-address"
,
Usage
:
"Address of the TeleportrDeposit contract"
,
Required
:
true
,
EnvVar
:
prefixEnvVar
(
"DEPOSIT_ADDRESS"
),
}
DepositDeployBlockNumberFlag
=
cli
.
Uint64Flag
{
Name
:
"deposit-deploy-block-number"
,
Usage
:
"Deployment block number of the TeleportrDeposit contract"
,
Required
:
true
,
EnvVar
:
prefixEnvVar
(
"DEPOSIT_DEPLOY_BLOCK_NUMBER"
),
}
DisburserAddressFlag
=
cli
.
StringFlag
{
Name
:
"disburser-address"
,
Usage
:
"Address of the TeleportrDisburser contract"
,
Required
:
true
,
EnvVar
:
prefixEnvVar
(
"DISBURSER_ADDRESS"
),
}
MaxL2TxSizeFlag
=
cli
.
Uint64Flag
{
Name
:
"max-l2-tx-size"
,
Usage
:
"Maximum size in bytes of any L2 transaction that gets "
+
"sent for disbursement"
,
Required
:
true
,
EnvVar
:
prefixEnvVar
(
"MAX_L2_TX_SIZE"
),
}
NumDepositConfirmationsFlag
=
cli
.
Uint64Flag
{
Name
:
"num-deposit-confirmations"
,
Usage
:
"Number of confirmations before deposits are considered "
+
"confirmed"
,
Required
:
true
,
EnvVar
:
prefixEnvVar
(
"NUM_DEPOSIT_CONFIRMATIONS"
),
}
FilterQueryMaxBlocksFlag
=
cli
.
Uint64Flag
{
Name
:
"filter-query-max-blocks"
,
Usage
:
"Maximum range of a filter query in blocks"
,
Required
:
true
,
EnvVar
:
prefixEnvVar
(
"FILTER_QUERY_MAX_BLOCKS"
),
}
PollIntervalFlag
=
cli
.
DurationFlag
{
Name
:
"poll-interval"
,
Usage
:
"Delay between querying L1 for more transactions and "
+
"creating a new disbursement batch"
,
Required
:
true
,
EnvVar
:
prefixEnvVar
(
"POLL_INTERVAL"
),
}
SafeAbortNonceTooLowCountFlag
=
cli
.
Uint64Flag
{
Name
:
"safe-abort-nonce-too-low-count"
,
Usage
:
"Number of ErrNonceTooLow observations required to "
+
"give up on a tx at a particular nonce without receiving "
+
"confirmation"
,
Required
:
true
,
EnvVar
:
prefixEnvVar
(
"SAFE_ABORT_NONCE_TOO_LOW_COUNT"
),
}
ResubmissionTimeoutFlag
=
cli
.
DurationFlag
{
Name
:
"resubmission-timeout"
,
Usage
:
"Duration we will wait before resubmitting a "
+
"transaction to L2"
,
Required
:
true
,
EnvVar
:
prefixEnvVar
(
"RESUBMISSION_TIMEOUT"
),
}
PostgresHostFlag
=
cli
.
StringFlag
{
Name
:
"postgres-host"
,
Usage
:
"Host of the teleportr postgres instance"
,
Required
:
true
,
EnvVar
:
prefixEnvVar
(
"POSTGRES_HOST"
),
}
PostgresPortFlag
=
cli
.
Uint64Flag
{
Name
:
"postgres-port"
,
Usage
:
"Port of the teleportr postgres instance"
,
Required
:
true
,
EnvVar
:
prefixEnvVar
(
"POSTGRES_PORT"
),
}
PostgresUserFlag
=
cli
.
StringFlag
{
Name
:
"postgres-user"
,
Usage
:
"Username of the teleportr postgres instance"
,
Required
:
true
,
EnvVar
:
prefixEnvVar
(
"POSTGRES_USER"
),
}
PostgresPasswordFlag
=
cli
.
StringFlag
{
Name
:
"postgres-password"
,
Usage
:
"Password of the teleportr postgres instance"
,
Required
:
true
,
EnvVar
:
prefixEnvVar
(
"POSTGRES_PASSWORD"
),
}
PostgresDBNameFlag
=
cli
.
StringFlag
{
Name
:
"postgres-db-name"
,
Usage
:
"Database name of the teleportr postgres instance"
,
Required
:
true
,
EnvVar
:
prefixEnvVar
(
"POSTGRES_DB_NAME"
),
}
PostgresEnableSSLFlag
=
cli
.
BoolFlag
{
Name
:
"postgres-enable-ssl"
,
Usage
:
"Whether or not to enable SSL on connections to "
+
"teleportr postgres instance"
,
Required
:
true
,
EnvVar
:
prefixEnvVar
(
"POSTGRES_ENABLE_SSL"
),
}
/* Optional Flags */
LogLevelFlag
=
cli
.
StringFlag
{
Name
:
"log-level"
,
Usage
:
"The lowest log level that will be output"
,
Value
:
"info"
,
EnvVar
:
prefixEnvVar
(
"LOG_LEVEL"
),
}
LogTerminalFlag
=
cli
.
BoolFlag
{
Name
:
"log-terminal"
,
Usage
:
"If true, outputs logs in terminal format, otherwise prints "
+
"in JSON format. If SENTRY_ENABLE is set to true, this flag is "
+
"ignored and logs are printed using JSON"
,
EnvVar
:
prefixEnvVar
(
"LOG_TERMINAL"
),
}
DisburserPrivateKeyFlag
=
cli
.
StringFlag
{
Name
:
"disburser-private-key"
,
Usage
:
"The private key to use for sending to the disburser contract"
,
EnvVar
:
prefixEnvVar
(
"DISBURSER_PRIVATE_KEY"
),
}
MnemonicFlag
=
cli
.
StringFlag
{
Name
:
"mnemonic"
,
Usage
:
"The mnemonic used to derive the wallet for the disburser"
,
EnvVar
:
prefixEnvVar
(
"MNEMONIC"
),
}
DisburserHDPathFlag
=
cli
.
StringFlag
{
Name
:
"disburser-hd-path"
,
Usage
:
"The HD path used to derive the disburser wallet from the "
+
"mnemonic. The mnemonic flag must also be set."
,
EnvVar
:
prefixEnvVar
(
"DISBURSER_HD_PATH"
),
}
MetricsServerEnableFlag
=
cli
.
BoolFlag
{
Name
:
"metrics-server-enable"
,
Usage
:
"Whether or not to run the embedded metrics server"
,
EnvVar
:
prefixEnvVar
(
"METRICS_SERVER_ENABLE"
),
}
MetricsHostnameFlag
=
cli
.
StringFlag
{
Name
:
"metrics-hostname"
,
Usage
:
"The hostname of the metrics server"
,
Value
:
"127.0.0.1"
,
EnvVar
:
prefixEnvVar
(
"METRICS_HOSTNAME"
),
}
MetricsPortFlag
=
cli
.
Uint64Flag
{
Name
:
"metrics-port"
,
Usage
:
"The port of the metrics server"
,
Value
:
7300
,
EnvVar
:
prefixEnvVar
(
"METRICS_PORT"
),
}
HTTP2DisableFlag
=
cli
.
BoolFlag
{
Name
:
"http2-disable"
,
Usage
:
"Whether or not to disable HTTP/2 support."
,
EnvVar
:
prefixEnvVar
(
"HTTP2_DISABLE"
),
}
)
var
requiredFlags
=
[]
cli
.
Flag
{
BuildEnvFlag
,
EthNetworkNameFlag
,
L1EthRpcFlag
,
L2EthRpcFlag
,
DepositAddressFlag
,
DepositDeployBlockNumberFlag
,
DisburserAddressFlag
,
MaxL2TxSizeFlag
,
NumDepositConfirmationsFlag
,
FilterQueryMaxBlocksFlag
,
PollIntervalFlag
,
SafeAbortNonceTooLowCountFlag
,
ResubmissionTimeoutFlag
,
PostgresHostFlag
,
PostgresPortFlag
,
PostgresUserFlag
,
PostgresPasswordFlag
,
PostgresDBNameFlag
,
PostgresEnableSSLFlag
,
}
var
optionalFlags
=
[]
cli
.
Flag
{
LogLevelFlag
,
LogTerminalFlag
,
DisburserPrivateKeyFlag
,
MnemonicFlag
,
DisburserHDPathFlag
,
MetricsServerEnableFlag
,
MetricsHostnameFlag
,
MetricsPortFlag
,
HTTP2DisableFlag
,
}
// Flags contains the list of configuration options available to the binary.
var
Flags
=
append
(
requiredFlags
,
optionalFlags
...
)
go/teleportr/flags/flags_test.go
0 → 100644
View file @
014976df
package
flags
import
(
"testing"
"github.com/stretchr/testify/require"
"github.com/urfave/cli"
)
// TestRequiredFlagsSetRequired asserts that all flags deemed required properly
// have the Required field set to true.
func
TestRequiredFlagsSetRequired
(
t
*
testing
.
T
)
{
for
_
,
flag
:=
range
requiredFlags
{
reqFlag
,
ok
:=
flag
.
(
cli
.
RequiredFlag
)
require
.
True
(
t
,
ok
)
require
.
True
(
t
,
reqFlag
.
IsRequired
())
}
}
// TestOptionalFlagsDontSetRequired asserts that all flags deemed optional set
// the Required field to false.
func
TestOptionalFlagsDontSetRequired
(
t
*
testing
.
T
)
{
for
_
,
flag
:=
range
optionalFlags
{
reqFlag
,
ok
:=
flag
.
(
cli
.
RequiredFlag
)
require
.
True
(
t
,
ok
)
require
.
False
(
t
,
reqFlag
.
IsRequired
())
}
}
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