Use a proposer configuration file
You can define complex fee recipient and builder network configurations for multiple validators using a proposer configuration file.
Specify the proposer configuration file using the --validators-proposer-config command line option.
To define a single default fee recipient for all validator keys, use the --validators-proposer-default-fee-recipient option instead.
Proposer configuration file attributes
The proposer configuration file is a JSON file that specifies:
default_config- (required) A default proposer configuration containing all default values to be applied to every validator. These values can be overridden for specific validators inproposer_config.proposer_config- (optional) A proposer configuration for multiple validator public keys.
Attributes for each proposer configuration are:
fee_recipient- (optional inproposer_configbut required indefault_config) The fee recipient to use when proposing blocks.builder- (optional) The builder network configuration, which includes the following attributes:enabled- (optional inproposer_configbut required indefault_config) Indicates whether to use the builder endpoint when proposing blocks. The default isfalse.gas_limit- (optional) Gas limit for the builder. The default is36000000.registration_overrides- (optional) Dedicated overrides to use during the registration process. Useful for distributed validator technology (DVT) and secret shared validator (SSV) technology. The override is specified using the following attributes:timestamp- (optional) Timestamp to be used (instead of the current time) in the validator registration message.public_key- (optional inproposer_configbut forbidden indefault_config) Public key to be used (instead of the validator's public key) in the validator registration message.
Each attribute value, for a given validator key, is determined using the following priority:
- Specific configuration in
proposer_config - Default configuration in
default_config - Default CLI argument (applicable only to
builder.enabled) - Default value (applicable only to
builder.enabled)
{
"proposer_config": {
"0xa057816155ad77931185101128655c0191bd0214c201ca48ed887f6c4c6adf334070efcd75140eada5ac83a92506dd7a": {
"fee_recipient": "0x50155530FCE8a85ec7055A5F8b2bE214B3DaeFd3",
"builder": {
"enabled": true,
"gas_limit": "35000000"
}
},
"0xa99a76ed7796f7be22d5b7e85deeb7c5677e88e511e0b337618f8c4eb61349b4bf2d153f649f7b53359fe8b94a38e44c": {
"builder": {
"enabled": true
}
}
},
"default_config": {
"fee_recipient": "0x6e35733c5af9B61374A128e6F85f553aF09ff89A",
"builder": {
"enabled": false,
"gas_limit": "25000000"
}
}
}
In this example, validator 0xa0578... is configured as:
"fee_recipient": "0x50155530FCE8a85ec7055A5F8b2bE214B3DaeFd3",
"builder": {
"enabled": true,
"gas_limit": "35000000"
}
Validator 0xa99a7... is configured as:
"fee_recipient": "0x6e35733c5af9B61374A128e6F85f553aF09ff89A",
"builder": {
"enabled": true,
"gas_limit": "25000000"
}
All other validators are configured as:
"fee_recipient": "0x6e35733c5af9B61374A128e6F85f553aF09ff89A",
"builder": {
"enabled": false,
"gas_limit": "25000000"
}
Example configuration file and CLI argument
The following is an example proposer configuration in conjunction with a CLI argument.
{
"proposer_config": {
"0xa057816155ad77931185101128655c0191bd0214c201ca48ed887f6c4c6adf334070efcd75140eada5ac83a92506dd7a": {
"fee_recipient": "0x50155530FCE8a85ec7055A5F8b2bE214B3DaeFd3",
"builder": {
"gas_limit": "35000000"
}
},
"0xa99a76ed7796f7be22d5b7e85deeb7c5677e88e511e0b337618f8c4eb61349b4bf2d153f649f7b53359fe8b94a38e44c": {
"builder": {
"enabled": false
}
}
},
"default_config": {
"fee_recipient": "0x6e35733c5af9B61374A128e6F85f553aF09ff89A"
}
}
If --validators-builder-registration-default-enabled is set to true:
-
Validator
0xa0578...is configured as:"fee_recipient": "0x50155530FCE8a85ec7055A5F8b2bE214B3DaeFd3",
"builder": {
"enabled": true,
"gas_limit": "35000000"
} -
Validator
0xa99a7...is configured as:"fee_recipient": "0x6e35733c5af9B61374A128e6F85f553aF09ff89A"
"builder": {
"enabled": false,
"gas_limit": "30000000"
} -
All other validators are configured as:
"fee_recipient": "0x6e35733c5af9B61374A128e6F85f553aF09ff89A",
"builder": {
"enabled": true,
"gas_limit": "30000000"
}
If --validators-builder-registration-default-enabled isn't specified (or set to false):
-
Validator
0xa0578...is configured as:"fee_recipient": "0x50155530FCE8a85ec7055A5F8b2bE214B3DaeFd3",
"builder": {
"enabled": false,
"gas_limit": "35000000"
} -
Validator
0xa99a7...is configured as:"fee_recipient": "0x6e35733c5af9B61374A128e6F85f553aF09ff89A",
"builder": {
"enabled": false,
"gas_limit": "30000000"
} -
All other validators are configured as:
"fee_recipient": "0x6e35733c5af9B61374A128e6F85f553aF09ff89A",
"builder": {
"enabled": false,
"gas_limit": "30000000"
}
Example configuration file using DVT and SSV
The following is a proposer configuration example using distributed validator technology (DVT) and secret shared validator (SSV) technology.
{
"proposer_config": {
"0xa057816155ad77931185101128655c0191bd0214c201ca48ed887f6c4c6adf334070efcd75140eada5ac83a92506dd7a": {
"builder": {
"registration_overrides": {
"public_key": "0xaef9162ee6f29ee82fbfe387756d84f9ac472eb8709217aaf28f5ef0ea273f6210e531496470b30d2b7747216e3672d5"
}
}
},
"0xa99a76ed7796f7be22d5b7e85deeb7c5677e88e511e0b337618f8c4eb61349b4bf2d153f649f7b53359fe8b94a38e44c": {
"builder": {
"registration_overrides": {
"public_key": "0xb53d21a4cfd562c469cc81514d4ce5a6b577d8403d32a394dc265dd190b47fa9f829fdd7963afdf972e5e77854051f6f"
}
}
}
},
"default_config": {
"fee_recipient": "0x6e35733c5af9B61374A128e6F85f553aF09ff89A",
"builder": {
"enabled": true,
"registration_overrides": {
"timestamp": "1669285248"
}
}
}
}
In this example, the builder is enabled by default, with timestamp registration override.
Each validator has its own public_key override.
All validators use the same 0x6e35733c5af9B61374A128e6F85f553aF09ff89A as fee_recipient.