准备

数据同步

区块链网络中的节点是否一定要给其他节点同步数据?

  1. net score
    1. 节点会对所有peer进行打分,称作net score
    2. 从peer获取数据的速度越快,则打分越高
    3. 新的数据会优先推送给分高的peer
    4. 打分过低的peer甚至会被ban掉
  2. 为了有更好的同步速度(特别是矿工),每个节点都会尽可能给peer同步数据,以获得更高的net score
/**
 * Increment peer's misbehavior score. If the new value >= DISCOURAGEMENT_THRESHOLD, mark the node
 * to be discouraged, meaning the peer might be disconnected and added to the discouragement filter.
 * Public for unit testing.
 */
virtual void Misbehaving(const NodeId pnode, const int howmuch, const std::string& message) = 0;

全节点

区块链网络中是否一定需要全节点(存储所有交易的节点)

  1. 不是
  2. 客观
    1. UTXO模型:只要全网保留了所有未被花费的交易,链就能运行
    2. account模型:只要全网保留了最新状态,链就能运行
  3. 主观
    1. 少数:浏览器有意愿维护全节点
    2. 中等:矿工维护全节点可以略微增加net score,有利于同步和爆块
    3. 多数:其他参与者没有必要维护全节点,只需要轻节点即可

介绍

  1. 去中心化存储(Decentralized Storage)目前有三类解决方案

    1. 去中心化网络,没有链

      1. 例子:IPFS
      2. 优点:数据检索(retrieve)快
      3. 缺点:没有激励,数据持久性差
    2. 链下存储,链上证明

      1. Filecoin
      2. 优点:有存储激励,数据持久性好
      3. 缺点:冷存储,数据检索慢
    3. 链上存储

      1. 在比特币、以太坊链上存数据(etherscan
      2. 优点:每个节点存一份,数据持久性好;交易在节点间同步,数据检索快
      3. 缺点:
        1. 每个节点存一份,存储代价大
        2. tx size大,同步时间长
      4. 因此
        1. 通过block size limit、tx size limit、fee等多种手段限制用链存数据
        2. 否则影响链的同步,容易造成孤块和分叉

      分叉的讲解示例

      分叉的讲解示例

  2. Arweave

    1. 链上存储,用tx存数据,保证数据持久性和检索速度
    2. 通过共识激励全节点(存储更多tx的节点)
    3. 通过一些手段缓解tx同步问题
      1. 异步获取tx、延迟打包tx
      2. 详细参考黄皮书的“Blockshadows”章节

共识

为了激励存储更多tx的节点,Arweave的共识算法总共经历了3个版本的迭代。

PoA

  1. PoA(Proof of Access)是Arweave最早的共识算法,记录在了黄皮书
  2. 矿工产生区块的流程
    1. Previous Block计算hash,然后除以 Previous Block Height 并取余,得到Recall Block Height

    2. 根据Recall Block Height获取Recall Block,如果没有其完整数据则返回上一步

    3. 拼接以下数据并计算hash,得到BDS(Block Data Segment),记录在New Block 的header里面

      1. Previous Block的hash
      2. Recall Block的完整数据
      3. New Block的完整数据(包括tx list,不包括BDSNonce
    4. 调节New BlockNonce,使block header的hash(RandomX,CPU友好)符合Difficulty

      Untitled