域名系统(DNS)将名称与资源匹配。而不是键入104.18.26.46访问CloudFlare博客,键入Blog.CloudFlare.com,并使用DNS,域名解析为104.18.26.46,CloudFlare博客IP地址。
类似地,分布式系统,例如以外um和IPFS依赖于可用的命名系统。可以使用DNS,但其解析器的属性运行与分布式Web(DWeb)系统中的属性相反。即,DWEB Resolvers理想地提供(i)本地可验证的数据,(ii)内置历史,(iii)没有单个信任锚。
在CloudFlare Research,我们一直探索替代方法来解决与这些属性对齐的响应的查询。我们很自豪地宣布分布式Web的新型解析器,其中可以访问以Ethereum名称服务(ENS)索引的IPFS内容。
要了解它是如何构建的,以及如何使用它,请阅读。
行星际文件系统(IPF)是一个对等网络,用于在分布式文件系统上存储内容。它由一组名为节点的一组计算机组成,使用公共寻址系统存储和中继内容。
该寻址系统依赖于使用内容标识符(CID)。 CID是自描述的标识符,因为标识符源自内容本身。例如,qmxoypizjw3wknfijnklwhcnl72vedxjqkddp1mxwo6uco是wikipedia-on IPFS主页的CID版本0(CIDV0)。
要理解为什么CID被定义为自我描述,我们可以查看其二进制表示。对于qmxoypizjw3wknfijnklwhcnl72vedxjqkddp1mxwo6uco,cid看起来如下:
第一个是用于生成CID的算法(在这种情况下SHA2-256);然后是编码内容的长度(32为SHA2-256哈希),最后是内容本身。当参考Multicodec表时,可以了解如何编码内容。
这种编码机制很有用,因为它跨多个协议创建了唯一和可升级的内容寻址系统。
Ethereum是一个基于帐户区块链,具有智能合同能力。基于帐户,每个帐户都与地址相关联,可以通过在块中分组的操作来修改这些帐户,并通过Ethereum共识算法密封,操作验证。
有两类帐户:用户帐户和合同帐户。用户帐户由私钥控制,用于从帐户中签署事务。合同账户持有字节码,当事务发送到帐户时由网络执行。交易可以包括资金和数据,允许在账户之间丰富的交互。
创建事务时,网络上的每个节点会验证。对于两个用户帐户之间的事务,验证包括检查原始帐户签名。当交易在用户和智能合同之间时,每个节点都在Ethereum虚拟机(EVM)上运行智能合同字节码。因此,所有节点都执行相同的操作套件并以相同的状态结束。如果一个演员是恶意的,则节点不会增加其贡献。由于节点拥有不同的所有权,因此他们有一个动力不作弊。
正如您可能已经注意到的那样,当CID描述一段内容时,它就在' t描述了在哪里找到它。实际上,CID描述了内容,而不是其在网络上的位置。将通过对IPFS节点所做的查询检索文件的位置。
IPFS URL(Unified Resource Locator)如下所示:IPFS:// qmxoypizjw3wknfijnklwhcnl72vedxjqkddp1mxwo6uco。访问此URL意味着使用IPFS协议检索qmxoypizjw3wksfijnklwhcnl72vedxjqkddp1mxwo6uco,由IPFS协议表示://。但是,键入此类URL非常出错。此外,这些URL不是非常人性化的,因为没有好方法来记住这么长的弦。要解决此问题,您可以使用DNSLink。 DNSLink是一种在DNS TXT记录中指定IPFS CID的方式。例如,IPF上的维基百科有以下TXT记录
此外,它是IPFS网关的记录点。这意味着,当您访问en.wikipedia-on-ipfs.org时,您的请求将被引导到IPFS HTTP网关,然后使用域TXT记录查找CID,并返回与此CID关联的内容使用IPFS网络。
这是对安全性的交易易用性。用户的Web浏览器并不验证所服务的内容的完整性。这可能是因为浏览器没有实现IPF,或者因为它没有验证域名签名 - DNSSEC。我们在我们之前的博客文章中写了关于此问题的关于端到端完整性。
DNS简化了IP地址,以与邮政地址相同的方式是指地理位置数据的方式,以及手机抽象电话号码中的联系人。所有这些系统都提供人类可读格式并降低操作的错误率。
要验证这些数据,可信锚或“真相源”是:
政府注册处邮寄地址。在英国,地址由城市,自治市镇和地方议会处理。
帐户由其地址标识。地址始于" 0x"然后是20个字节(Ref 4.1 Ethereum黄色纸),例如:0xF10326C1C6884B094E03D616CC8C7B920E3F73E0。这不是很可读,当事务不可逆转时,可以很可怕,并且可以轻松地屏蔽单个字符。
第一缓解策略是引入一个新的符号,以基于地址0xF10326C1C684B094003D616CC8C7B920E3F73E0的散列来利用一些字母。这有助于检测错误,但仍然无法读取。如果我必须向朋友发送交易,我无法确认她没有错过地址。
Etereum名称服务(ex)是创建的,以解决此问题。它是一种能够将人类可读名称转换为域的系统,以阻止地址。例如,域隐私 - PASS.eth指向Ethereum地址0xF10326C1C6884B094E03D616CC8C7B920E3F73E0。
注册表是一个智能合同,维护一个域列表以及有关每个域的一些信息:域所有者和域解析器。所有者是允许管理域的帐户。它们可以创建子域和更改其域的所有权,以及修改与其域关联的解析器。
Resolvers负责保存记录。例如,公共解析器是一个智能合同,其不仅可以将名称与区块链接相关联,还可以将名称与IPFS内容标识符相关联。解析器地址存储在注册表中。用户然后联系注册表以检索与名称关联的解析器。
考虑一位用户,Alice,他可以直接进入以外态。流程如下:爱丽丝想要获取隐私通行证的Etereum地址,域名是隐私通行证。她在ENS注册表中寻找隐私通行证,并找出了隐私 - Pass.eth的解析程序.eth是0x1234 ......她现在在解析器地址寻找隐私范围的地址,结果是0xF10326C ....
访问IPFS内容标识符以以类似的方式获得隐私PASS.ETH的工作。解析器是相同的,只有访问的数据是不同的 - Alice调用来自智能合同的不同方法。
目标是能够直接从Web浏览器使用这种新的索引IPFS内容的方式。但是,访问ENS注册表需要访问Etereum状态。要访问IPFS,您还需要访问IPFS网络。
为了解决这个问题,我们将使用CloudFlare的分布式Web网关。 CloudFlare在CloudFlare-eth.com和CloudFlare-IPFS.com上运行了Etereum Gateway和IPFS网关。
Ethlink的第一个版本是由Jim McDonald建造的,由Eth.Link的True Name Ltd运营。从下周开始,eth.link将转换为使用CloudFlare分布式Web Resormer。为此,我们在CloudFlare工人之上建立了ethlink。这是IPF的代理。它在附加时代理所有ENS注册域。例如,Privacy-Pass.eth应该呈现隐私传递主页。从您的Web浏览器,https://privacy-pass.eth.link做到了。
分辨率在Cloudflare边缘使用CloudFlare工人完成。 CloudFlare Worker允许在CloudFlare基础架构上运行JavaScript代码,从而消除了维护服务器并提高服务的可靠性。此外,它跟随服务工作者API,因此如果需要,可以通过最终用户检查从解析器返回的结果。
为此,我们为* ..eth.link设置了通配符DNS记录,以通过CloudFlare代理并由CloudFlare工人处理。当用户Alice访问Privacy-paria.eth.Link时,工作人员首先获取要从Ethereum检索的CID的CID。然后,它请求将此CID与IPF匹配的内容,并将其返回给Alice。
所有部件都可以在本地运行。工作人员可以在服务工作者中运行,而Ethereum网关可以指向IPFS伴侣提供的本地Etereum节点和IPFS网关。这意味着虽然CloudFlare提供了分辨率 - AS-A-Service,但都不是必须信任的。
所以我们分发了吗?不,但我们正在靠近新兴技术和当前的Web基础架构之间的建筑桥梁。通过提供专用于分布式Web的网关,我们希望每个人都可以将这些服务更能访问。
我们感谢ENS团队支持扩展分布式Web的新型解析器。 ENS团队在HTTPS://eth.Link运行类似的服务。 1月18日,他们将切换https://eth.link以使用我们的新服务。
这些服务受益于CloudFlare Worker平台的额外速度和安全性,同时铺平了在浏览器中运行分布式协议的方式。
研究IPFS Evereum分布式Web