mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2025-01-13 13:43:30 +00:00
92932ae58e
* Change LowestSignedProposal to Also Return a Boolean for Slashing Protection (#8020) * amend to use bools * ineff assign * comment * Update `LowestSignedTargetEpoch` to include exists (#8004) * Replace highest with lowerest * Update validator/db/kv/attestation_history_v2.go Co-authored-by: Raul Jordan <raul@prysmaticlabs.com> * Update validator/db/kv/attestation_history_v2.go Co-authored-by: Raul Jordan <raul@prysmaticlabs.com> * Invert equality for saveLowestSourceTargetToDB * Add eip checks to ensure epochs cant be lower than db ones * Should be less than equal to * Check if epoch exists in DB getters * Revert run time checks Co-authored-by: Raul Jordan <raul@prysmaticlabs.com> Co-authored-by: prylabs-bulldozer[bot] <58059840+prylabs-bulldozer[bot]@users.noreply.github.com> * Export Attesting History for Slashing Interchange Standard (#8027) * added in att history checks * logic for export * export return nil * test for export atts * round trip passes first try! * rem println * fix up tests * pass test * Validate Proposers Are Not Slashable With Regard to Data Within Slasher Interchange JSON (#8031) * filter slashable blocks and atts in same json stub * add filter blocks func * add test for filtering out the bad public keys * Export Slashing Protection History Via CLI (#8040) * include cli entrypoint for history exports * builds properly * test to confirm we export the data as expected * abstract helpers properly * full test suite * gaz * better errors * marshal ident * Add the additional eip-3076 attestation checks (#7966) * Replace highest with lowerest * Update validator/db/kv/attestation_history_v2.go Co-authored-by: Raul Jordan <raul@prysmaticlabs.com> * Update validator/db/kv/attestation_history_v2.go Co-authored-by: Raul Jordan <raul@prysmaticlabs.com> * Invert equality for saveLowestSourceTargetToDB * Add eip checks to ensure epochs cant be lower than db ones * Should be less than equal to * Check if epoch exists in DB getters Co-authored-by: Raul Jordan <raul@prysmaticlabs.com> * Add EIP-3076 Invariants for Proposer Slashing Protection (#8067) * add invariant for proposer protection * write different test cases * pass tests * Add EIP-3076 Interchange JSON CLI command to validator (#7880) * Import JSON CLI * CLI impotr * f * Begin adding new commands in slashing protection * Move testing helpers to separate packae * Add command for importing slashing protection JSONs * fix import cycle * fix test * Undo cleaning changes * Improvements * Add better prompts * Fix prompt * Fix * Fix * Fix * Fix conflict * Fix * Fixes * Fixes * Fix exported func * test func * Fixes * fix test * simplify import and standardize with export * add round trip test * true integration test works * fix up comments * logrus * better error * fix build * build fix * Update validator/slashing-protection/cli_export.go Co-authored-by: Preston Van Loon <preston@prysmaticlabs.com> * Update validator/slashing-protection/cli_import.go Co-authored-by: Preston Van Loon <preston@prysmaticlabs.com> * fmt Co-authored-by: Raul Jordan <raul@prysmaticlabs.com> Co-authored-by: Preston Van Loon <preston@prysmaticlabs.com> * Filter Slashable Attester Public Keys in Slashing Interchange Import (#8051) * filter slashable attesters from the same JSON * builds * fix up initially broken test * circular dep * import fix * giz * added in attesting history package * add test for filter slashable attester keys * pass tests * Save Slashable Keys to Disk in the Validator Client (#8082) * begin db funcs * add in test and bucket * gaz * rem changes to import * ineff assign * add godoc * Properly Handle Duplicate Public Key Entries in Slashing Interchange Imports (#8089) * Prevent Blacklisted Public Keys from Slashing Protection Imports from Having Duties at Runtime (#8084) * tests on update duties * ensure the slashable public keys are filtered out from update duties via test * begin test * attempt test * rename for better context * pass tests * deep source * ensure tests pass * Check for Signing Root Mismatch When Submitting Proposals and Importing Proposals in Slashing Interchange (#8085) * flexible signing root * add test * add tests * fix test * Preston's comments * res tests * ensure we consider the case for minimum proposals * pass test * tests passing * rem unused code * Set Empty Epochs in Between Attestations as FAR_FUTURE_EPOCH in Attesting History (#8113) * set target data * all tests passing * ineff assign * signing root * Add Slashing Interchange, EIP-3076, Spec Tests to Prysm (#7858) * Add interchange test framework * add checks for attestations * Import genesis root if necessary * flexible signing root * add test * Sync * fix up test build * only 3 failing tests now * two failing * attempting to debug problems in conformity tests * include latest changes * protect test in validator/client passing * pass tests * imports * spec tests passing with bazel * gh archive link to spectests using tar.gz suffix * rev * rev more comment changes * fix sha * godoc * add back save Co-authored-by: Raul Jordan <raul@prysmaticlabs.com> * Implement Migration for Unattested Epochs in Attesting History Database (#8121) * migrate attesting history backbone done * begin migration logic * implement migration logic * migration test * add test * migration logic * bazel * migration to its own file * Handle empty blocks and attestations in interchange json and sort interchange json by public key (#8132) * Handle empty blocks and attestations in interchange json * add test * sort json * easier empty arrays * pass test Co-authored-by: Raul Jordan <raul@prysmaticlabs.com> * builds * more tests finally build * Align Slashing Interchange With Optimized Slashing Protection (#8268) * attestation history should account for multiple targets per source * attempt at some fixes * attempt some test fixes * experimenting with sorting * only one more failing test * tests now pass * slash protect tests passing * only few tests now failing * only spec tests failing now * spec tests passing * all tests passing * helper function for verifying double votes * use helper * gaz * deep source * tests fixed * expect specific number of times for domain data calls * final comments * Batch Save Imported EIP-3076 Attestations (#8304) * optimize save * test added * add test for sad path Co-authored-by: prylabs-bulldozer[bot] <58059840+prylabs-bulldozer[bot]@users.noreply.github.com> * revert bad find replace * add comment to db func Co-authored-by: terence tsao <terence@prysmaticlabs.com> Co-authored-by: prylabs-bulldozer[bot] <58059840+prylabs-bulldozer[bot]@users.noreply.github.com> Co-authored-by: Ivan Martinez <ivanthegreatdev@gmail.com> Co-authored-by: Preston Van Loon <preston@prysmaticlabs.com> Co-authored-by: Shay Zluf <thezluf@gmail.com>
326 lines
14 KiB
Go
326 lines
14 KiB
Go
// Package flags contains all configuration runtime flags for
|
|
// the validator service.
|
|
package flags
|
|
|
|
import (
|
|
"path/filepath"
|
|
"runtime"
|
|
"time"
|
|
|
|
"github.com/prysmaticlabs/prysm/shared/fileutil"
|
|
"github.com/urfave/cli/v2"
|
|
)
|
|
|
|
const (
|
|
// WalletDefaultDirName for accounts.
|
|
WalletDefaultDirName = "prysm-wallet-v2"
|
|
// DefaultGatewayHost for the validator client.
|
|
DefaultGatewayHost = "127.0.0.1"
|
|
)
|
|
|
|
var (
|
|
// DisableAccountMetricsFlag disables the prometheus metrics for validator accounts, default false.
|
|
DisableAccountMetricsFlag = &cli.BoolFlag{
|
|
Name: "disable-account-metrics",
|
|
Usage: "Disable prometheus metrics for validator accounts. Operators with high volumes " +
|
|
"of validating keys may wish to disable granular prometheus metrics as it increases " +
|
|
"the data cardinality.",
|
|
}
|
|
// BeaconRPCProviderFlag defines a beacon node RPC endpoint.
|
|
BeaconRPCProviderFlag = &cli.StringFlag{
|
|
Name: "beacon-rpc-provider",
|
|
Usage: "Beacon node RPC provider endpoint",
|
|
Value: "127.0.0.1:4000",
|
|
}
|
|
// BeaconRPCGatewayProviderFlag defines a beacon node JSON-RPC endpoint.
|
|
BeaconRPCGatewayProviderFlag = &cli.StringFlag{
|
|
Name: "beacon-rpc-gateway-provider",
|
|
Usage: "Beacon node RPC gateway provider endpoint",
|
|
Value: "127.0.0.1:3500",
|
|
}
|
|
// CertFlag defines a flag for the node's TLS certificate.
|
|
CertFlag = &cli.StringFlag{
|
|
Name: "tls-cert",
|
|
Usage: "Certificate for secure gRPC. Pass this and the tls-key flag in order to use gRPC securely.",
|
|
}
|
|
// EnableRPCFlag enables controlling the validator client via gRPC (without web UI).
|
|
EnableRPCFlag = &cli.BoolFlag{
|
|
Name: "rpc",
|
|
Usage: "Enables the RPC server for the validator client (without Web UI)",
|
|
Value: false,
|
|
}
|
|
// RPCHost defines the host on which the RPC server should listen.
|
|
RPCHost = &cli.StringFlag{
|
|
Name: "rpc-host",
|
|
Usage: "Host on which the RPC server should listen",
|
|
Value: "127.0.0.1",
|
|
}
|
|
// RPCPort defines a validator client RPC port to open.
|
|
RPCPort = &cli.IntFlag{
|
|
Name: "rpc-port",
|
|
Usage: "RPC port exposed by a validator client",
|
|
Value: 7000,
|
|
}
|
|
// SlasherRPCProviderFlag defines a slasher node RPC endpoint.
|
|
SlasherRPCProviderFlag = &cli.StringFlag{
|
|
Name: "slasher-rpc-provider",
|
|
Usage: "Slasher node RPC provider endpoint",
|
|
Value: "127.0.0.1:4002",
|
|
}
|
|
// SlasherCertFlag defines a flag for the slasher node's TLS certificate.
|
|
SlasherCertFlag = &cli.StringFlag{
|
|
Name: "slasher-tls-cert",
|
|
Usage: "Certificate for secure slasher gRPC. Pass this and the tls-key flag in order to use gRPC securely.",
|
|
}
|
|
// DisablePenaltyRewardLogFlag defines the ability to not log reward/penalty information during deployment
|
|
DisablePenaltyRewardLogFlag = &cli.BoolFlag{
|
|
Name: "disable-rewards-penalties-logging",
|
|
Usage: "Disable reward/penalty logging during cluster deployment",
|
|
}
|
|
// GraffitiFlag defines the graffiti value included in proposed blocks
|
|
GraffitiFlag = &cli.StringFlag{
|
|
Name: "graffiti",
|
|
Usage: "String to include in proposed blocks",
|
|
}
|
|
// GrpcRetriesFlag defines the number of times to retry a failed gRPC request.
|
|
GrpcRetriesFlag = &cli.UintFlag{
|
|
Name: "grpc-retries",
|
|
Usage: "Number of attempts to retry gRPC requests",
|
|
Value: 5,
|
|
}
|
|
// GrpcRetryDelayFlag defines the interval to retry a failed gRPC request.
|
|
GrpcRetryDelayFlag = &cli.DurationFlag{
|
|
Name: "grpc-retry-delay",
|
|
Usage: "The amount of time between gRPC retry requests.",
|
|
Value: 1 * time.Second,
|
|
}
|
|
// GrpcHeadersFlag defines a list of headers to send with all gRPC requests.
|
|
GrpcHeadersFlag = &cli.StringFlag{
|
|
Name: "grpc-headers",
|
|
Usage: "A comma separated list of key value pairs to pass as gRPC headers for all gRPC " +
|
|
"calls. Example: --grpc-headers=key=value",
|
|
}
|
|
// GRPCGatewayHost specifies a gRPC gateway host for the validator client.
|
|
GRPCGatewayHost = &cli.StringFlag{
|
|
Name: "grpc-gateway-host",
|
|
Usage: "The host on which the gateway server runs on",
|
|
Value: DefaultGatewayHost,
|
|
}
|
|
// GRPCGatewayPort enables a gRPC gateway to be exposed for the validator client.
|
|
GRPCGatewayPort = &cli.IntFlag{
|
|
Name: "grpc-gateway-port",
|
|
Usage: "Enable gRPC gateway for JSON requests",
|
|
Value: 7500,
|
|
}
|
|
// GPRCGatewayCorsDomain serves preflight requests when serving gRPC JSON gateway.
|
|
GPRCGatewayCorsDomain = &cli.StringFlag{
|
|
Name: "grpc-gateway-corsdomain",
|
|
Usage: "Comma separated list of domains from which to accept cross origin requests " +
|
|
"(browser enforced). This flag has no effect if not used with --grpc-gateway-port.",
|
|
Value: "http://localhost:4242,http://127.0.0.1:4242,http://localhost:4200,http://0.0.0.0:4242,http://0.0.0.0:4200"}
|
|
// MonitoringPortFlag defines the http port used to serve prometheus metrics.
|
|
MonitoringPortFlag = &cli.IntFlag{
|
|
Name: "monitoring-port",
|
|
Usage: "Port used to listening and respond metrics for prometheus.",
|
|
Value: 8081,
|
|
}
|
|
// WalletDirFlag defines the path to a wallet directory for Prysm accounts.
|
|
WalletDirFlag = &cli.StringFlag{
|
|
Name: "wallet-dir",
|
|
Usage: "Path to a wallet directory on-disk for Prysm validator accounts",
|
|
Value: filepath.Join(DefaultValidatorDir(), WalletDefaultDirName),
|
|
}
|
|
// AccountPasswordFileFlag is path to a file containing a password for a validator account.
|
|
AccountPasswordFileFlag = &cli.StringFlag{
|
|
Name: "account-password-file",
|
|
Usage: "Path to a plain-text, .txt file containing a password for a validator account",
|
|
}
|
|
// WalletPasswordFileFlag is the path to a file containing your wallet password.
|
|
WalletPasswordFileFlag = &cli.StringFlag{
|
|
Name: "wallet-password-file",
|
|
Usage: "Path to a plain-text, .txt file containing your wallet password",
|
|
}
|
|
// Mnemonic25thWordFileFlag defines a path to a file containing a "25th" word mnemonic passphrase for advanced users.
|
|
Mnemonic25thWordFileFlag = &cli.StringFlag{
|
|
Name: "mnemonic-25th-word-file",
|
|
Usage: "(Advanced) Path to a plain-text, .txt file containing a 25th word passphrase for your mnemonic for HD wallets",
|
|
}
|
|
// SkipMnemonic25thWordCheckFlag allows for skipping a check for mnemonic 25th word passphrases for HD wallets.
|
|
SkipMnemonic25thWordCheckFlag = &cli.StringFlag{
|
|
Name: "skip-mnemonic-25th-word-check",
|
|
Usage: "Allows for skipping the check for a mnemonic 25th word passphrase for HD wallets",
|
|
}
|
|
// ImportPrivateKeyFileFlag allows for directly importing a private key hex string as an account.
|
|
ImportPrivateKeyFileFlag = &cli.StringFlag{
|
|
Name: "import-private-key-file",
|
|
Usage: "Path to a plain-text, .txt file containing a hex string representation of a private key to import",
|
|
}
|
|
// MnemonicFileFlag is used to enter a file to mnemonic phrase for new wallet creation, non-interactively.
|
|
MnemonicFileFlag = &cli.StringFlag{
|
|
Name: "mnemonic-file",
|
|
Usage: "File to retrieve mnemonic for non-interactively passing a mnemonic phrase into wallet recover.",
|
|
}
|
|
// ShowDepositDataFlag for accounts.
|
|
ShowDepositDataFlag = &cli.BoolFlag{
|
|
Name: "show-deposit-data",
|
|
Usage: "Display raw eth1 tx deposit data for validator accounts",
|
|
Value: false,
|
|
}
|
|
// ShowPrivateKeysFlag for accounts.
|
|
ShowPrivateKeysFlag = &cli.BoolFlag{
|
|
Name: "show-private-keys",
|
|
Usage: "Display the private keys for validator accounts",
|
|
Value: false,
|
|
}
|
|
// NumAccountsFlag defines the amount of accounts to generate for derived wallets.
|
|
NumAccountsFlag = &cli.IntFlag{
|
|
Name: "num-accounts",
|
|
Usage: "Number of accounts to generate for derived wallets",
|
|
Value: 1,
|
|
}
|
|
// DeletePublicKeysFlag defines a comma-separated list of hex string public keys
|
|
// for accounts which a user desires to delete from their wallet.
|
|
DeletePublicKeysFlag = &cli.StringFlag{
|
|
Name: "delete-public-keys",
|
|
Usage: "Comma-separated list of public key hex strings to specify which validator accounts to delete",
|
|
Value: "",
|
|
}
|
|
// DisablePublicKeysFlag defines a comma-separated list of hex string public keys
|
|
// for accounts which a user desires to disable for their wallet.
|
|
DisablePublicKeysFlag = &cli.StringFlag{
|
|
Name: "disable-public-keys",
|
|
Usage: "Comma-separated list of public key hex strings to specify which validator accounts to disable",
|
|
Value: "",
|
|
}
|
|
// EnablePublicKeysFlag defines a comma-separated list of hex string public keys
|
|
// for accounts which a user desires to enable for their wallet.
|
|
EnablePublicKeysFlag = &cli.StringFlag{
|
|
Name: "enable-public-keys",
|
|
Usage: "Comma-separated list of public key hex strings to specify which validator accounts to enable",
|
|
Value: "",
|
|
}
|
|
// BackupPublicKeysFlag defines a comma-separated list of hex string public keys
|
|
// for accounts which a user desires to backup from their wallet.
|
|
BackupPublicKeysFlag = &cli.StringFlag{
|
|
Name: "backup-public-keys",
|
|
Usage: "Comma-separated list of public key hex strings to specify which validator accounts to backup",
|
|
Value: "",
|
|
}
|
|
// VoluntaryExitPublicKeysFlag defines a comma-separated list of hex string public keys
|
|
// for accounts on which a user wants to perform a voluntary exit.
|
|
VoluntaryExitPublicKeysFlag = &cli.StringFlag{
|
|
Name: "public-keys",
|
|
Usage: "Comma-separated list of public key hex strings to specify on which validator accounts to perform " +
|
|
"a voluntary exit",
|
|
Value: "",
|
|
}
|
|
// BackupPasswordFile for encrypting accounts a user wishes to back up.
|
|
BackupPasswordFile = &cli.StringFlag{
|
|
Name: "backup-password-file",
|
|
Usage: "Path to a plain-text, .txt file containing the desired password for your backed up accounts",
|
|
Value: "",
|
|
}
|
|
// BackupDirFlag defines the path for the zip backup of the wallet will be created.
|
|
BackupDirFlag = &cli.StringFlag{
|
|
Name: "backup-dir",
|
|
Usage: "Path to a directory where accounts will be backed up into a zip file",
|
|
Value: DefaultValidatorDir(),
|
|
}
|
|
// SlashingProtectionJSONFileFlag is used to enter the file path of the slashing protection JSON.
|
|
SlashingProtectionJSONFileFlag = &cli.StringFlag{
|
|
Name: "slashing-protection-json-file",
|
|
Usage: "Path to an EIP-3076 compliant JSON file containing a user's slashing protection history",
|
|
}
|
|
// KeysDirFlag defines the path for a directory where keystores to be imported at stored.
|
|
KeysDirFlag = &cli.StringFlag{
|
|
Name: "keys-dir",
|
|
Usage: "Path to a directory where keystores to be imported are stored",
|
|
}
|
|
// GrpcRemoteAddressFlag defines the host:port address for a remote keymanager to connect to.
|
|
GrpcRemoteAddressFlag = &cli.StringFlag{
|
|
Name: "grpc-remote-address",
|
|
Usage: "Host:port of a gRPC server for a remote keymanager",
|
|
Value: "",
|
|
}
|
|
// DisableRemoteSignerTlsFlag disables TLS when connecting to a remote signer.
|
|
DisableRemoteSignerTlsFlag = &cli.BoolFlag{
|
|
Name: "disable-remote-signer-tls",
|
|
Usage: "Disables TLS when connecting to a remote signer. (WARNING! This will result in insecure requests!)",
|
|
Value: false,
|
|
}
|
|
// RemoteSignerCertPathFlag defines the path to a client.crt file for a wallet to connect to
|
|
// a secure signer via TLS and gRPC.
|
|
RemoteSignerCertPathFlag = &cli.StringFlag{
|
|
Name: "remote-signer-crt-path",
|
|
Usage: "/path/to/client.crt for establishing a secure, TLS gRPC connection to a remote signer server",
|
|
Value: "",
|
|
}
|
|
// RemoteSignerKeyPathFlag defines the path to a client.key file for a wallet to connect to
|
|
// a secure signer via TLS and gRPC.
|
|
RemoteSignerKeyPathFlag = &cli.StringFlag{
|
|
Name: "remote-signer-key-path",
|
|
Usage: "/path/to/client.key for establishing a secure, TLS gRPC connection to a remote signer server",
|
|
Value: "",
|
|
}
|
|
// RemoteSignerCACertPathFlag defines the path to a ca.crt file for a wallet to connect to
|
|
// a secure signer via TLS and gRPC.
|
|
RemoteSignerCACertPathFlag = &cli.StringFlag{
|
|
Name: "remote-signer-ca-crt-path",
|
|
Usage: "/path/to/ca.crt for establishing a secure, TLS gRPC connection to a remote signer server",
|
|
Value: "",
|
|
}
|
|
// KeymanagerKindFlag defines the kind of keymanager desired by a user during wallet creation.
|
|
KeymanagerKindFlag = &cli.StringFlag{
|
|
Name: "keymanager-kind",
|
|
Usage: "Kind of keymanager, either imported, derived, or remote, specified during wallet creation",
|
|
Value: "",
|
|
}
|
|
// SkipDepositConfirmationFlag skips the y/n confirmation prompt for sending a deposit to the deposit contract.
|
|
SkipDepositConfirmationFlag = &cli.BoolFlag{
|
|
Name: "skip-deposit-confirmation",
|
|
Usage: "Skips the y/n confirmation prompt for sending a deposit to the deposit contract",
|
|
Value: false,
|
|
}
|
|
// EnableWebFlag enables controlling the validator client via the Prysm web ui. This is a work in progress.
|
|
EnableWebFlag = &cli.BoolFlag{
|
|
Name: "web",
|
|
Usage: "Enables the web portal for the validator client (work in progress)",
|
|
Value: false,
|
|
}
|
|
// SlashingProtectionExportDirFlag allows specifying the outpt directory
|
|
// for a validator's slashing protection history.
|
|
SlashingProtectionExportDirFlag = &cli.StringFlag{
|
|
Name: "slashing-protection-export-dir",
|
|
Usage: "Allows users to specify the output directory to export their slashing protection EIP-3076 standard JSON File",
|
|
Value: "",
|
|
}
|
|
// GraffitiFileFlag specifies the file path to load graffiti values.
|
|
GraffitiFileFlag = &cli.StringFlag{
|
|
Name: "graffiti-file",
|
|
Usage: "The path to a YAML file with graffiti values",
|
|
}
|
|
// EnableDutyCountDown enables more verbose logging for counting down to duty.
|
|
EnableDutyCountDown = &cli.BoolFlag{
|
|
Name: "enable-duty-count-down",
|
|
Usage: "Enables more verbose logging for counting down to duty",
|
|
Value: false,
|
|
}
|
|
)
|
|
|
|
// DefaultValidatorDir returns OS-specific default validator directory.
|
|
func DefaultValidatorDir() string {
|
|
// Try to place the data folder in the user's home dir
|
|
home := fileutil.HomeDir()
|
|
if home != "" {
|
|
if runtime.GOOS == "darwin" {
|
|
return filepath.Join(home, "Library", "Eth2Validators")
|
|
} else if runtime.GOOS == "windows" {
|
|
return filepath.Join(home, "AppData", "Local", "Eth2Validators")
|
|
} else {
|
|
return filepath.Join(home, ".eth2validators")
|
|
}
|
|
}
|
|
// As we cannot guess a stable location, return empty and handle later
|
|
return ""
|
|
}
|