Skip to content
Open
Show file tree
Hide file tree
Changes from all 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
41 changes: 31 additions & 10 deletions rfcs/0006-rollup/006-rollup.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,24 +64,30 @@
3. 交易执行。解决计算结果正确性问题。

### 技术方案
![](images/impl.png)
~~1. 聚合器如何解决审查攻击问题?~~

1. 聚合器如何解决审查攻击问题?
~~采用开源聚合器的方式来解决审查攻击问题。~~

采用开源聚合器的方式来解决审查攻击问题。
~~用户如果认为自己受到了审查攻击,可以自建聚合器。~~
1. 节点分类

用户如果认为自己受到了审查攻击,可以自建聚合器。
* Master节点:收集用户提交的交易,本地执行,排序,提交至`Layer 1`
* Validator节点:拉取`Layer 1`的交易,按顺序重放验证

用户如果认为自己受到了审查攻击,可以自建聚合器。

2. 交易顺序如何决定?交易如何保存?

* 对于红色和蓝色路线,交易通过`Layer 1`链来对交易进行排序,并保存在链的数据库中。
* 对于接收到来自于客户端的交易,会按照收到交易的时间戳+序号进行排序进行排序

* 对于黑色路线,聚合器直接对交易进行排序,保存在聚合器本地的数据库中。
* 收集到的交易会按照顺序将一批交易的原文打包成一个`packagedTx`,本地EVM按顺序执行`packagedTx`里面的所有交易,并将`packagedTx`原文存到`DAS(data availability server)`中,存储凭证存到区块链

3. 计算结果正确性如何保障?

* 对于红色路线,跟现有区块链系统保持一致。执行器执行完一个区块内的交易后,需要对当前状态计算一个密码学证据,即以太坊中的`state root`。这个证据会经过共识流程,确保所有节点的计算结果一致。

* 对于蓝色路线,`Layer 1`链的执行器退化为一个特殊的原生合约,提供对`Layer 2`的身份管理和计算结果管理功能。`Layer 2`执行完一个区块内的交易后,同样需要对当前状态计算一个密码学证据。然后以发交易的方式,将这个密码学证据提交到`Layer 1`链的特殊原生合约中。对于`Layer 1`来说跟红色路线一样,执行器依然要提供当前状态的密码学证据,并需要经过共识。这样可以保证`Layer 2`的计算结果是被`Layer 1`记录,并且是不可篡改的。辅助以链外的奖惩措施,或者启用多个`Layer 2`来确保其计算结果的正确性
* 对于蓝色路线,Master节点只会将`packagedTx`的存储凭证保存至`Layer 1`链,并提供对`Layer 2`的身份管理和计算结果管理功能。`Layer 2`执行完一个`packagedTx`内的交易后,需要将`packagedTx`原文保存到`DAS(data availability server)`中。然后由Validator节点从`Layer 1`链拉取交易并按顺序本地执行进行正确性验证

* 对于黑色路线,计算结果的正确性完全由中心化系统来保证。

Expand All @@ -92,6 +98,7 @@
* 使用`JSON`格式来描述交易结构。
* 提供密钥托管功能,为最终用户提供用户名/密码校验方式。


##### 发送交易

对于红色和蓝色路线,后端仍然要对接`Layer 1`链,最终还是要把交易转换为`Layer 1`链的交易格式,并提供相应的交易签名。
Expand All @@ -108,16 +115,30 @@

*聚合器架构图*

#### Layer 2管理合约
#### ~~Layer 2管理合约~~

分为两部分功能:
~~分为两部分功能:~~

1. 对`Layer 2`信息的管理。针对同一条链`Layer 2`可以有多个,每个都有自己的账户。这部分信息只有管理员可以修改。
2. 对`Layer 2`执行结果的管理。同时记录不同`Layer 2`在不同高度的执行结果。只有注册过的`Layer 2`账户地址才可以提交执行结果。
1. ~~对`Layer 2`信息的管理。针对同一条链`Layer 2`可以有多个,每个都有自己的账户。这部分信息只有管理员可以修改。~~
2. ~~对`Layer 2`执行结果的管理。同时记录不同`Layer 2`在不同高度的执行结果。只有注册过的`Layer 2`账户地址才可以提交执行结果。~~

数据结构
```asm
// PackagedTx
#[derive(Default, Debug, Deserialize, Serialize, Clone)]
pub struct Package {
//local executor block height
#[tag = 0]
pub batch_number: u64,
//Block encode
#[tag = 1]
pub block: Vec<u8>,
}
transaction.data = serialize(package);
```

```rust

// L2账户信息
struct L2AccountInfo {
// L2账户地址
Expand Down
Binary file added rfcs/0006-rollup/images/impl.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.