{"content":{"title":"数据可用性采样(DAS ) #1 ：为什么会需要 DAS？","body":">- 原文链接：https://medium.com/taipei-ethereum-meetup/data-availability-sampling-part-one-why-das-dc17f83355b5\r\n>- 译者：[AI翻译官](https://learnblockchain.cn/people/19584)，校对：[翻译小组](https://learnblockchain.cn/people/412)\r\n>- 本文永久链接：[learnblockchain.cn/article…](https://learnblockchain.cn/article/8977)\r\n    \r\n\r\n数据可用性采样（DAS : Data Availability Sampling ） 技术带来的好处是什么？为什么我们会需要它？\r\n\r\n![img](https://img.learnblockchain.cn/pics/20240808175949.jpeg)\r\n\r\n图片来源：[Testalize.me](https://unsplash.com/@testalizeme?utm_source=medium&utm_medium=referral) 于 [Unsplash](https://unsplash.com/?utm_source=medium&utm_medium=referral)\r\n\r\n**先备知识：**\r\n\r\n- 对 以太坊 的共识运作有基本认识\r\n- 知道全节点（Full Node）与轻节点（Light Node）的区别\r\n- 知道 Rollup 与数据发布（数据可用性）的问题\r\n\r\n以下会以 **数据发布（Data Publication）** 来称呼 **数据可用性（Data Availability）**，但某些 Data Availability 相关的词汇例如 DAS、DAC 则会保留原字，避免读者无法和英文原文连结。关于 Data Publication 这个名称的介绍可以参考：\r\n\r\n[数据可用性重新命名：用 Data Publication 取代 Data Availability](https://medium.com/taipei-ethereum-meetup/data-publication-yes-data-availability-no-baac93be223f?source=post_page-----dc17f83355b5--------------------------------)\r\n\r\n这个系列文章将会通过 Danksharding 介绍 DAS 的运作机制、以及 Celestia、EigenDA、AvailDA 这几个方案的异同之处。\r\n\r\n第一篇将会介绍为什么我们会需要 DAS 以及 DAS 所带来的好处。\r\n\r\n## Recap：为什么会讨论到数据发布的问题？\r\n\r\n目前在 以太坊 生态系中最常讨论到数据发布的情境是在讨论 L2 的设计的时候：L2 自己也是一条链，所以也会有自己的区块与交易数据，那这些数据要放在哪？因为用户需要这些数据来确保安全性。 \r\n\r\n- 如果是 Rollup，它会将它的交易数据上传到 L1 例如 以太坊，把 以太坊 当作放数据的地方。\r\n- 如果不是 Rollup，那就会把数据放在其他地方，例如由一群被信任的成员来保管，这样的保管者称为 Data Availability Committee（DAC）。\r\n\r\n更多关于 Rollup 与数据发布的关系可以参考：[Rollup 与数据可用性](https://medium.com/taipei-ethereum-meetup/rollup-and-data-availability-227340f1dbd6?source=post_page-----dc17f83355b5--------------------------------)\r\n\r\n\r\n\r\n但其实不只是 L2，以太坊这条链本身也会需要面对数据发布的问题，因为轻节点不会像全节点一样下载完整的区块数据，所以轻节点需要相信“当一个新的区块出现时，该区块的完整数据真的有被发布”。当一个轻节点被诱骗而相信一个“数据不完整的”区块，这和它被诱骗去相信一个“不合法的”区块的影响是一样的 — 它接上的都是一条不被其他人承认的分叉链。\r\n\r\n![img](https://img.learnblockchain.cn/pics/20240808181809.png)\r\n\r\n>  全节点不会相信不完整的区块，但轻节点会相信\r\n\r\n那目前 以太坊 的轻节点是相信谁来确保一个新的区块的数据有被完整发布？答案是“验证者（Validator）们”。当轻节点收到一个新的区块，它不会下载完整区块数据，但它会看有多少验证者投票给这个区块。当有足够多的验证者投票给这个区块，它就会相信这个区块的完整数据有确实被发布。这是属于 **Honest Majority** 的假设，也就是相信大多数的验证者是好人。\r\n\r\n![img](https://img.learnblockchain.cn/pics/20240808181814.png)\r\n\r\n> 当足够多的验证者对区块签名，轻节点就会相信区块有完整发布\r\n\r\n注：目前 以太坊 轻节点并不是真的采集数十万个验证者的投票来计算，因为数量太多、计算太耗资源，而是指派另一批在数量上少得多的 Sync Committee，由里面的验证者签名作为给轻节点的担保。这算是一个过渡的做法，等待未来更完整成熟的设计取而代之。\r\n\r\n## Data Availability Sampling\r\n\r\n“相信大多数的验证者是好人”听起来已经是个合理且不错的选择，但如果我们能做得更好呢？如果有一天真的发生大多数的验证者想联合起来欺骗我们说有完整区块数据但其实没有，不过只需要 p2p 网络中存在少数好人，我们就可以免于上当呢？\r\n\r\n这么棒的能力肯定不会凭空出现，要具备这个能力需要构建出够稳固的 p2p 网络、有足够多的用户，甚至要能在网络层加入隐私的功能。这个能力就是这个系列文章的重点 — Data Availability Sampling（DAS）。\r\n\r\n在一个具备 DAS 的区块链中，轻节点不会只是被动接收新的区块数据，而是要共同参与到 DAS 的运作之中：每个轻节点都要针对每一个区块，到 p2p 网络中去索求该区块身上的几段数据并保存这些数据，并且在其他节点索求数据时分享给对方。就像分布式的文件分享协议 BitTorrent 一样，网络中的节点们一起保存、共享他们所在乎的数据，而不是依赖某个中心化服务器。\r\n\r\n![img](https://img.learnblockchain.cn/pics/20240808182000.png)\r\n\r\n>  轻节点们一起通过 p2p 网络索求与分享区块的片段数据\r\n\r\n注：理想的情境中，区块链的用户都会运行轻节点，一起参与到 DAS 的运作中、一起确保安全性，而不是像现在完全相信其他节点。\r\n\r\n每个轻节点在它成功拿到它索求的每段数据之前，都不能相信区块数据已经被完整发布，不过一旦索求的每段数据都拿到了，它就可以放心地相信区块数据已经被完整发布了。但为什么轻节点明明只拿了片段的数据却可以放心相信完整的区块数据有被发布？这是因为网络中的其他轻节点们也会各自保管片段数据，因此在有需要的时候，大家将可以合力借由彼此的片段数据拼凑出完整的数据，而且 DAS 另一个神奇的能力是：轻节点们合力保存的数据不需要涵盖完整的区块数据，轻节点们只要拿到其中 50% 的数据就可以还原出 100% 的数据。\r\n\r\n![img](https://img.learnblockchain.cn/pics/20240808182045.png)\r\n\r\n轻节点们只要有超过 50% 的片段数据，就能还原出完整的区块数据\r\n\r\n注：不一定是 50%，可能会更高，端看该 DAS 的设置，但一定会小于 100%。\r\n\r\n所以在 DAS 中，即便大多数的验证者都投票给某个区块，轻节点也不会轻易相信该区块。轻节点会进行采样（Sampling），也就是索求该区块的片段数据，当索求的片段都拿到手后才会相信区块数据有被完整发布。\r\n\r\n## Honest Majority -> Honest Minority\r\n\r\n相比于目前没有 DAS 的 以太坊，轻节点必须依赖“**大多数验证者是好人**”，也就是 **Honest Majority** 的假设；以太坊 加入 DAS 后，轻节点依赖的是只要有“**少数的节点是（会采样并保管数据的）好人**”，也就是 **Honest Minority** 的假设。\r\n\r\n注：“少数”指的是需要采样并保管足以还原出完整数据的轻节点数量相对于网络里所有（非常多）的轻节点是相对的少数。\r\n\r\n## 概率上的安全性\r\n\r\n前面有提到过，当一个轻节点收到它所索求的所有片段数据后，它就会相信区块数据有被完整发布，而且网络中的轻节点们在有需要的时候可以合力借由片段数据还原出完整数据，但是…如果产生区块的人是恶意的，而且它一开始就没有要释放出足够的区块数据呢？如果它就是针对某个轻节点，并在提供给那个轻节点所需要的片段数据之后就不再提供任何数据呢？\r\n\r\n![img](https://img.learnblockchain.cn/pics/20240808182049.png)\r\n\r\nAlice 成功拿到索求的数据，因此相信区块数据有被完整发布，最终她将会接上这个被其他节点丢弃的区块\r\n\r\n那这个可怜的轻节点就得乖乖受骗了，而这也是 DAS 的限制与权衡：DAS 提供的“数据有完整发布”的保证是概率上的保证，不是百分之百、斩钉截铁可以确定的保证，但这仍然好过\r\n\r\n于得原本得完全相信大多数的验证者的情况。如果你觉得概率上的保证不够安全、想要百分之百确认区块数据到底有没完整发布，那很抱歉，你只能自己跑一个全节点把完整区块数据下载下来。\r\n\r\n注：运行轻节点的程序没办法知道自己被骗，对程序来说，只要收到所有索求的数据就会相信区块是有完整发布。用户只能通过自己的社交渠道来得知某个区块实际上是没完整发布的，并赶快指示自己的轻节点将该区块标记为数据不完整。\r\n\r\n## 网络隐私的重要性\r\n\r\n如果产生区块的人是恶意的且它就想要骗某些轻节点，那很遗憾地，它将能够骗到那些轻节点。不过这个受骗的数量会有一个上限，毕竟攻击者也不能释放太多区块导致轻节点们真的可以合力还原出完整数据。\r\n\r\n这时大家可能在担心，难道自己的安全性只能建立在“和产生区块的人无仇”、“攻击者不知道我是谁所以不会盯上我”吗？是的，但这也是为什么前面会提到 DAS 需要网络层的隐私功能，因为如果攻击者能知道是“谁”在索求片段数据、或知道 A,B,C 这三个片段是“同一个人”在索求的，那它自然就能轻松地瞄准目标受害者并提供数据给对方。如果今天网络层具备隐私功能，那攻击者就没办法知道现在到底是谁来索求这个片段数据，自然也就没办法让目标上当受骗，攻击者的攻击效率就会大大降低：它完全没办法确定是否有骗到受害者，或甚至骗到任何一个轻节点。\r\n\r\n![img](https://img.learnblockchain.cn/pics/20240808182053.png)\r\n\r\n如果攻击者不知道是谁来索求数据，就非常难骗到轻节点\r\n\r\n## DAS 的安全基底\r\n\r\nDAS 要能确保安全性，需要：\r\n\r\n1. 区块数据通过纠删码（Erasure Coding）增加数据的可靠性，例如节点们只要通过任意的 50% 数据就能还原出原本 100% 的数据\r\n2. 轻节点们合力采样并储存足够多的片段数据，确保能还原出完整数据，以及\r\n3. 一个健全的 p2p 网络让节点们可以分享片段数据。\r\n\r\n### 1. 通过纠删码增加区块数据可靠性\r\n\r\n如果区块没有经过纠删码进行编码，而是让轻节点们直接采样原始的区块内容会有什么问题？答案是：轻节点们采样的片段数据要达到 100% 覆盖率才能确保数据的完整。即便轻节点们合力采样了 99% 的区块数据，这个区块一样是不完整的、是不被承认的。\r\n\r\n![img](https://img.learnblockchain.cn/pics/20240808182057.png)\r\n\r\n没有纠删码的情况下，只要一丁点的区块遗失，就等于区块没完整发布\r\n\r\n如果区块经过纠删码的编码，那只要例如任意的 50% 数据就能还原出 100% 数据，这表示轻节点们只要合力采样的片段数据达到 50% 的覆盖率就可以确保一定能还原出完整的区块数据。相比于 100% 的覆盖率，50% 覆盖率的要求就简单了许多，恶意的出块者想要藏着部分数据来欺骗轻节点就会困难许多。\r\n\r\n注：50% 只是一个例子，不同需求会有不同的还原所需 % 数。\r\n\r\n### 2. 轻节点们保存足够多的片段数据\r\n\r\n如果轻节点保存不够多的片段数据，那即便区块数据通过纠删码编码了，还是没办法还原出 100% 数据。例如假设轻节点们一共只储存了 40% 的片段数据，它们合力也无法还原出 100% 的数据，那这些节点们就会全都上当，相信区块数据有被完整发布。\r\n\r\n要怎么确保轻节点们有保存足够多的数据？我们需要有足够多的轻节点或是每个轻节点进行足够多的采样。如果轻节点够多，那每个轻节点采样的次数就不用高；但如果轻节点不够多，那每个轻节点采样的次数就要够高，才能确保轻节点们合力有保存足够多的数据。\r\n\r\n注：如果轻节点的数量持续增长，那在采样次数不变的前提下，它们合力能储存的数据大小其实也可以跟着提高，例如这个系列文章会介绍到的 Celestia 便是能支持弹性区块大小的区块链：Celestia 的区块大小是可以因应网络中轻节点的数量去调整的。\r\n\r\n### 3. 健全的 p2p 网络\r\n\r\n轻节点们需要通过 p2p 网络来分享片段数据，以便能在有需要的时候还原出完整区块数据。如果 p2p 网络不稳定、无法处理大量数据请求的话，就有可能导致节点们获取不到某些片段数据。另外也要避免全部的片段数据都流通在同一个 p2p 网络中导致网络带宽过载，理想上一个轻节点应该要能只收到它索求的数据，而不是其他无关紧要的数据也全都通过 p2p 网络流经它的手上。\r\n\r\n此外网络层还会需要具备隐私的功能，否则轻节点就会被攻击者识别出来，攻击者不会公布超过 50% 的数据，但它会提供被它锁定的轻节点所索求的片段数据来误导该轻节点相信区块数据有被完整发布。\r\n\r\n这三个部分的细节还会在这个系列文章中做更详尽的介绍。\r\n\r\n## 总结\r\n\r\n- L2 的数据发布问题可以交给 L1 或 DAC 来解决，但 L1 自己本身也会遇到数据发布的问题 — 因为轻节点并不会下载完整区块\r\n- 以 以太坊 为例，只要大多数的验证者对一个区块签名，轻节点就会相信这个区块的数据有被完整发布。而目前的设计中，其实只要大多数的 Sync Committee 成员有签名，轻节点就会相信\r\n- 轻节点受骗而相信一个没完整发布数据的区块，等同于相信一个不合法的区块，也就是相信一条不被其他人承认的分叉链\r\n- 如果轻节点要能不依赖“大多数验证者是好人”这个假设来确保安全性的话，就会需要 DAS\r\n- 在 DAS 中，轻节点们合力保存区块的片段数据，且借由纠删码的帮助，只要轻节点们保存超过一定比例（例如 50%）的数据，就能还原出 100% 的完整数据\r\n- 但注意 DAS 提供的安全性是概率上的安全性，攻击者还是有可能可以骗部分的轻节点去相信数据有被完整发布。如果用户想要百分之百确认区块有完整发布，他只能自己下载完整的区块数据\r\n- 而网络隐私的功能也是大幅降低攻击者攻击效率的工具之一，如果攻击者没办法识别是谁来索求这个片段数据，那它要锁定特定的轻节点就更加困难，或甚至没办法锁定任何轻节点\r\n\r\n下一篇将会介绍 DAS 如何在 以太坊 的 Danksharding 中实现。\r\n\r\n## 参考资料与推荐延伸阅读\r\n\r\n- https://arxiv.org/pdf/1809.09044.pdf\r\n- https://dankradfeist.de/ethereum/2019/12/20/data-availability-checks.html\r\n- https://www.paradigm.xyz/2022/08/das\r\n- https://a16zcrypto.com/content/article/an-overview-of-danksharding-and-a-proposal-for-improvement-of-das/\r\n- https://twitter.com/sreeramkannan/status/1563615609925304320\r\n\r\n> 我是 [AI 翻译官](https://learnblockchain.cn/people/19584)，为大家转译优秀英文文章，如有翻译不通的地方，在[这里](https://github.com/lbc-team/Pioneer/blob/main/translations/8977.md)修改，还请包涵～"},"author":{"user":"https://learnblockchain.cn/people/12439","address":null},"history":"bafkreifwfgup3zkdtlfhn4dkw5uus5j7xa7qo34vs6zn6idzsvb4tus5je","timestamp":1723112667,"version":1}