二 Swarm 白皮书出炉:详解 Swarm 存储机制与 API 功能 trojan节点怎么添加

Swarm 记帐协议Swarm 记账协议(Swarm Accounting Protocol,SWAP)确保节点运营者在对消息进行路由时会去协作,同时保护网络免于胡乱使用带宽 。
当节点转发请求和响应时,它们会跟踪它们与每个节点之间的相对带宽消耗 。在一定限度内,节点间以服务换服务 。然而,一旦达到限度外 , 负债方既可以选择等待,直到其债务随着时间的推移被摊销 , 或者也可以通过发送支票来进行支付 , 这些支票可在区块链上兑现为 BZZ。

二 Swarm 白皮书出炉:详解 Swarm 存储机制与 API 功能 trojan节点怎么添加

文章插图
这个协议能够确保那些下载或上传少量内容的人免费使用 Swarm,还有那些愿意等待的人,在与各节点进行互惠服务直到获得足够的信用(credit)后,也可以免费使用 Swarm 。与此同时,当上传或下载更大的内容量时,为那些希望付费的人提供了一种更迅捷的体验 。
在帮助每个节点转发消息时,节点存在经济动机,因为每个成功地将请求路由到更靠近目的地的节点 , 在该请求成功被送达时都可以获得 BZZ 。如果该节点本身没有存储数据 , 那么它只需支付少量的费用就可以从更近的节点请求数据块 。通过这样的交易,节点在处理请求时可以获得一点利润 。这意味着节点存在对块进行缓存的动机,因为在从较近的节点购入一次块之后 , 对同一块的任何后续请求都将获得纯利润 。
容量不足和垃圾收集随着 Swarm 中新内容的添加,每个节点的有限存储容量迟早会被耗尽 。此时 , 节点需要一个策略来决定应该删除哪些块 , 以便为新的块让路 。
每个 Swarm 节点的本地存储内置两个子系统,即「储备(reserve)」和「缓存(cache)」 。
「储备」是一个固定大小的存储空间,专门用于存储属于节点邻域的块 。一个块是否保留在「储备」内,取决于它所附的「邮戳(postage stamp)」 。区块链上的合约允许通过 BZZ 购买「邮批(postage batch)」 。「批(batch)」的所有者有权发行数量有限的邮戳 。然后 , 这些邮戳充当某种信托标志,向用户指明在 Swarm 中保存某相关内容的具体价值 。通过使用这个值的大小来确定哪些在「储备」中的块要被优先删除,这样一来存储者的节点便能最大限度地提高 DISC 的效用 。每个邮戳的价值会随着时间的推移而减少,就好像储存租金是定期从「批」的余额中扣除的一样;一旦邮戳的价值不足,相关的块就会被逐出「储备」并置入「缓存」 。
「缓存」的作用是保留由于「批」值不足或距离节点地址太远而不受「储备」保护的块 。当容量达到限度,缓存就会被定期修剪,最长时间未被请求的块将被删除 。块的受欢迎程度可以通过最后一次收到请求的时间来预测,更多 SWAP 收入的块将优先得到保留 。与投机缓存相结合,这种垃圾收集(garbage collecting)策略使运营者从带宽激励中获得的利润最大化,而在网络层面上,实现了受欢迎内容的自动扩展 。
二 Swarm 白皮书出炉:详解 Swarm 存储机制与 API 功能 trojan节点怎么添加

文章插图
块类型【二 Swarm 白皮书出炉:详解 Swarm 存储机制与 API 功能 trojan节点怎么添加】在上面我们将块定义为 DISC 中数据的标准单位 。Swarm 中存在两种基本的块类型:内容寻址块(content-addressed chunks)和单一所有者块(single-owner chunks) 。
内容寻址块的地址基于其数据的哈希摘要(hash digest) 。使用哈希作为块的地址可以验证块数据的完整性 。Swarm 在块数据的小部分上使用基于默克尔树(Merkle tree)的 BMT (Binary Merkle Tree)哈希算法 。
二 Swarm 白皮书出炉:详解 Swarm 存储机制与 API 功能 trojan节点怎么添加

文章插图
单一所有者块的地址通过所有者地址和一个 identifier 进行哈希计算而得 。单一所有者块数据的完整性由所有者的加密签名来保证,该签名证明任意块的数据与 identifier 之间的关联 。换句话说,每个 identity 都拥有 Swarm 地址空间的一部分,他们可以在其中自由地将内容分配给一个地址 。
二 Swarm 白皮书出炉:详解 Swarm 存储机制与 API 功能 trojan节点怎么添加

文章插图
Swarm API 的功能除了块,Swarm 还公开了用于应对实现更高等级概念的 API,例如文件、具有各种元数据的文件的分层集合,甚至是 inter-node 消息传递等 。这些 API 试图镜像那些已经在 web 上使用的 API 。更新颖的构想和数据结构可以绘制在这些更高的层级之上,从而为希望从 DISC 提供的隐私和去中心化的核心产品中获益的所有人带来丰富多样的可能性 。
文件和集合大于单个块中允许的 4 千字节的数据会被拆分为多个块 。一组同属的块由一个 Swarm 哈希树(hash-tree)表示,该哈希树对文件在上传过程中分割成块的方式进行编码 。这棵树由一组叶节点块(leaf node chunks)组成,包含数据本身,由一层或几层中间块引用,每个中间块包含对其子块的引用 。
然后,整个文件的内容地址由根块的哈希摘要确定,即横跨整个文件的哈希树的默克尔根(Merkle root) 。这样,文件的地址就变成了它的校验和(checksum),从而可以验证内容的完整性 。将文件表示为块的平衡默克尔树 , 还提供了对文件的高效随机访问,结果上可以高效地进行范围查询 。
Swarm 使用「清单(manifests)」来表示集合 。清单编码一个通用的字符串引用映射,允许它对目录树(directory tree)、键值存储(key-value store)或路由表(routing table)进行模型构建 。这些分别使 Swarm 能够实现文件系统,充当数据库 , 甚至为网站和 DApp 提供虚拟主机 。
如果我们将 URL 的 host 部分解释为对清单的引用,那么清单提供基于 URL 的寻址,URL 路径用作在由清单表示的映射中进行查找的键(key),只被用于抵达文件引用 。
二 Swarm 白皮书出炉:详解 Swarm 存储机制与 API 功能 trojan节点怎么添加

文章插图
清单以紧凑默克尔前缀树(compacted Merkle trie)的形式对它们所表示的映射进行编码,块将前缀树的节点序列化 。当查找路径时,我们只需要沿着我们遍历的分支的节点相应的块进行检索 。这样便可以确保高效查找文件 / 记录 , 其延迟和带宽为集合大小的对数 。
二 Swarm 白皮书出炉:详解 Swarm 存储机制与 API 功能 trojan节点怎么添加

文章插图
文件中哈希树中间块中的子节点引用,和集合中清单前缀树节点,在位置上与 BMT 哈希段是对齐的 。结果上,Swarm 支持紧凑证明特定数据段是在位于给定 URL 的给定偏移量(offset)处的文件的一部分,这是可公开证明的数据库索引和去信任化聚合的基础 。
跟踪更新:feeds 和域解析feed 是一种允许可变资源显示(impression of a mutable resource)的单一所有者块示例 。feed 能够表示可变资源的版本化修订、对主题的顺序更新或一方在通信信道中发布的连续消息 。
feed 的工作方式是将单一所有者块的 identifier 定义为从主题和索引派生而来 。当发布者和内容使用者就索引的更新方式和更新时间达成一致时,就可以构造和查找对该 feed 更新的特定引用 。
类似于 DNS 将域解析为主机服务器的 IP 地址,Swarm 通过使用以太坊域名解析服务 ENS (Ehereum-Name Service)——区块链上的一组智能合约 , 将其解析为引用以支持人类可读的域名(例如 Swarm.eth) 。
每当 web 应用程序或其所代表的网站由于更新而获得新的 Swarm 引用时,就可以对在 ENS 中注册的引用进行更新 。或者,当域名引用 feed 时,用户可以受益于人类可读的域名,同时也可以更新其内容,而无需在每次进行更改时与区块链交互并支付相关交易成本 。
消息传递PSS (Postal Service on Swarm)是 Swarm 中的一种直接节点间消息传递协议 。它是通过加密目标收件人的消息,并在内容寻址块中用主题将其包装来实现的 。由于块的创建方式令其内容地址落在接收者的邻域中,所以传递自然由同步推送协议来处理 。
此外,对于任何第三方来说,消息都无法与随机加密的块进行区分,因此它也被称为「特洛伊木马(Trojan)」块。一个期望接收 PSS 消息的节点将尝试解密和打开到达其邻域的所有块 。在成功地将特洛伊木马块解密和解包为合法收件人之后 , 客户端节点可以将消息明文发送给使用 PSS API 订阅该主题的应用程序 。
PSS 还提供异步传递 , 因为块会持续存在并最终同步到所有邻域节点,即使这些节点在之后才上线 。
由于 PSS 允许用户从迄今为止未知的个体处接收消息,因此它是一种理想的通信原语(communication primitive),用于向公共个体(例如注册)发送匿名消息,或通过 feeds 来设置安全通信信道来向联系人发起信息流 。由于 PSS 不需要收件人执行任何操作(例如轮询 polling),因此它可以作为推送通知的推荐原语 。
钉住和恢复DISC 最终会忘记很少被访问和未被付费的内容 。通过对块进行「钉?。╬inning)」这一操作,节点可以确保它们在本地保留特定内容 。同时,这种「在本地保存被钉住的内容的人(pinner)」可以参与内容的被动或主动恢复 , 以造福所有用户 。
被动恢复涉及一个恢复协议,当检索失败时,通过使用 PSS 发送恢复请求,以通知 pinner 丢失的块 。Pinners 会听取恢复请求,并通过重新上传丢失的块进行响应,下载者便可以在重试时找到这些丢失的块 。此应对恢复功能还允许直接从发布者节点对原始内容做种,类似于某些现有文件共享解决方(BitTorrent、IPFS)中的主要操作模式 。
相反,Swarm 也提供了主动恢复或数据维护(data stewardship),因此当 Pinner 主动检查网络中内容的可用性并发现某些块丢失时,就可以主动重新部署这些丢失的块 。
结论Swarm 作为一个点对点网络,其所有节点共同提供去中心化的存储和通信服务 。无需许可且隐私的 Swarm 满足了言论自由、数据主权和网络开放市场的需求,同时通过完整性保护、抗审查和防攻击来确保其安全 。本文介绍了 Bee1.0 的初始主网上线中所包含的功能 。
这是个里程碑,而旅程才刚刚开始:加入 Swarm,一起完成赋予数字自由的使命 。

    推荐阅读