BEP: 410 Title: Add Agent for Validators Status: Draft Type: Standards Created: 2024-07-15
This BEP attempts to enhance the security of validator account management through account isolation by delegating some of the validator operator's permissions to other accounts.
Currently, validators need to manage the operator key, consensus key, and vote key. Among these, the operator key is used for operating a validator, including creating a validator, editing the information of a validator, and undelegating.
When creating a validator, the operator key is also used for self-delegating with more than 2001 BNB. Since the operator key holds a large amount of staking, it is not suitable for daily management of the validator.
Therefore, we have introduced a new updateAgent
interface in the system contract. Through this interface, the operator can delegate another account to manage the validator.
Before this BEP, the consensus address, commission rate, validator description and vote address can only be changed by the operator which also manages staking for the validator. To reduce the usage of operator key and improve the security of operator key management, validators can set an agent to help them to take on the mentioned tasks below.
The current Validator
struct is as follows.
struct Validator {
address consensusAddress;
address operatorAddress;
address creditContract;
uint256 createdTime;
bytes voteAddress;
Commission commission;
Description description;
bool jailed;
uint256 jailUntil;
uint256 updateTime;
uint256[20] __reservedSlots;
}
The new Validator
struct is as follows. This BEP adds a new field agent
and reduce a slot of __reservedSlots
in the Validator
struct to keep
the slot layer compatibility of upgradeable contracts.
struct Validator {
address consensusAddress;
address operatorAddress;
address creditContract;
uint256 createdTime;
bytes voteAddress;
Description description;
Commission commission;
bool jailed;
uint256 jailUntil;
uint256 updateTime;
// The agent can perform transactions on behalf of the operatorAddress in certain scenarios.
address agent;
uint256[19] __reservedSlots;
}
The validator operator can set the agent address for the validator by calling the following function.
The newAgent
cannot be any operator address or any existing agent.
Each validator can only have one agent assigned at a time. Updating to a new agent will override the previous one.
function updateAgent(address newAgent) external validatorExist(msg.sender);
The agent is allowed to edit the consensus address, commission rate, description and vote address of the validator. The methods that can be accessed are as follows:
function editConsensusAddress(address newConsensusAddress) external;
function editCommissionRate(uint64 commissionRate) external;
function editDescription(Description memory description) external;
function editVoteAddress(bytes calldata newVoteAddress, bytes calldata blsProof) external;
It is notable that even after the agent is set, the operator retains the ability to edit the information listed below.
See bnb-chain/bsc-genesis-contract#568.
The content is licensed under CC0.