Skip to content

Latest commit

 

History

History
106 lines (82 loc) · 4.02 KB

BEP-410.md

File metadata and controls

106 lines (82 loc) · 4.02 KB
  BEP: 410
  Title: Add Agent for Validators
  Status: Draft
  Type: Standards
  Created: 2024-07-15

BEP-410: Add Agent for Validators

1. Summary

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.

2. Abstract

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.

3. Motivation

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.

4. Specification

Data Structure

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;
} 

Interface

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);

Agent Permission

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.

5. Reference Implementations

See bnb-chain/bsc-genesis-contract#568.

6. License

The content is licensed under CC0.