1 简介

Swarm的使命,是经过为去中心化的互联网供给可扩展的底层根底设施,去刻画自我主权的全球化社会和无需答应的开放市场。Swarm的愿景,是经过点对点的存储和通讯体系来延展区块链,然后让“国际核算机”成为现实,这台“国际核算机”将能够作为去中心化应用程序的操作体系和部署环境。

Swarm能够供给不间断的服务,更有用地抵御网络中断或有针对性的DoS进犯。Swarm作为一个无需答应的发布平台,有用促进了信息自由。Swarm以其独特的隐私特性,如匿名阅读可拒存储(deniable storage)不行追踪的音讯传递不泄漏元数据的文件格式等,呼应了日益增长的网络安全需求。

Swarm内置的鼓励办法旨在优化带宽和存储资源的分配,使其在经济上能够自我维持。Swarm节点在与每个节点的衔接中追踪它们的相应带宽奉献,而且经过BZZ来处理因为不平等消耗而发生的额定债款。Swarm中的发布者有必要花费BZZ去购买向Swarm写入数据的权利,并对一些长时刻的存储预付租金。

Swarm的模块化设计由清晰可分的层(layer)组成(见图1)。从技术上讲,层2“不行变存储的掩盖网络”层3“经过API的高等级数据存取”构成了Swarm的中心。

Swarm最新官方白皮书

图1

2 DISC: 块的分布式不行变存储

DISC(Distributed Immutable Storage of Chunks)是Swarm的底层存储模型。它由存储和供给数据的节点组成,在这些节点之间的协作中,假定每个节点追求使其运营者赢利最大化的战略,那么网络作为一个整体,其行为将显现出以下特性:

  • 隐私维护和无需答应的上传和下载

  • 强大的防御办法,内容一经发布便很难再对其进行屏蔽或更改拜访权限

  • 跟着需求的增加可自动扩展

  • 得到完整性维护的内容

  • 无需再保存的内容终究会被忘记

任何具有剩余存储空间及带宽的人,都能够以节点运营者的身份参加DISC,并由此取得奖赏。当运营者安装并运行Swarm客户端软件时,会创建一个新节点并成为Swarm网络的一部分,根本上相当于担任看管Swarm这一全球硬盘的一小部分。

接下来,咱们将进一步界说DISC,并解说它为何会发生上述特性。

2.1 衔接、拓扑和路由

DISC的最初职责是建立和维护一个节点网络,使得一切节点都能够在彼此之间发送音讯。这种音讯交流是经过运用p2p网络协议(libp2p)的节点之间存在的持久而安全的通讯信道进行的。Swarm希望节点建立Kademlia衔接:衔接到其他特定的节点集时,节点对发送地址作出的本地决定,终究会让音讯的传导找到大局最优路由。

Kademlia假定每个节点都分配了一个与其网络地址不同的Swarm地址。经过核算前缀位(prefix bits)的数值中两个Swarm地址的一起值,咱们能够界说它们的挨近度。彼此最挨近的节点们将构成一个彻底连通的邻域(neighbourhood)。此外,每个节点衔接到来自每个离散邻近类(discrete proximity class)的多个对等节点(见图2)。

Swarm最新官方白皮书

图2

(注1:Libp2p 是一个便于运用者开发去中心化点对点应用的网络结构。)

(注2:Kademlia 是由 Petar Maymounkov 与 David Mazières 所设计的P2P 堆叠网络传输协议,以构建分布式的P2P电脑网络。是一种基于异或运算的P2P信息体系。它制定了网络的结构及规范了节点间通讯和交流资讯的方法。)

由此发生的拓扑结构保证了中继(relaying)在每次信息跃迁中至少将音讯向其预期目的地移近一步(见图3)。这种技术使音讯能够在恣意两个节点之间路由,即便这两个节点之间不坚持直接衔接。传递音讯所需的跃迁数上限是节点总数的对数,这样即便在一个极其巨大的网络中,也能保证恣意两个节点一直能够相互联络。

Swarm最新官方白皮书

图3

2.2 块和存储 

Swarm中的规范存储单元称为块(chunk)。块最多由4千字节的数据组成,而且附有一个地址。因为块的地址与节点的地址来自同一地址空间,因而能够核算它们的挨近度。Swarm的存储计划声明每个块都由节点存储,其地址挨近块自身的地址。

为了便利数据的保密性,块能够在填充到4千字节后进行加密,使得没有密钥的人无法将其与其它随机数据进行区别。即便对于未加密的块,节点运营者也无法轻易确认每个块来自于哪些内容。因为Swarm节点无法自己挑选存储、加密哪些数据块,这种来源的含糊性以及元数据的无法泄露都为它们供给了有用的维护,使它们免于承担与其所存储内容相关的责任。

为了将块刺进到Swarm中,节点经过同步推送协议(push-sync protocol)将区块进行转送,直到抵达它所属的邻域。然后,块的存储确认函将沿着相同的途径被传回。想要检索一个块,只需运用检索协议,将具有块地址的恳求路由到相关邻域。假如途中的任何节点在其本地存有相应的块,则会将其以呼应的方法发回。

Swarm最新官方白皮书

图4

节点们运用同步回送协议(pull-sync protocol)继续同步其块存储。这保证了每个邻域都冗地步存储归于其邻域的全部块。这种冗余增加了数据传输的弹性,在某邻域中的一些节点无法拜访的情况下也能维持块的可用性。同步协议还保证邻域的存储内容在节点离线和新节点加入网络时能够坚持一起。

2.3 转发、隐私和缓存

在Swarm中,音讯的路由经过将其递归地转发到更挨近其目的地的方位,然后沿着相同的路由传回一个呼应来完成。此路由算法具有两个重要特点:

  • 提出恳求的人是含糊的。

  • 跟着需求的增加自动扩展。

建议恳求的节点发送的音讯,与仅转发恳求的节点发送的音讯,从任何层面来看都相同。这种含糊性使得恳求的建议人能够保证他们的隐私不受侵犯,然后促进无需答应的内容发布和私密阅读。

因为参加路由检索恳求的节点或许会挑选存储由它们所转发出去的块,因而便要启用可自动扩展式分发体系。下面讨论的带宽鼓励机制为这种投机缓存(opportunistic caching)供给了经济动力。

2.4 Swarm记帐协议

Swarm记账协议(Swarm Accounting Protocol,SWAP)保证节点运营者在对音讯进行路由时会去协作,一起维护网络免于胡乱运用带宽。

当节点转发恳求和呼应时,它们会盯梢它们与每个节点之间的相对带宽消耗。在一定极限内,节点间以服务换服务。但是,一旦到达极限外,负债方既能够挑选等待,直到其债款跟着时刻的推移被摊销,或者也能够经过发送支票来进行付出,这些支票可在区块链上兑现为BZZ(见图5)。

Swarm最新官方白皮书

图5

这个协议能够保证那些下载或上传少数内容的人免费运用Swarm,还有那些乐意等待的人,在与各节点进行互惠服务直到取得足够的信用(credit)后,也能够免费运用Swarm。与此一起,当上传或下载更大的内容量时,为那些希望付费的人供给了一种更迅捷的体会。

在协助每个节点转发音讯时,节点存在经济动机,因为每个成功地将恳求路由到更靠近目的地的节点,在该恳求成功被送达时都能够取得BZZ。假如该节点自身没有存储数据,那么它只需付出少数的费用就能够从更近的节点恳求数据块。经过这样的买卖,节点在处理恳求时能够取得一点赢利。这意味着节点存在对块进行缓存的动机,因为在从较近的节点购入一次块之后,对同一块的任何后续恳求都将取得纯赢利。

2.5 容量缺乏和废物搜集

跟着Swarm中新内容的增加,每个节点的有限存储容量迟早会被耗尽。此时,节点需要一个战略来决定应该删去哪些块,以便为新的块让路。

每个Swarm节点的本地存储内置两个子体系,即“储藏(reserve)”和“缓存(cache)”。

“储藏”是一个固定巨细的存储空间,专门用于存储归于节点邻域的块。一个块是否保存在“储藏”内,取决于它所附的“邮戳(postage stamp)”。区块链上的合约答应经过BZZ购买“邮批(postage batch)”。“批(batch)”的一切者有权发行数量有限的邮戳。然后,这些邮戳充当某种信任标志,向用户指明在Swarm中保存某相关内容的详细价值。经过运用这个值的巨细来确认哪些在“储藏”中的块要被优先删去,这样一来存储者的节点便能最大极限地进步DISC的功效(见图6)。每个邮戳的价值会跟着时刻的推移而减少,就好像储存租金是定期从“批”的余额中扣除的相同;一旦邮戳的价值缺乏,相关的块就会被逐出“储藏”并置入“缓存”。

“缓存”的作用是保存因为“批”值缺乏或距离节点地址太远而不受“储藏”维护的块。当容量到达极限,缓存就会被定期修剪,最长时刻未被恳求的块将被删去。块的受欢迎程度能够经过最后一次收到恳求的时刻来预测,更多SWAP收入的块将优先得到保存。与投机缓存相结合,这种废物搜集(garbage collecting)战略使运营者从带宽鼓励中取得的赢利最大化,而在网络层面上,完成了受欢迎内容的自动扩展。

Swarm最新官方白皮书

图6

2.6 块类型

在上面咱们将块界说为DISC中数据的规范单位。Swarm中存在两种根本的块类型:内容寻址块(content-addressed chunks)单一一切者块(single-owner chunks)

内容寻址块的地址基于其数据的哈希摘要(hash digest)(见图7)。运用哈希作为块的地址能够验证块数据的完整性。Swarm在块数据的小部分上运用基于默克尔树(Merkle tree)BMT(Binary Merkle Tree)哈希算法。

Swarm最新官方白皮书

图7

单一一切者块的地址经过一切者地址和一个identifier进行哈希核算而得。单一一切者块数据的完整性由一切者的加密签名来保证,该签名证明恣意块的数据与identifier之间的关联(见图8)。换句话说,每个identity都具有Swarm地址空间的一部分,他们能够在其中自由地将内容分配给一个地址。

Swarm最新官方白皮书

图8

3 Swarm API的功用

除了块,Swarm还揭露了用于应对完成更高等级概念的API,例如文件、具有各种元数据的文件的分层调集,乃至是inter-node音讯传递等。这些API试图镜像那些已经在web上运用的API。更新颖的设想和数据结构能够制作在这些更高的层级之上,然后为希望从DISC供给的隐私和去中心化的中心产品中获益的一切人带来丰厚多样的可能性。

3.1 文件和调集

大于单个块中答应的4千字节的数据会被拆分为多个块。一组同属的块由一个Swarm哈希树(hash-tree)表明,该哈希树对文件在上传过程中切割成块的方法进行编码。这棵树由一组叶节点块(leaf node chunks)组成,包括数据自身,由一层或几层中心块引证,每个中心块包括对其子块的引证(见图9)。

然后,整个文件的内容地址由根块的哈希摘要确认,即横跨整个文件的哈希树的默克尔根(Merkle root)。这样,文件的地址就变成了它的校验和(checksum),然后能够验证内容的完整性。将文件表明为块的平衡默克尔树,还供给了对文件的高效随机拜访,成果上能够高效地进行范围查询。

Swarm运用“清单(manifests)”来表明调集。清单编码一个通用的字符串引证映射,答应它对目录树(directory tree)键值存储(key-value store)路由表(routing table)进行模型构建。这些分别使Swarm能够完成文件体系,充当数据库,乃至为网站和dapp供给虚拟主机。

假如咱们将URL的host部分解说为对清单的引证,那么清单供给基于URL的寻址,URL途径用作在由清单表明的映射中进行查找的键(key),只被用于抵达文件引证。

Swarm最新官方白皮书

图9

清单以紧凑默克尔前缀树(compacted Merkle trie)的方法对它们所表明的映射进行编码,块将前缀树的节点序列化(见图10)。当查找途径时,咱们只需要沿着咱们遍历的分支的节点相应的块进行检索。这样便能够保证高效查找文件/记载,其推迟和带宽为调集巨细的对数。

Swarm最新官方白皮书

图10

文件中哈希树中心块中的子节点引证,和调集中清单前缀树节点,在方位上与BMT哈希段是对齐的。成果上,Swarm支撑紧凑证明特定数据段是在坐落给定URL的给定偏移量(offset)处的文件的一部分,这是可揭露证明的数据库索引和去信任化聚合的根底。

3.2 盯梢更新:feeds和域解析

feed是一种答应可变资源显示(impression of a mutable resource)的单一一切者块示例。feed能够表明可变资源的版本化修订、对主题的次序更新或一方在通讯信道中发布的连续音讯。

feed的工作方法是将单一一切者块的identifier界说为从主题和索引派生而来。当发布者和内容运用者就索引的更新方法和更新时刻达到共一起,就能够构造和查找对该feed更新的特定引证。

类似于DNS将域解析为主机服务器的IP地址,Swarm经过运用以太坊域名解析服务ENS(Ehereum-Name Service)——区块链上的一组智能合约,将其解析为引证以支撑人类可读的域名(例如Swarm.eth)。

每当web应用程序或其所代表的网站因为更新而取得新的Swarm引证时,就能够对在ENS中注册的引证进行更新。或者,当域名引证feed时,用户能够受益于人类可读的域名,一起也能够更新其内容,而无需在每次进行更改时与区块链交互并付出相关买卖成本。

3.3 音讯传递

PSS(Postal Service on Swarm)是Swarm中的一种直接节点间音讯传递协议。它是经过加密方针收件人的音讯,并在内容寻址块顶用主题将其包装来完成的。因为块的创建方法令其内容地址落在接纳者的邻域中,所以传递天然由同步推送协议来处理。

此外,对于任何第三方来说,音讯都无法与随机加密的块进行区别,因而它也被称为“特洛伊木马(Trojan)”块。一个希望接纳PSS音讯的节点将尝试解密和打开抵达其邻域的一切块。在成功地将特洛伊木马块解密和解包为合法收件人之后,客户端节点能够将音讯明文发送给运用PSS API订阅该主题的应用程序。

PSS还供给异步传递,因为块会继续存在并终究同步到一切邻域节点,即便这些节点在之后才上线。

因为PSS答应用户从迄今为止不知道的个别处接纳音讯,因而它是一种抱负的通讯原语(communication primitive),用于向公共个别(例如注册)发送匿名音讯,或经过feeds来设置安全通讯信道来向联络人建议信息流。因为PSS不需要收件人履行任何操作(例如轮询polling),因而它能够作为推送告诉的引荐原语。

3.4 钉住和康复

DISC终究会忘记很少被拜访和未被付费的内容。经过对块进行“钉住(pinning)”这一操作,节点能够保证它们在本地保存特定内容。一起,这种“在本地保存被钉住的内容的人(pinner)”能够参加内容的被动或自动康复,以谋福一切用户。

被动康复触及一个康复协议,当检索失败时,经过运用PSS发送康复恳求,以告诉pinner丢掉的块。Pinners会听取康复恳求,并经过重新上传丢掉的块进行呼应,下载者便能够在重试时找到这些丢掉的块。此应对康复功用还答应直接从发布者节点对原始内容做种,类似于某些现有文件共享处理方(BitTorrent、IPFS)中的首要操作形式。

相反,Swarm也供给了自动康复或数据维护(data stewardship),因而当Pinner自动检查网络中内容的可用性并发现某些块丢掉时,就能够自动重新部署这些丢掉的块。

4 结论

Swarm作为一个点对点网络,其一切节点一起供给去中心化的存储和通讯服务。无需答应且隐私的Swarm满足了言论自由、数据主权和网络开放市场的需求,一起经过完整性维护、抗检查和防进犯来保证其安全。本文介绍了Bee1.0的初始主网上线中所包括的功用。

这是个里程碑,而旅程才刚刚开始:加入Swarm,一起完成赋予数字自由的使命。

本文为Swarm官方最新发布的白皮书全文,由蓝贝壳云储整理翻译,内容仅供参考,终究请以官方白皮书中内容为准。

视野开拓

······那些人口密集地区只能靠小块土地维持生存的农民家庭,为了增加一点点产量,(如果没有其他办法的话)其劳动强度和时间都令人难以想象——好像是在精明的资本家的压迫下干活。查耶诺夫把这种情况叫做“自我剥削”。-《农民的道义经济学》

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注