k2.eth1-private-key
: The private key of the proposer(s) representative wallet. This key is essential for signing registration messages and interacting with all the smart contracts.
NOTE: This key is the only wallet key that would be granted permission to manage validators on-chain and act as their representative. Keep this wallet safe.
This module also supports the use of multiple representative wallets, in which case provide a comma separated list of private keys. [eg. k2.eth1-private-key 1234567890abcdef1234567890abcdef12345f,1234567890abcdef1234567890abcdef12345f
]. The keys should be in order of priority, with the first key being the primary key. The module will use the first key to run contract calls and reward claim transactions. The additional keys are used to natively delegate or exit validators of varied payout recipients per key.
k2.beacon-node-url
: The URL of the beacon node. This URL is required for syncing with the Ethereum Consensus Layer.
k2.execution-node-url
: The URL of the execution node to connect to for on-chain execution.
k2.registration-only
: This flag is used to register validators on-chain in the Proposer Registry without natively delegating them to the K2 contract pool.
k2.web3-signer-url
: The module supports the use of a Web3Signer to sign custom registration messages with a modified payout recipient address from the one configured on the node. This flag is optional and can be used to configure the Web3Signer URL. The validator keys to which their registration messages wish to be signed should be configured on the Web3Signer.
k2.payout-recipient
: The address of an alternative globally configured payout recipient. This address will be used for all validators if specified. If not specified, the payout recipient address configured on the node for each validator key will be used. To use this flag, the k2.web3-signer-url
flag must also be specified in order to sign the registration messages with the alternative payout recipient address.
k2.max-gas-price
: The maximum gas price (denominated in WEI) to be used for on-chain transactions. This flag is optional and defaults to using the current netowrk gas price for execution. If set, any registration in which the gas price exceeds the maximum gas price, the registration/delegation will be skipped for that epoch.
k2.listen-address
: The address on which the module will listen for incoming requests. This flag is optional and defaults to localhost:10000
if not specified. The API specifications can be found here.
k2.claim-threshold
: The threshold for claiming rewards from the K2 contract. This flag is optional and defaults to 0.0 KETH if not specified (claims any available rewards). If the rewards for a validator exceed the threshold, the rewards will be claimed from the K2 contract upon any request to the API.
k2.k2-lending-contract-address
: The address of the K2 lending contract you wish to provide to override the default contract address for a supported network, or to provide a contract address for an unsupported network.
k2.k2-node-operator-contract-address
: The address of the K2 node operator contract you wish to provide to override the default contract address for a supported network, or to provide a contract address for an unsupported network.
k2.proposer-registry-contract-address
: The address of the proposer registry contract you wish to provide to override the default contract address for a supported network, or to provide a contract address for an unsupported network. Especially if in registration-only mode. If not in registration-only mode, the module will obtain the contract address from the K2 contracts and does not need this flag.
k2.signature-swapper-url
: The URL of the signature swapper service. This flag is optional and defaults to the network-specific signature swapper URL if not specified (overridden), or can be used to provide a custom signature swapper URL for unsupported networks. The signature swapper is used to generate and manage ECDSA signatures as proof of ownership of the BLS keys.
k2.balance-verifier-url
: The URL of the balance verifier service. This flag is optional and defaults to the network-specific balance verifier URL if not specified (overridden), or can be used to provide a custom balance verifier URL for unsupported networks. The balance verifier is used to verify the effective balance of the proposer wallet for balance report to the contracts for reward claiming or exiting the protocol.
k2.strict-inclusion-list
: This flag is used to specify a list of validator public keys to solely process. The flag accepts a filepath to a JSON file containing the list of validator public keys/fee recipients to strictly process. The file is continuously monitored by the software and would pick up any changes immediately, allowing you to manage your registrations without restarting MEV Plus. The JSON file should be in the following format:
k2.strict-inclusion-list ./inclusion-list.json
allowProposerRegistration
and allowNativeDelegation
fields must be set as if not specified, and defaults to false
. If both feilds are false
due to not specified or being set as false, then effectively this entry should not be included in the inclusion list as it means you do not intend to include it in any process (proposer registration nor native delgation).
If allowProposerRegistration
is set to false
, the validator will not be registered on-chain in the Proposer Registry. And if this validator is intended to be natively delegated, and is not already in the Proposer Registry, the registration will fail, as native delegation requires registration in the Proposer Registry. However if this validator / group of validators are already registered in the proposer registry, their processing of netive delegation if set to true would be unaffected.
k2.exclusion-list
: This flag is used to specify a list of validator public keys to exclude from either on-chain registration or native delegation. The flag accepts a filepath to a JSON file containing the list of validator public keys/fee recipients to exclude. The file is continuously monitored by the software and would pick up any changes immediately, allowing you to manage your registrations without restarting MEV Plus. The JSON file should be in the following format:k2.exclusion-list ./exclusion-list.json
allowProposerRegistration
and allowNativeDelegation
fields are optional and default to false
if not specified and thus completely excludes the entry from all processing during proposer registration and/or native delegation. You cannot set both fields to true
as that essentially means you do not intend to exclude the entry from any process.
If allowProposerRegistration
is set to false
, the validator will not be registered on-chain in the Proposer Registry. And if this validator is intended to be natively delegated, and is not already in the Proposer Registry, the registration will fail, as native delegation requires registration in the Proposer Registry.
k2.representative-mapping
: This flag is used to optionally specify a mapping of representative wallets that should be used to process validators to specific validators by BLS Key or specific payout/feeRecipient addresses. The flag accepts a filepath to a JSON file containing the mapping of representative addresses designated to specific validators or that would handle validators that pay to different k2 fee/payout recipients (any ECDSA address). The file is continuously monitored by the software and would pick up any changes immediately, allowing you to manage your registrations without restarting MEV Plus. The JSON file should be in the following format:k2.representative-mapping ./representative-mapping.json
k2.eth1-private-key
flag. This file is optional and is used to strictly inform the module to use the representative address to process specific validators or set of validators with a common fee recipient address on the node. If the representative address is not found in the k2.eth1-private-key
flag, the module will not process the validators to the specified payout recipient address. If the node registration has validators and/or a validators with a common fee recipient not strictly specified in this file, the module would use the next available representative address in the k2.eth1-private-key
flag to process the registration if possible.
k2.logger-level
: The log level for the K2 Native Delegation module. This flag is optional and defaults to info
if not specified. The available log levels are debug
, info
, warn
, error
, and fatal
.<32 ETH
), the registration is skipped for that epoch. This verifiaction is also available as a remote designated verifier for each network that is used to balance report to the contracts for reward claiming or exiting the protocol.
Payout Management: Node runners can configure the payout recipient address. If not specified, payouts go to the fee recipients configured in your consensus client for each validator key.
moduleList.go
file and instantiate the NewK2Service()
and NewCommand()
from service.go functions in the respective service and command lists variables within the moduleList.go file.
Build your modified MEV Plus binary and run it with the required flags.
For more information on building MEV Plus, check out
How to build MEV Plus
localhost
port 10000
by default. The API exposes the following important endpoints:
/eth/v1/exit
/eth/v1/claim
{}
, the module checks for rewards for the representative wallets configured under k2.eth1-private-key
and claims any available rewards for those representatives (node operators).
/eth/v1/delegated-validators
k2.eth1-private-key
and their respective fee recipients. It optionally accepts a query parameter representativeAddresses
to specify any representative wallets to check for their natively delegated validators. It also optionally accepts a query parameter includeBalance
as (true
string) to specify if the claimable rewards of representative node operators should be included in the response, as well as the effective balances of each node operator’s delegated validator.
representativeAddresses
to get the list of validators for each representative address.
/eth/v1/register