洒脱喜一周评 | 永不“增肥”的区块链,Coda如何将数据压缩成22KB
写在前面:
想象一下,假设有3种生物,其中A现有体重500 KG,其每年增重50KG,B现有体重600 KG,其每年增重200 KG,C现有体重4.5 KG,并且其每年都恒定在这一数值,那在它们当中,你的第一反应是倾向于接受(A、B还是C)?而在区块链世界里,比特币便相当于是A,以太坊就相当于B,而C就是本周我们要探讨的来自O(1) LABS的Coda区块链协议,一个被coinbase、Multicoin Capital、DragonFly Capital等圈内知名资本看好的一个区块链项目,其区块链的大小恒定为22 KB(注:不包括客户端)。
在硬核技术文章精选部分,我们还会看到关于比特币奇葩8问、隐私方案ZK² Rollup以及比特币技术周报的内容。
而在文章最后,我们则会分享关于以太坊1.X、以太坊2.0以及Layer 2的一些研发进展。
(图片来自:tuchong.com)
一、22 KB:永不“增肥”的Coda区块链协议是如何炼成的
对于比特币、以太坊等加密货币而言,“去中心化”属性是以牺牲“可扩展性”为代价的,因为每个节点在加入网络后都需要处理整个系统的历史记录。而随着时间的推移,验证区块链所有信息所需的时间就会变得非常长,在撰写本文时,比特币的区块链大小超过了270 GB,其包含超过5亿笔交易,而在笔记本上下载所有的比特币历史记录,一般要花费数天的时间。
而拥有大量状态数据的以太坊,则显得更为臃肿,目前一个以太坊档案节点的大小大约达到了4TB,而只保留完整交易历史的GETH全节点则大约达到了300 GB。
而这些资源需求,对于全节点的运行而言是很大的阻力,如下图所示,随着时间的推移,尽管比特币的用户群体在增长,但其全节点的数量并未出现明显增长,而以太坊的全节点数,则出现了明显的下滑趋势。
而从以上数据来看,我们可以看到,这一问题对于比特币而言,似乎并没有那么紧迫(硬件和网络也会随时间而提升),但对于以太坊而言,这个问题却显得尤为紧迫,也因此,关于无状态客户端的研究,包括V神在内众多以太坊研究者都是非常关注的。
1、1 关于区块链可扩展性的一些方案
通过比特币和以太坊的例子,我们可以发现,去中心化与可扩展性的权衡一直是一个关键的挑战。而研究者们也提出了诸多解决方案,而所有的方案都存在着各种权衡,比如闪电网络、Plasma和Rollup方案,它们是将交易从主链转移至链外,然而,这依旧要求节点运行者下载整个区块链,而且闪电网络和Plasma也暴露出来了一些问题,这限制了它们的有效性。
而轻节点,则是另一种可能的解决方案,它们通过下载区块头(block header)来工作,以确定具有最强协议状态的数据库状态Merkle根。
分片,则是另一种增加容量的方案,但是,节点仅对拥有完整数据的分片具有完全确定性。在分片节点没有完整数据的情况下,这些节点本质上必须信任共识节点,并以此作为轻节点运行。此外,该技术的代价是,每次验证者更换时,都必须下载新的分片。
另一种提议的解决方案,是依赖第三方节点,本质上,这种方法需要信任第三方,而这对于抗审查和网络活性而言都是不利的。
1、2 Coda的简洁区块链设计
而来自O(1) Labs团队和纽约大学的研发者,则设计了一种称为Coda的简洁区块链系统,其可以不依赖第三方建议就可以有效地验证系统历史,而这是通过在每个区块中包含简洁证明SNARK来实现的这一目标。据悉,Coda使用了帐户模型(而不是比特币使用的UTXO模型),其中区块链的当前状态是所有帐户余额的列表。
值得注意的是,Coda每个区块包含的是对此状态的承诺,而不是整个状态,因此,其全节点不必存储整个状态,而仅仅在最新区块头中仅给出状态承诺,而这足以有效验证帐户余额。
在Coda简洁区块链当中,主要存在着三种角色,它们分别是:
- 全节点:这一角色会跟踪并验证区块链摘要;
- 区块生产者:这一角色会负责生成区块;
- 区块链摘要生产者:这一角色会负责生成区块链摘要;
此外,给定一个区块链摘要,我们可通过可提取性的概念得出其底层区块链。
1、3 基于SNARK的简洁区块链构造
Coda协议的核心,就是zk-SNARK的使用,其充当不可伪造的证书,用于证明计算是正确执行的,而不需要证明整个计算,而通过创建一个SNARK证明,就可以证明区块交易历史记录的准确性,这有效地将区块的大小减小到单个SNARK(大约1kB)。具体来说,SNARK验证所有规则以达成共识,其确保:
- 交易是已签名的;
- 交易是有效的;
- 共识规则(PoS的可变随机函数等规则);
简单来说,它就是给多个SNARK创建一个SNARK,这就是用到了SNARK可用于验证任何计算的特性,我们将其称为递归SNARK。
我们可以将这些SNARK证书以递归结构链接在一起,并允许区块链保持约22 KB(SNARK +尾部Merkle路径)的恒定大小。
每次生成新区块时,都会创建一个新的SNARK证书,然后通过创建包含先前SNARK证书的单个SNARK证书,你就可以证明区块链的整个交易历史,也就是说,这允许你从创始区块跃迁至当前状态,同时保持单个SNARK证书的大小。
而一个递归合成zk-SNARK(1kB),它证明了区块链的整个过去历史,以及当前状态merkle根路径(20kB)的有效性,它们一起证明了用户余额的有效性。
从理论上来说,这种单纯的递归组合是可能的,但这存在一个较为致命的缺点,它是非常昂贵的,尽管SNARK验证程序的执行速度非常快(在台式计算机上仅花费几毫秒的时间),但生成SNARK证明却是非常昂贵的。
为了解决上面的这个问题,Coda采用了一种“椭圆曲线循环”(cycle of elliptic curves)技术,其中设计了两种SNARK结构(称为Tick和Tock),以便彼此可有效地验证彼此的证明。
其中,Tick SNARK用于在树的“基础”上验证状态转换,然后,为了使这些证明有效合并,可以使用Tock SNARK对每个证明进行“封装”,再然后,使用Tick SNARK合并两个Tock证明:
- 基础SNARK :用于验证单个状态转换的Tick SNARK,我们将其称为“基础”SNARK;
- 合并SNARK :用于合并两个Tock证明的Tick SNARK,我们将其称为“合并”SNARK;
- 封装SNARK :用于封装Tick证明的Tock SNARK,我们将其称为“封装”SNARK。
1、4 Snark 优化
在本节中,我们将介绍Coda协议采用的两种优化方案,它们分别是“并行扫描状态”和“证明激励”,它们都是针对以下问题提出的:问题:如下图所示,计算Si,我们就需要Si-1,因此,SNARK证明计算是存在顺序依赖性的,而结果便是,简单的实现,会遭受计算证明所需时间的阻碍,此外,由于高交易延迟(将交易汇总到SNARK证明中所需的时间)的问题,它对区块提议者的内存要求是很高的。
优化技术1:并行扫描状态
我们知道,未经处理的区块链本质上是连续的(即通常不能并行化),但是,由于SNARK的增量可计算性,SNARK工作是可以并行化的。这是导致“并行扫描状态”概念的关键观察结果,在这种情况下,我们将生成区块与计算SNARK证明分离开来。
我们维护一个特殊的队列(称其为工作队列),在队列中,我们提议新的区块。换句话说,它是网络要执行的“ SNARK工作”的队列。
然后,网络会并行计算SNARK证明,计算一棵证明树,其中子叶对应于证明单个区块有效性的证明,而其他证明仅证明其子证明的正确性。最后,根证明认证了与树的子叶相对应的所有区块的正确性,正如下图所示,
优化技术2 : 激励证明者
我们把生成SNARK证明的一方,称为SNARK证明者(或简称为SNARKer),然后,为了实现尽可能最小的交易等待时间,就需要用到激励措施。
而Coda提议的激励结构如下:每个将区块推送到工作队列的区块生成者,都需要通过生成验证该区块的证明来弹出一个区块。它会发布一个费用请求以及它生成的SNARK证明,它还包括同一区块中的一笔交易,该交易向计算区块snark的证明者支付费用。通常,这些费用是从区块生产者可能收到的交易费用中支付的。
实质上,每个SNARK都有一个最低价格的拍卖,区块生产者希望尽可能少地向SNARKer支付证明费用,而SNARKer则希望尽可能多地为其证明收取费用。
因此,强制一个区块生产者同时成为另一个区块的SNARK证明者,对于系统的稳定性而言是有帮助的。
而对于给定证明和相关的费用请求,我们就要求对手不能欺骗费用请求,否则,攻击者就可以假扮另一方的证明,以此作为自己的证明或修改某人的费用请求,而知识签名是使其能够实现的密码学原语,在Coda中,其使用了一种基于Bowe–Gabizon模拟可提取SNARK的构造。
1、5 Coda的实验结果和未来的工作
根据论文介绍,Coda协议是通过OCaml语言编写的,而其SNARK则是通过一种称为Snarky的特殊语言编写,其底层gossip协议则是基于libp2p,目前其测试网客户端的大小则大约为900 MB。而在测试网阶段,一共有85位独立参与者参与了测试,其中有49位是区块生产者,有8个是独立的SNARK证明者。在此期间,共诞生了24826笔交易(其中有17256笔来自社区成员),并生成了53120个区块SNARK证明,总的来说,Coda全节点可实现恒定大小的目标,并且保持在一个可接受的范围之内。
洒脱喜简评:Coda利用零知识证明技术来实现简洁区块链的思路,固然是值得探索的,但其底层实现却非常复杂,这无疑也会引入一些新的技术问题,因此,要真正安全、可靠地实现一个永远不会长胖的区块链,可能还需要进行大量的研究及实验验证。
参考资料
- https://codaprotocol.com/blog/coda-protocol-a-succinct-blockchain
- Coda: Decentralized Cryptocurrency at Scale https://eprint.iacr.org/2020/352.pdf
- https://github.com/CodaProtocol/coda/releases/tag/0.0.11-beta5
二、硬核技术文章一周精选
2、1 比特币奇葩8问:为何区块620826比区块620825早1秒诞生 ?
关于比特币,我们有时会遇到一些难以理解的技术问题,例如“新区块比旧区块早1秒诞生”、“同一时间不同全节点的大小不同”等奇葩现象,对于这些问题,就需要求助专业的开发者来帮忙解惑,在本文中,译者便选取了8个相对较有趣的问题,而来自比特币开发社区的大神们也给出了精彩的答案。文章链接:https://www.8btc.com/article/577324
2、2 隐私方案ZK² Rollup:如何在以太坊上实现高速、廉价的隐私交易
隐私协议团队Aztec正在研发ZK-ZK rollup方案,以在以太坊主网上实现每秒数百笔的隐私交易,同时可降低每笔隐私交易的成本,这篇文章介绍了ZK² Rollup的概念,以及实现它的难点。文章链接:https://www.8btc.com/article/576962
2、3 比特币技术周报:状态链(statechain)、Schnorr 签名和BIP322三大更新
在这周的比特币技术简报中,我们首先描述了一个旨在将statechain(状态链)部署在比特币上而无需进行共识层变更的提案,然后总结了有关有助于防止差分功耗分析(DPA)攻击的Schnorr nonce生成函数的讨论,以及关于BIP322 通用signmessage的拟议更新。最后,我们还会介绍一些流行比特币基础设施项目的更新内容。文章链接:https://www.8btc.com/article/577891
三、以太坊一周研发更新进展
以太坊1.X更新内容:
- Alex Stokes解释了以太坊2.0如何从 EIP2537 中受益;
- OpenEthereum有了一个初始Alpha版本;
- 无状态以太坊的更新技术树 :包括替代同步协议、Witness规范原型、EVM以及二叉树转换;
- Ben Edgington发布关于以太坊2.0的最新更新内容;
- Danny Ryan撰写的以太坊2.0进展更新;
- 以太坊2.0 第一阶段的漏洞赏金活动已经开始;
- 最新的Prysmatic客户端更新,重启测试网以运行最新的规范;
- 最新的Lighthouse客户端更新:3倍同步加速,修改规范错误,为多客户端测试网做准备;
- 关于以太坊2.0 staking 的 用户体验(UX)报告 ;
- 什么是 Zeropool ?一种以专注隐私的optimistic rollup,其功能类似于混币器;
- Dharma正使用ethresearch上发布的规范部署一个rollup链;
编译:洒脱喜 稿源(译):巴比特资讯(http://www.8btc.com/article_579234)
What Will Send Dogecoin Soaring? Analyst Reveals The Key Drivers
Technical analyst Kevin, known on X as @Kev_Capital_TA, highlights what he describes as “a low at th...
STEPN and the Argentina Football Association Announces their latest NFT Drop
Sydney, Australia, 30th April 2025, Chainwire...
Catizen Levels Up Web3 Gaming on TON in Collaboration with Animoca Brands
Animoca Brands and Catizen united as one to boost Web3 gaming on TON and expanding Telegram’s mini-a...