# AR技术

By [itherunder](https://paragraph.com/@itherunder) · 2021-12-10

---

### 1\. Blockweave

#### a. 块哈希列表（block hash list，所有前面块的哈希

#### b. 钱包列表（wallet list，所有活跃钱包的列表，可以在不拥有最后一个交易的块的情况下验证交易，还不知道每个活跃钱包有什么内容，估计有公钥啥的吧，可以对交易是否签名进行验证并恢复交易内容，怎么恢复就是密码学知识了，不懂

#### c. 持续验证（不需要全同步，可以立即开始挖矿，说是因为有了a和b就可以做到这个，即矿工不需要找与钱包相关的上一条交易来验证新交易（以太坊有一个nonce值，需要同步区块进行更新），而只需要验证钱包是不是用私钥对这个新交易进行了签名。而a列表的哈希值会存储到每一个新块中，保证不会受到伪造recall块（这个recall块还不知道是啥）。说到底挖矿就是验证打包的过程，猜测活跃钱包地址可以解决验证过程，块哈希列表可以解决打包过程

> 图1 blockweave的数据结构

![image](https://storage.googleapis.com/papyrus_images/00ddb891ccb6e92342053f9bddd96d95bc73b42f9f5f8ee77932dfb19264befb.png)

image

* * *

### 2\. Proof of Access

#### a. PoW只依赖前面的一个块来生成新的块，PoA则还用了一个前面随机选择的一个块（即recall（实际上由当前块的hash和块高决定）块，使用blockweave，矿工就不需要存所有块，而是可以存储之前的任何块

#### b. 打包完成后则会recall块和当前得到的块一起分发出去给其他节点验证

#### c. 因此PoA鼓励节点存储“稀有”块，这样就会有更大的概率获得奖励，这是因为当一个稀有的区块被选中时，在PoW中，能够获得该区块的矿工会与更少的矿工竞争相同级别的奖励

#### d. P(win) = P(has recall block) ∗ P(finds hash first)

#### e. BDS（block data segment）在Arweave协议的工作证明机制中扮演着“谜题”的角色，是新的块数据段(BDS)是一个哈希值包括:

#### f. 以下是生成一个新的候选区块所涉及的五个阶段:

    1）组装相关的元数据；
    2）将要挖掘的事务集收集到新块中，并一起验证该集。这包括计算当前的难度，并根据该难度验证交易费用；
    3）生成新的块数据段(BDS)；
    4）找到一个满足BDS难度的nonce；（pow）
    5）打包并以blockshadow的形式传播新块
    

> 图6 前一个块（块哈希）、召回块（全部内容）和事务的块构造

![image](https://storage.googleapis.com/papyrus_images/f64a94379a344829b5f28f9653900295b1fe0b022936ff84147a6d838137b344.png)

image

#### g. 当且仅当前一个块已被挖掘时，才能知道下一个召回块的标识(即高度和独立块哈希)。随后，矿工无法提前预测哪个召回区块将需要挖掘下一个区块。这意味着对于任何矿工来说，最有效的策略是存储尽可能多的网络旧块

* * *

### 3\. Wildfire

#### a. 提供方便的数据访问方式，免费访问数据

#### b. Wildfire是一种在分散的网络中解决数据共享问题的系统，参与挖矿的节点会按照响应请求速度以及接收其他节点数据速度进行排序，排序越高会越快接收到新块以及新交易（更早进行PoA）

#### c. 这个系统会让节点更快连接，更快响应，更快路由

> 图2 Wildfire系统的说明，每个节点根据这些节点之前对它们的行为有多有利对其进行排名

![image](https://storage.googleapis.com/papyrus_images/e1fb5dca257b381bec9b7808fece43b5cd408da3fbd789daec176ec91dc92600.png)

image

* * *

### 4\. Blockshadows

#### a. 传统区块链会把所有块分发到每个节点，这造成了数据的巨大浪费，这个技术解决了

#### b. 每个blockshadow，只传交易的哈希列表以及hash(1中的a和b)，这样的话拥有区块中全部交易以及1中的a和b的节点就可以恢复任意大小的区块（那没有区块中全部交易的节点怎么办，就是不想知道可以不知道，但是总得有一个区块保存全部的，不过这一点打包某个块的节点确实是一定有整个区块的交易的，只不过打包完成后传的时候可以这么传，这样的话，tps就可以很快了，文章说5000

#### c. 节点之间发送一个最小的blockshadow，允许节点重建一个完整的区块，而不是传输整个区块本身，使用这种机制，块大小的瓶颈变成了可以包含的事务id的数量，以及从组成事务重构块所需的时间长度

#### d. 没有recall块的节点也能对生成的新块进行验证，可以通过blockshadow以及本地存储的钱包列表等信息恢复整个recall区块，从而哈希之后得到recall块的哈希值，再与存储的区块哈希列表进行验证就可以了

* * *

### 5\. Democratic Content Policy

#### a. 每个节点都可以在本地维护一个黑名单，可以拒绝某些数据的存储

#### b. 如果某个数据被网络大部分节点拒绝，那么其他节点也会拒绝这些数据的存储

* * *

### 6\. Storage Pools

#### a. 随机的recall块其实就相当于存储证明的一种方式，因为只有当你拥有这个recall块中的全部内容（交易数据）时，你才能够进行打包计算，所以只有节点尽可能地存储更多的数据（即区块内容）时，该节点才更有可能可以进行新区块的打包并获取相应的奖励

* * *

### 7\. Thoughts（需解决1. 空间证明；2. 防篡改

#### a. 空间证明：随机的一个recall区块就可以让节点尽可能保存更多的区块（即数据，说到底是一个概率问题，只要你的空间足够大就更有可能存在这个recall区块，从而获得奖励

#### b. 防篡改：即避免数据遭到更改，由于recall区块是随机的，所以如果节点这次宣称有从而获得了奖励，而下一次也可能是这个recall时，如果节点在这个期间修改或者删除了改recall区块就无法获得奖励了

#### c. 赢得区块奖励的概率 = 拥有历史数据的概率 x 第一个找到 hash 的概率。从本质上来说，矿工不需要根据整个Weave网络的规模来扩展他们的存储设备，因为他们可以只存储整个网络的一部分

#### d. 不能让每个拥有recall块的节点都获得奖励（因为没有PoW的话，其值可以快速传播，使得本来没有这个块的节点也能够假装拥有

---

*Originally published on [itherunder](https://paragraph.com/@itherunder/ar)*
