Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BEP-410: Add Agent for Validators #410

Merged
merged 3 commits into from
Jul 18, 2024
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
104 changes: 104 additions & 0 deletions BEPs/BEP-410.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
<pre>
BEP: 410
Title: Add Agent for Validators
Status: Draft
Type: Standards
Created: 2024-07-15
</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
zzzckck marked this conversation as resolved.
Show resolved Hide resolved

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.
zzzckck marked this conversation as resolved.
Show resolved Hide resolved
```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);
```
zzzckck marked this conversation as resolved.
Show resolved Hide resolved

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


zzzckck marked this conversation as resolved.
Show resolved Hide resolved
## 6. License

The content is licensed under [CC0](https://creativecommons.org/publicdomain/zero/1.0/).
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ Here is the list of subjects of BEPs:
| [BEP-366](./BEPs/BEP-366.md) | PGreenfield Atomic Object Update | Standards | Candidate |
| [BEP-402](./BEPs/BEP-402.md) | Complete Missing Fields in Block Header to Generate Signature | Standards | Candidate |
| [BEP-404](./BEPs/BEP-404.md) | Clear Miner History when Switching Validator Set | Standards | Candidate |
| [BEP-410](./BEPs/BEP-410.md) | Add Agent for Validators | Standards | Draft |



Expand Down