Hacker Dōjo Workshop:
研究种类: 模块化公链
资助金额:200 usdt
Bounty链接:Hacker Dōjo|课题研究:模块化公链 | Bounties | DoraHacks
创作者:0x322701
本项目由Hacker Dōjo资助,文章转载请联系
Telegram: @DoraDojo0
WeChat: @HackerDojo0
E-mail: hackerdojo0@gmail.com
一、模块化公链
区块链目前可以分为三个层级:
- 执行层(Execution Layer):交易、计算以及状态更新在这一层处理。
- 共识层(Consensus Layer):共识层提供排序和最终性。
- 数据可用层(Data Availability Layer):数据可用层提供数据的存储和数据可行性的验证。
目前的一体化区块链是所有节点都运行这三层,所带来的问题就是链上处理交易的速度缓慢并且昂贵,随着对区块链数据体量的增大,对节点硬件要求会越来越高,可以同时运行这三层的节点数目也会越来越少,这就会导致区块链的安全问题。
区块链不可能三角指的是目前的区块链不可能同时达到安全性、去中心化和可扩展性,只能三者取其二。安全性是指网络在受到攻击时的运行能力;去中心化指的是为了让区块链去中心化,硬件要求不能成为参与的限制,验证网络的资源要求应该很低;可扩展性指的是网络的吞吐量除以其验证成本。
关于如何提高区块链可扩展性目前已有很多解决方案,链上扩容的方案有sharding、更改共识协议,以及提高区块大小等,链下的扩容方案有状态通道、侧链以及Rollup等。在不妥协区块链安全性的前提下,我们需要找到一个保证去中心化的前提下提高可扩展性的方案。
模块化区块链打破了计算和验证开销之间的关系,将区块链的各个层级解耦,允许中心化计算的同时保证对计算去中心化的验证,即中心化出块+去中心化验证+抗审计性。
模块化区块链模型分为三种节点:
- 共识节点:这些是参与共识的节点,共识节点决定哪些区块应该上链存储。
- 存储节点:这些是存储区块链及区块中所有数据副本的节点。
- 轻客户端节点:这些是区块链系统的终端用户节点。他们从与他们相连的存储节点那里接收数据或者信息。
目前的模块化公链存在两个问题:
- 区块验证性问题:验证区块内的计算和状态转换是否正确
- 数据可用性问题:验证块内的数据是否公布
目前主要利用欺诈证明来解决区块验证性问题,用纠删码解决数据可用性问题。
关于欺诈证明,现有的安全性假设是建立在诚实少数假设上的。对于全节点,我们假设至少有一个诚实的全节点连接在网络;对于客户端节点,我们假设每个客户端节点至少和一个诚实的全节点相连。我们要做到的是客户端节点要得到近乎和全节点相同的安全性保证。
当我们把欺诈证明当成黑盒使用的时候,协议步骤主要有三步:
- 客户端节点请求一个区块;
- 它向网络发送请求接收关于这个区块的欺诈证明;
- 如果一段时间之后客户端节点没有收到欺诈证明,则认定该区块是有效的区块;如果客户端收到欺诈证明并且验证通过,那么客户端就会拒绝该区块。
欺诈证明里涉及两棵默克尔树,第一棵状态默克尔树的叶子存储的是一个个键值对。一个见证w是由一组键值对和它们在状态默克尔树的默克尔证明组成。stateRoot表示的是该状态默克尔树的树根,函数rootTransition表示根据输入的交易和见证,前状态跟是否可以转换到后状态跟。
交易数据存在数据默克尔树中,该默克尔树的树根叫做dataRoot。数据默克尔树的叶子存的是叫shares的数据份额,每个份额包含多个交易以及叫trace的中间状态跟。
利用函数parseShares对数据默克尔树叶子的每个份额中的交易和中间状态根进行提取,调用函数parsePeriod对提取的交易和中间状态根进行解析,返回一个前中间状态跟,后中间状态跟和两个状态跟之间的交易列表。
欺诈证明的基本思路就是检查前中间状态跟经过中间的交易列表是否可以正确的转换到后中间状态跟,如果计算出的后中间状态跟跟区块中提供的后中间状态跟不一致,则证明欺诈证明是有效的。
客户端节点在收到欺诈证明之后有以下几个验证步骤:
- 验证欺诈证明中的块哈希和自己收到的区块头中的哈希是否一致
- 对于数据默克尔树的叶子节点,验证关于所有叶子节点的默克尔证明
- 调用函数parseShare和parsePeriod解析出前中间状态跟,后中间状态跟和交易列表
- 调用函数rootTransition,验证前中间状态跟经过交易列表中的交易是否可以转换到后中间状态跟
对于一些恶意的区块生产者,他们没有公开全部数据在链上的情况,由于不公开数据不是唯一可归因错误(uniquely attributable fault),所以其他全节点无法生成欺诈证明。
对于全节点,这种攻击的解决办法非常简单,重新分出一条公开全部区块数据的链即可。但对于客户端节点,他们的安全性依赖于跟它相连的轻节点,因此他们无法判断出区块的数据是否真的公布在链上,这也就是数据可用性问题。
数据可用性问题的意义在于,恶意的区块发布者可能不会公布100%的数据,客户端节点只能通过随机采样的方式去验证区块的可用性,但如果恶意的区块产生者通过了随机抽样检测,但仍保留了几百字节的数据。这样的攻击可以大概率通过随机抽样检查,但仍会导致数据不可用。
我们利用纠删码技术来解决这个问题,一维RS纠删码方案的解决思路就是,当我们通过随机采样拿到大部分数据以后,我们可以自己恢复出原始数据,而避免了恶意区块产生者即使保留少部分数据也会导致区块数据不可用的情况发生。
我们将k个份额的原始数据利用RS纠删码扩展到2k个份额,并在扩展的数据上计算出默克尔跟,在这个方案里我们就能保证超过50%的份额公布并且通过验证时,区块的数据就是可以恢复的。
如果一个全节点有足够的份额来恢复数据,并且检测到恢复的数据与dataRoot不匹配时,它会生成一个欺诈证明,欺诈证明里包含了需要恢复数据的k个份额,因此欺诈证明里包含了需要恢复块大小的O(n)的数据,这对客户端节点来说时较大的开销。
因此大家涉及了二维RS纠删码方案,具体构建步骤如下:
- 将原始数据的份额放入𝑘×𝑘的矩阵中,如果份额不足则用扩展数据填充
- 应用RS纠删码将k x k的矩阵扩展到2𝑘×2𝑘的矩阵
- 计算2𝑘×2𝑘的矩阵中每行每列的默克尔树跟
- 将这4k个默克尔树根作为叶子节点,构建数据默克尔树,数据默克尔树的树根成为dataRoot
2D RS纠删码方案里生成欺诈证明只需要k个份额就可以恢复默克尔树跟,欺诈证明时需要O(dn)的数据,其中d时编码的维数。
客户端节点验证二维RS纠删码的步骤如下:
- 客户端节点从它所连接的一个全节点上收到一个新的块头,以及一组行和列的默克尔跟,客户端检查这些默克尔跟是否可以重新计算到dataRoot,如果检验失败,则拒绝该块。
- 客户端在2𝑘×2𝑘矩阵中随机选择一组独特的(x,y)坐标,并将其发送给它所连接的一个或多个全节点。
- 如果一个全节点拥有对应于坐标的所有份额及其相关的默克尔证明,它就会将它们发送给客户端。
- 对于客户端收到的每一个份额,它会检查其Merkle证明。
- 如果客户端连接的全节点没有这些数据,那么客户端会将份额和它们的默克尔证明广播给这些全节点。
- 如果步骤4中的所有证明验证成功,并且在步骤2中进行的抽样中没有丢失任何份额,如果在一段时间内没有收到该区块的欺诈证明,则该区块视为可用。
二、Celestia(Data Availability)
如果将区块链的共识层划分为事务顺序的共识和全局状态共识的话,celestia主要设计了可插拔的数据可用层和事务顺序共识层,celestia给了上层应用很大的自主权,不同场景的应用可以利用不同的共识协议。
Danksharding将共识层交给具有强安全性保障的以太坊执行,数据可用层利用Shard技术保障安全性。
Polygon是与celestia类似的模块化思路,但是Avail是利用KZG承诺解决数据可用性问题的。
三、Data Availability和Rollup
rollup技术是链下扩容的方案之一,旨在将脸上的计算和交易转移到链下执行,每隔一段时间返回一个状态转换的有效性证明。目前的rollup技术分为Optimistic Rollup和ZK Rollup。
在我看来,数据可用层是对区块链的横向扩容,解决的是区块链不可能三角问题,验证区块内的数据是否公开在链上。Rollup是在不改变区块链本身框架基础下的纵向扩容,验证计算和状态转换的正确性。
目前celestia也在尝试和rollup结合来提高整个区块链网络的可扩展性,通过专门设置settlement层来结合数据可用层和Rollup方案。
目前区块链每个层都有模块化区块链的工作,各个模块化区块链的项目也在尝试结合。相信未来模块化区块链的性能和可扩展性会更上一个台阶。
四、参考文献
[1] Al-Bassam M. Lazyledger: A distributed data availability ledger with client-side smart contracts[J]. arXiv preprint arXiv:1905.09274, 2019.
[2] Al-Bassam M, Sonnino A, Buterin V. Fraud proofs: Maximising light client security and scaling blockchains with dishonest majorities[J]. arXiv preprint arXiv:1809.09044, 2018, 160.
[3] Danksharding, Celestia 以及区块链分层结构 | DeFi之道
[4] An Incomplete Guide to Rollups
[5] Optimistic Rollups Vs Zero-Knowledge Rollups - 101 Blockchains
[6] https://blog.celestia.org/sovereign-rollup-chains/
[7] Modular Blockchains: A Deep Dive
[8] 读懂 Polygon 与 Celestia 提出的「数据可用层」的创新点和现实意义 | 巴比特
[9] Cosmos 是什么? 一文了解Cosmos的来龙去脉 | 登链社区 | 区块链技术社区
[10] A note on data availability and erasure coding · ethereum/research Wiki · GitHub
[11] 一文读懂以太坊新升级方案Danksharding | 登链社区 | 区块链技术社区
[12] reed-solomon codes
关于Dorahacks
DoraHacks 是一个全球范围内的极客运动、全球黑客马拉松组织者,也是全球最活跃的多链 Web3 开发者平台之一。DoraHacks.io平台使得世界各地的Hacker和开源开发者可以参与黑客马拉松、Bounty、Grant、Grant DAO,以及公共物品质押等加密原生协议和基础设施进行协作并获得资助。到目前为止,DoraHacks 社区的 4000 多个项目已经获得了来自全球行业支持者超过 3000 万美元的资助。大量开源社区、DAO 和 超过50个主要区块链生态系统正在积极使用 Dora 的基础设施(DoraHacks.io)进行开源融资和社区治理。
关于Dorahacks DAO Bounty
Dorahacks DAO Bounty,为各类DAO和组织赋能!
Bounty计划为DAO和组织提供了一个强大的平台,通过社区激励的形式,发布问题,协调任务,鼓励用户积极参与。
作为Bounty发布者,您可以根据我们的指南,发布社区相关的悬赏任务,解决问题的同时,提升社区活跃度:How to publish a bounty and easily fund bounty hunters
作为赏金猎人,您可以在DAO Bounty计划中发挥自己的专长和能力,认领悬赏,解决问题,获得酬金:DAO Bounties | DoraHacks
关于Hacker Dōjō
Hacker Dōjō是由Hacker共建的加密、Web3前沿技术开源知识社区。Dōjō会以直播/音频/文字等形式定期组织分享session,内容包括Web3领域前沿技术论文解读、技术研讨、工作坊、技术领袖研讨会等。欢迎在Hacker Dōjo社区讨论、学习和交流:Dora Dōjo - Dora Community Forum
目前Hacker Dōjō已分享的主题有:
- 密码学:基础专题(对称加密算法、哈希函数、群和公钥加密、数字签名和KZG承诺、零知识证明、非对称密码算法、分布式密码学)
- 密码学:算法代码专题(Halo、Halo2、Plonk、Groth16、分布式密钥生成)
- 密码学:抗量子计算破解算法专题
- Layer1架构:Move系列、模块化公链、共识协议Bullshark、内存池协议Narwhal和共识协议Tusk、Aptos共识与交易并行执行
- Layer2架构:zkSync研究、Layer2的支付通道扩容方法、Polygon Hermez、Optimism、StarkWare技术与生态梳理
- IRS系列:Interest Rate Swap and DeFi Platforms、Interest Rate Swap and Perpetual Swap、The Future Dencentralized Interest Rate Swap
- 量子计算系列:量子计算基础、Qiskit专题(Qiskit入门、Deutsch-Jozsa算法、Bernstein-Vazirani算法、Simon算法、量子卷积神经网络、量子傅里叶变换、量子相位)、Pennylane专题(利用变分量子电路拟合傅里叶级数)、实验法观测宏观量子叠加态
- AIGC系列:ChatGPT比较语料评测、GPT-4论文解读
加入Dōjō的Hacker可以提出自己的学习期望,主动提案自己擅长的技术话题,由Dōjō组织分享。同时,Hacker Dōjō推出Web3前沿课题研究计划,定期选题,由Hacker进行研究和讲解,并以bounty形式奖励研究贡献者。欢迎各位Hacker认领Bounty:DAO Bounties | DoraHacks
联系我们:
Telegram: @DoraDojo0
WeChat: @HackerDojo0
E-mail: hackerdojo0@gmail.com