Ethereum Swarm - wbwangk/wbwangk.github.io GitHub Wiki

以太坊博客原文

Swarm阿尔法版公开试用和Swarm基础知识

维克托·特隆 发布于2016年12月15日。

随着期待已久的geth 1.5发布,Swarm作为一个实验性功能发布到官方发行版。当前的代码版本是0.2 POC RC5 - “embrace your daemons”(路线图),这是重构和清洁版本,在过去的数月一直运行在Swarm toynet。

当前版本附带的swarm命令将启动一个独立的Swarm守护进程作为独立的进程,如果需要的话,使用您喜欢的IPC兼容以太坊客户端。通过激励节点贡献带宽和中继数据,带宽记账(使用Swarm Accounting Protocol = SWAP)促进了平稳运维和快速分发内容。SWAP系统功能已经实现,但默认关闭。计划在POC 0.4中采用存储激励(惩罚性保险)来保护很少访问内容的可用性。所以目前默认情况下,客户端仅使用区块链进行域名解析(译者:指将来还会用区块链做激励)。

通过这篇博客文章,很高兴地宣布,我们新的Swarm测试网(连接到Ropsten以太坊测试链)闪亮发布。以太坊基金会贡献了一个运行在Azure云上35-strong(将达到105)的Swarm群集。它正在托管Swarm主页

我们认为这个测试网络是第一个公共试点,我们欢迎社区加入网络,贡献资源,帮助我们找到问题,确定问题点并提供可用性方面的反馈。可以在Swarm指南中找到说明。我们鼓励那些负担得起运行永久节点(保持联机的节点)的人保持联系。我们已经收到了100TB部署的承诺。

请注意,测试网不提供任何保证!数据可能会丢失或无法使用。事实上,至少在存储保险激励层实施(计划POC 0.4)之前,无法保证持久性。

我们设想越来越多的社区参与来塑造这个项目,所以我们邀请那些有兴趣加入我们gitter上的公开讨论室。关于Swarm背后的特定技术和意识形态,和Web3的一般性,我们希望通过一系列的博客文章奠定对话基础。本系列的第一篇文章将介绍Swarm当前功能的组成和操作。

到底什么是Swarm?

Swarm是一个分布式存储平台和内容分发服务; 一个以太坊Web3堆栈的原生基础层服务。其目标是一个点对点存储和服务解决方案,它具有零宕机时间,具有DDOS抵抗能力、容错和审查能力以及内置激励系统的自我维持能力。激励层使用带宽的p2p记账、基于押金的存储激励并允许为了赚钱进行资源交易。在设计上,Swarm深度集成于以太坊的devp2p多协议网络层,以及以太坊的域名解析、服务支付和内容可用性保险。当前测试网络上的节点仅使用Ropsten测试链进行域名解析,并关闭激励。

Swarm与其他去中心分布式存储解决方案相比有两个主要特点。尽管现有服务(Bittorrent、Zeronet、IPFS)允许您注册和共享服务器上托管的内容,但Swarm提供将自身托管为去中心云存储服务。有一种真正的,你可以'上传和消失'的感觉:你上传你的内容到swarm并在以后检索,尽管你可能没有硬盘。Swarm立志成为通用存储和分发服务,在准备就绪时,可满足从低延迟实时交互式Web应用程序,到很少使用内容的保证持久存储的各种使用案例。

另一个主要特点是激励机制。计算和状态的分散共识的美妙之处在于它允许社区、网络和分散服务的可编程规则集通过实施透明的自我执行激励来解决其协调问题。这样的激励体系将个体参与者建模为理性利己的代理人,然而,网络的紧急行为对参与者来说更为有利(相对于没有协调)。

在Vitalik的白皮书发布之后不久,Ethereum开发核心实现了一个通用区块链,与现有的点对点技术一样,是能够运行完全去中心化互联网所需拼图的关键缺失部分。Gavin和Vitalik在构想以太坊生态系统(web3.0的加密2.0愿景)时,于2014年5月提出了独立协议(对于Whisper是ssh、对于Swarm是bzz、对于区块链是eth)的想法。Swarm项目是一个系统的主要例子,其中激励可以让参与者高效地共享存储和带宽资源,为全体参与者提供全球内容服务。我们可以说,激励机制的智能合约实现了swarm的蜂群思维

我们对这些问题研究的全面综合,导致了前两篇橙皮书的发表。激励措施也在devcon2关于Swarm激励系统的讨论中解释。更多细节将在未来发布。

Swarm如何工作?

Swarm是一个网络、一个服务和一个协议(规则)。Swarm网络是一个运行在线协议(称为bzz)的节点网络,使用ethereum devp2p/rlpx网络堆栈作为底层传输。Swarm协议(bzz)定义了一种交互模式。Swarm的核心是实现一个分布式的内容寻址块存储。块(chunk)是具有固定最大大小(当前为4KB)的任意数据块。内容寻址意味着任何块的地址都是从其内容确定性派生的。寻址方案落在一个哈希函数上,该函数将一个块作为输入并返回一个32字节长的密钥作为输出。哈希函数是不可逆的,无碰撞且均匀分布的(事实上,这正是比特币和一般工作量证明工作的原理)。

块的哈希是客户端可以用来检索块(哈希的原始图像)的地址。不可逆转和无碰撞寻址直接提供了完整性保护:无论客户端如何知道地址的情况下,它都可以判断该块是否已被破坏或被篡改。

Swarm作为分布式存储库的主要用处是可以向其上传内容。 组成Swarm的全部节点为了存储和读取块提供资源(磁盘空间、内存、带宽和CPU)。但是什么决定了谁存储一个块? Swarm节点有一个地址(它们的bzz账户的地址的哈希),该地址与块本身在相同的密钥空间中。让我们把这个地址空间称为覆盖网络。如果我们将一个块上传到Swarm,协议将确定它最终将存储在最靠近块地址的节点上(根据覆盖地址空间上明确定义的距离度量)。多个块到达其地址的过程称为同步,并且是协议的一部分。稍后想要检索内容的节点可以通过将查询转发到接近内容地址的节点来再次找到它。事实上,当一个节点需要一个块时,它只是向该Swarm发送一个请求,并将该请求发送给该内容的地址,Swarm将转发请求直到找到数据(或请求超时)。在这方面,Swarm类似于传统的分布式哈希表(DHT),但具有两个重要的(和研究中的)特征。

Swarm使用一组TCP/IP连接,通过它们每个节点都有一组(半)永久对等节点。节点之间的所有在线协议消息都通过活动连接在节点之间中继跳转。Swarm节点积极管理其节点连接以维护一组特定的连接,从而实现基于密钥路由的同步和内容检索。因此,总是可以将要存储的块或内容检索请求消息沿着这些节点连接有效路由到离内容地址最近的节点。这种风格的路由方案被称为转发Kademlia

结合SWAP激励系统,节点的理性利己决定了机会主义缓存行为:节点将本地所有中继块高速缓存,以便下次请求时可以为其服务。作为这种行为的结果,流行的内容最终在网络上被更加冗余地复制,从本质上减少了检索的延迟 - 我们说Swarm是一个“自动扩展”的分发网络。此外,这种缓存行为使原始管理员(译者:应该是指上传内容的人)不用为潜在的DDOS攻击负责。SWAP鼓励节点缓存他们遇到的所有内容,直到他们的存储空间被填满。事实上,即使您需要清除较旧的块,缓存传入的平均期望效用块也总是一个好策略。 对块需求的最佳预测因素是过去的请求率。因此,(从缓存中)删除很久以前请求的块是合理的。因此,不再流行的、内容过时或从未流行的内容将被垃圾回收并移除,除非受到保险保护。结果是节点最终将充分利用其专用资源来为用户带来好处。这种天然自动伸缩使Swarm成为一种最大利用率的弹性云。

文档和Swarm哈希

现在我们已经解释了Swarm如何用作分布式块存储(固定大小的原始图像存档),您可能会想,块是从哪里来的,我为什么要关心它?

在API层上Swarm提供了一个chunker。该chunker对接任何可读的来源,如文件或摄像机捕获设备,并将其切成固定大小的块。这些所谓的数据块或叶块被哈希,并同步到节点。然后数据块的哈希也被打包成块(称为中间块)并重复该过程。目前128个哈希组成了一个新块。结果是,数据由merkle树表示,树的根哈希充当用于检索上载文件的地址。

当你检索这个'文件'时,你会查找根哈希并下载它的原始图像。如果preimage(原始图像)是一个中间块,它将被解释为一系列哈希来寻址较低层上的块。最终该过程达到数据级别并且可以提供内容。merkle 化块树的一个重要特性是它提供了完整性保护(即你寻找什么就得到什么),即使在部分读取时也是如此。例如,这意味着您可以在大型电影文件中来回跳转,但仍然可以确定数据未被篡改。使用较小单元(4kb块大小)的优势包括内容获取的并行化和在网络故障情况下浪费较少的流量。

清单(Manifest)和网址

在块merkle树之上,Swarm提供了组织内容的关键第三层:清单文件。一个清单是清单条目的json数组。一个最简化条目指定了路径、内容类型和指向实际内容的哈希。清单允许您创建一个托管在Swarm上的虚拟站点,通过假定URL的主机部分指向清单,它提供了基于网址(url)的寻址,并且路径与清单条目的路径相匹配。清单条目可以指向其他清单,所以它们可以被递归嵌入,这使得清单可以被编码为一个紧凑的结构,从而有效地扩展到庞大的数据集(如维基百科或YouTube)。清单也可以被认为是将url字符串映射到内容的站点地图或路由表。由于我们的每一步都有merkle化结构或内容地址,清单为整个网站提供了完整性保护。

清单可以通过使用bzzr url方案读取并直接遍历。此用法由Swarm Explorer示范,一个Swarm dapp示例显示清单条目,就好像它们是组织在目录中的磁盘文件一样。清单很容易被解释为目录树,因此目录和虚拟主机可以被视为相同。基于这个特性可以实现一个简单的去中心Dropbox。Swarm Explorer 在swarm上:通过在网址中放置清单的地址哈希,您可以使用它浏览任何虚拟站点:此链接将显示浏览器自己的源代码

基于哈希的寻址是不可变的,这意味着您无法覆盖或更改固定地址下的文档内容。然而,由于块被同步到其他节点,Swarm在更强的意义上是不变的,即如果某些内容被上传到Swarm中,它不能被无视、不被发布、撤销或删除。仅因为这个原因,也要特别小心你分享的内容。但是,您可以通过创建包含新条目或删除旧条目的新清单来更改网站。这个操作很便宜,因为它不需要移动任何引用的实际内容。该相册是另一个Swarm dapp演示如何做到这一点。 github上的源代码。如果您希望显示连续的更新或需要一个锚点来显示最新版本的内容,则需要使用基于名称的可变地址。这就是区块链,以太坊名称服务(ENS)和域名进入的地方。跟踪更新的更彻底的方式是使用版本控制,如 git或mango一个使用Swarm(或IPFS)作为其后端的git

以太坊名称服务(ENS)

为了授权更改或发布更新,我们需要域名。对于正规的域名服务,您需要区块链和一些管理。Swarm使用以太坊名称服务(ENS)域名解析为Swarm哈希。提供了工具与ENS交互以获取和管理域名。ENS是至关重要的,因为它是区块链和Swarm之间的桥梁。

如果您使用Swarm代理进行浏览,则客户端会假定域名(从bzz:/ 之后到第一个斜杠之前的部分)通过ENS解析为内容哈希。得益于代理和标准的URL方案处理程序接口,与Mist的集成在Metropolis版的Mist中首次发布。

我们的路线图是雄心勃勃的:Swarm 0.3带来了对网络层和同步协议的大量重写,混淆和双重屏蔽以实现合理的可否认性(译者:指匿名性),kademlia路由p2p消息传递,改进的带宽记账和带有http头支持和元数据的扩展清单。Swarm 0.4计划通过擦除编码、扫描和修复以及保管证明、加密支持、多播流的自适应传输通道以及期待已久的存储保险和诉讼来提供客户端冗余。

在未来的文章中,我们将讨论混淆和可信的可否认性,监管和存储保险证明,节点间消息传递和网络测试和仿真框架等等。观看这个空间,bzz ...