Skip to content

Commit

Permalink
feat: finish bep 410
Browse files Browse the repository at this point in the history
  • Loading branch information
cosinlink committed Jul 17, 2024
1 parent 9010f1f commit cd4bf2f
Showing 1 changed file with 95 additions and 0 deletions.
95 changes: 95 additions & 0 deletions BEPs/BEP-410.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,98 @@
</pre>

# BEP-410: Add Agent for Validators

- [BEP-410: Add Agent for Validators](https://github.com/bnb-chain/BEPs/pull/410)
- [1. Summary](#1-summary)
- [2. Abstract](#2-abstract)
- [3. Status](#3-status)
- [4. Motivation](#4-motivation)
- [5. Specification](#5-specification)
- [6. License](#6-license)


## 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. Status

This BEP is in progress.

## 4. 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.

## 5. Specification
### Data Structure
The current `Validator` struct is as follows.
```solidity
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.

```solidity
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.

```solidity
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:

```solidity
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;
```


## 6. License

The content is licensed under [CC0](https://creativecommons.org/publicdomain/zero/1.0/).

0 comments on commit cd4bf2f

Please sign in to comment.