Hypercore协议:分布式(P2P)仅附加日志

2020-12-14 22:21:12

Hypercore带有安全的传输协议,可轻松构建快速且可扩展的对等应用程序。想想轻量级区块链与BitTorrent交叉。

Hypercore当前可作为各种P2P应用程序的基础,包括聊天应用程序,文件系统,数据库,甚至是分布式Internet的浏览器。而且整个都是MIT许可的,因此您可以随意使用它!

如果您有兴趣尝试一下,我们建议您转到Node.js实现的Github存储库。

要与我们联系,您可以加入我们的Discord,或与@ mafintosh,@ pfrazee和@andrewosh的任何核心团队成员联系。

如果您不熟悉仅追加日志,那么它们基本上只是您只能追加的列表。如果从常规数组操作的角度考虑它,则它是一个日志,您只能调用get(index),push(data)并检索日志长度,但永远不能覆盖旧条目。

Hypercore允许您以对等方式快速分发此类日志。每个对等方都可以选择仅下载他们感兴趣的日志部分,而不必从头开始下载所有内容。

使用仅附加日志,Hypercore可以轻松生成压缩的位域,以描述对等项具有日志的哪些部分。这尤其有助于使复制协议轻巧高效。

Hypercore通过使用BLAKE2b-256哈希函数构建Merkle树来验证日志内容。对等方也可以使用此Merkle树仅下载他们感兴趣的日志部分,并将这些部分重新分发给其他人。

默克尔树广泛用于许多分布式系统中。它们通常仅用于验证静态内容,因为当内容更改时,树的根也会更改。为了支持可变数据集,Hypercore使用非对称密码术在将数据附加到Merkle树的根后对其进行签名。

只有私钥的所有者可以追加到日志。但是一个Hypercore很少单独使用-可以通过组合多个内核来创建功能更强大的多用户数据结构。 Hypercore的主要目的是成为其他事物的基础。

Hypercore最好用作构建功能强大的对等应用程序和模块的构建块。多年来,它一直是Dat项目的基础。以下是一些使用和构建该技术的小组。

Hyperdrive旨在帮助您直接从计算机快速安全地共享文件。

Hyperdrive是使用Hypercores构建的。使用仅附加索引,您可以在几毫秒内从大型驱动器中仅找到您感兴趣的文件-所有P2P。

默认情况下,阅读器仅按需下载所需文件的一部分。您可以流式传输来自朋友的媒体,而不必跳圈!寻求是活泼的,并且没有缓冲。

如果您想了解有关代码的更多信息,可以在GitHub存储库中看到Node.js实现。

如果要下载或共享文件系统,建议您继续阅读并尝试使用守护程序。使用页面底部的链接,该网站甚至可以作为驱动器使用!

由于Hyperspace的设计轻巧,因此它不提供对Hyperdrive等高级数据结构的内置支持。我们没有想象将所有东西都整合到一个服务中,而是想象一个与Hyperspace一起运行的伴随服务生态系统。

例如,您可以与Hyperspace一起启动Hyperdrive服务,该服务为您提供用于使用Hyperdrives的FUSE和CLI界面。

如果您使用的是Mac或Linux,则该守护程序还提供FUSE支持,这意味着您的驱动器将在计算机上显示为普通文件夹。

Hyperdrive将文件名索引到Hypercore中。为了避免要查找特定文件或文件夹时必须扫描整个Hypercore,使用仅附加的哈希Trie(我们称为Hypertrie)对文件名进行索引。哈希树结构基本上用作具有可列出文件夹的快速仅附加键值存储。

如果您要在Hypercore上寻找简单的数据库抽象,则还可以在Hyperdrive之外使用Hypertrie独立版本。如果您想了解有关如何使用它的更多信息,建议您查看Hypertrie存储库

由于它建立在仅附加日志的顶部,因此它继承了默认情况下对每个更改进行版本控制的相同保证,从而可以轻松查看历史更改并防止意外数据丢失。

除了Hypertrie(我们称为元数据日志)之外,Hyperdrive还使用另一个Hypercore存储您插入的每个文件的二进制文件内容。如果您对此感兴趣,那么这种双日志设计可以轻松地复制或仅观看元数据日志,而不包含内容。

Hypertrie中的每个条目都链接到内容日志,以信号表示文件的二进制数据在何处开始和结束。此外,该条目包含您感兴趣的所有常规POSIX数据,例如修改时间,创建时间,文件模式等。

为了获得更好的可组合性和协作性,条目还可以链接到完全不同的Hyperdrive或Hypercore。我们称此功能为坐骑。即使它表面上很简单,也可以用来构建强大的协作功能。

在内部,我们一直在将Hyperdrive挂载用于我们称为“组软件”的概念,其中每个用户将自己的驱动器挂载在单个共享的驱动器中,然后应用程序在组驱动器上呈现多用户视图。组件模式可用于构建轻便的,类似于Dropbox的应用程序。

我们一直在探索增强Hyperdrive的新方法!如果您有兴趣与我们合作,请随时在Github上打开问题,联系@hypercoreproto或加入我们的Discord。

Hyperspace是最小的服务器,它使您可以使用RPC接口轻松地与Hypercore堆栈进行接口。

它使您可以使用Hyperdrives,Hypercore和许多其他Hyper抽象,而不必处理设置网络配置和管理存储方面的复杂性。

Hyperspace发布博客文章中有许多有关如何启动和运行它的详细信息,以及有关如何构建新事物的更多信息。您还可以在Hyperspace Github存储库中阅读有关它的更多信息。

Hyperswarm将用于全球发现的基于Kademlia的分布式哈希表(DHT)与MDNS相结合,以发现本地网络上的对等点。

Hyperswarm是Hypercore协议的一部分,但也可以独立使用。您可以在Hyperswarm Github组织和主要的Node.js实现存储库中了解更多信息。

与许多P2P项目一样,Hyperswarm使用DHT在Internet上发现对等对象。 Hypercore维护其公用密钥的哈希(称为“发现密钥”),该哈希用作与对等方共享其IP和端口以相互发现的主题。

Hypercore带有一个功能系统,其中每个对等方必须在开始共享数据之前先验证自己是否知道正确的公钥。即使您知道Hypercore的发现密钥,也必须知道公共密钥才能从对等方下载数据。

Hyperswarm中使用的DHT基于Kademlia,它是一种基于UDP的DHT,许多项目(包括BitTorrent)都在使用。您可以在Kademlia论文中了解有关Kademlia的更多信息。

DHT通常可以很好地扩展,但众所周知很难使用。 Hyperswarm使用一系列启发式方法来快速回答查询,并尽可能快地垃圾收集陈旧的数据。

作为一般说明,大多数DHT(包括Hyperswarm)通常公开路由信息,例如IP /端口,以帮助路由请求。隐私保护DHT是P2P生态系统中许多参与者的活跃研究领域。

理想的P2P网络应该能够将任意两个对等体连接在一起,无论它们位于何处。实际上,由于防火墙拒绝传入的连接和NAT会屏蔽您的IP,因此这是一个挑战。为了帮助“突破”防火墙,使用了一种称为UDP穿孔的技术。

传统上,UDP漏洞打孔需要使用网络中每个对等点都已知的集中式服务器。

Hyperswarm通过使其成为一流功能来扩展打孔:DHT中的任何对等点都可以帮助您对它知道的任何其他对等点进行打孔。

找到相关的对等方之后,Hyperswarm利用UTP传输协议在对等方之间建立可靠的连接流。对于非打孔情况,也使用TCP。

重要的是,超群连接是未加密的-加密必须单独添加。例如,一旦Hyperswarm建立连接,Hypercore会将其包装在Noise协议流中以添加端到端加密。