【董天一】IPFS家族(一)

作者简介:董天一 ,IPFS/Filecoin中国区技术布道人 ,《IPFS指南》作者 毕业于北京大学软件与微电子学院 曾担任甲骨文亚洲研发中心(中国)数据库开发工程师 资深区块链技术开发者,现致力于IPFS/Filecoin在中国的技术推广

IPFS这个项目其实很大,并不像大家想象的是一个东西,IPFS是由很多模块组成,每一个模块现在都已经独立成项目了,并且有自己的主页。让我们来简单看一下IPFS家族成员。

协议实验室的主页:https://protocol.ai/projects/

在协议实验室的主页上面,可以找到目前的五个个项目:

  • IPFS:ipfs.io
  • Filecoin: filecoin.io
  • libp2p: libp2p.io
  • IPLD:ipld.io
  • Multiformats:multiformats.io

(协议实验室的是有多喜欢io的域名)

其中IPFS和FIlecoin我们已近很熟悉了,也是我们主角(男一号和女一号),今天主要介绍那些背后默默无闻的支持者。

先放一张IPFS的结构图

libp2p

IPFS团队在开发IPFS协议的时候,采用的是高度模块化的方式进行的。就像搭积木一样,将各个功能独立独立起来进行。当然这也是现在软件工程里面的基本要求,不过IPFS团队在此基础上更进一步,各个木块之间几乎完全解耦合。

libp2p是什么?

在过去的相当长时间里,开发者构建一个p2p网络并不是一件容易的事情。复杂的网络环境、各种各样的通信协议和网络设备的存在使得创建大规模的点对点网络变得复杂并且困难。IPFS团队将点对点(peer-to-peer)网络的网络层从IPFS工程里面分离出来,形成一个独立的项目,这就是libp2p。该项目不仅可以供IPFS使用,也可以提供其它项目使用,作为一个p2p工程的底层协议存在。

之前的文章里面曾经提到过IPFS的网络连通性做的非常棒,在各种复杂的网络环境下都能够轻松应对,这与IPFS团队在libp2p上面的精心设计是分不开的。

如果哪个团队或者开发者想构建一个基于p2p网络的项目,不妨参考一下或者直接使用libp2p作为底层协议,会减少很多很多的开发量(发现了什么?如今如火如荼的区块链项目,有了libp2p,可以为大家节省很多工作量,当然,因为fork的存在,现在的项目大多数并不是从0开始的)。

下面我们来看看libp2p里面都有什么东东?

  • Transports:传输层,TCP,uTP,QUIC,SCTP......
  • Discovery:网络发现层,mDNS,bootstrap,DNS,Kad......
  • Peer Routing: 节点路由,mDNS, KadDHT......
  • NAT Traversal: NAT穿越层......
  • Content Routing: 内容寻址......

libp2p的主要功能是

  • 发现节点
  • 连接节点
  • 发现数据
  • 传输数据

它类似我们现实世界的快递公司。它连接着千千万万个节点,除了负责分发数据,还负责查找数据。它是一个大杂烩,综合了各种协议、框架,让它们一起和谐的工作。

当前实现版本:

  • js
  • go

IPLD

IPLD定义了基于内容寻址的统一数据结构类型。它是一个转换器,可以把现有的异构的数据结构(基于内容寻址)统一成一种格式,方便不同系统之间的数据交换和互操作。

为什么要构建IPLD?

通过哈希进行内容寻址的技术已经广泛应用于各种分布式系统。从加密货币的区块链到备份代码的每一次提交,再到各种web内容,他们背后的逻辑几乎是相同的, 然后由于数据结构的不兼容,造成了这些数据无法互相操作。IPLD作为中间层统一了这些异构的数据结构,使得不同的数据可以进行数据交换。

IPLD的组成:

  • CID(Self-describing content-addressed identifiers for distributed systems):基于内容寻址的自我描述标识
  • IPLD tree:基于 JSON、Protobuf和路径导航的跨协议的数据模型
  • IPLD Resolvers: IPLD转换器,可以添加新的协议到IPLD里面

当前已实现的IPLD数据结构

  • Git
  • Bitcoin
  • Ethereum
  • IPFS

未来会有更多的数据结构添加进来,第三方的开发也可以把自己的数据结构提交到IPLD里面。截止到目前,IPLD在github上的关注度并不像是IPFS那么引人注目。不过相信随着IPFS应用推进,IPLD项目也会也来越多的收到关注。至少它几乎可以统一目前区块链项目的绝大部分数据。作为一个中间层可以很方便的进行链之间的数据交换,IPFS团队已经帮大家造好了轮子。

Multiformats

该项目的是一系列协议的集合,它在现有协议基础上对(值:通常是具有某一项表达意义的)进行自我描述改造,即从值上就可以知道该值是如何产生的。听起来是不是有点难以理解,别着急,下面咱们使用具体的例子来说明这是一个什么东西。

当前multiformats协议里面包含以下协议。

  • multihash - self-describing hashes
  • multiaddr - self-describing network addresses
  • multibase - self-describing base encodings
  • multicodec - self-describing serialization
  • multistream - self-describing stream network protocols
  • multigram (WIP) - self-describing packet network protocols

我们以第一个multihash为例子来说明什么是multiformats。通常情况下我们使用的哈希计算方法都是某一种实现方式,比如sha1,sha2-256等。哈希计算在我们的软件工程里面几乎随处可见,特别是区块链项目。multiformats将所有的哈希值计算统一成同样的格式,这会为系统开发者带来很多好处,比如加密函数升级等。

multihash:

升级后的哈希值的结构为:

<hash-func-type><digest-length><digest-value> <哈希函数类型><摘要长度><摘要值>

我们有一个使用sha2-256函数生成的哈希值(如下),其长度为32(16进制0x20):

41dd7b6443542e75701aa98a0c235951a28a0d851b11564d20022ab11d2589a8

规定sha2-256的代表数字为12(16进制)

于是我们得出来新的哈希值:

122041dd7b6443542e75701aa98a0c235951a28a0d851b11564d20022ab11d2589a8

新的哈希值具有自我描述性质,它说明了自己是怎么来的。怎么样,是不是一下子变得开朗起来。

小编把python版本的multihash实现撸了一遍,目前multihash总共实现了以下6种哈希函数,建议以后的开发者使用这个升级版的哈希加密算法,好处多多:

  • sha1
  • sha2-256
  • sha2-512
  • sha3
  • blake2b
  • blake2s

其它几个multi协议就不在一一介绍,感兴趣的读者可以到以下页面学习

未完待续。。。。。。


相关文章和视频推荐

圆方圆学院汇集大批区块链名师,打造精品的区块链技术课程。 在各大平台都长期有优质免费公开课,欢迎报名收看。

公开课地址:https://ke.qq.com/course/345101?flowToken=1007371

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏EAWorld

不甘寂寞的Jenkins:从持续集成到持续部署

? 众所周知,Jenkins是最常用的持续集成工具,但是我的工作一直和持续集成没有关系,所以也很少去关注Jenkins的动向。 但是两个月前的一则新闻引起了我...

48960
来自专栏Play & Scala 技术分享

Play For Scala 开发指南 - 第1章 Scala 语言简介

31660
来自专栏程序人生

你的Project Starter在哪里?

今早看到一个github repo,hackathon starter。它是一个nodejs的project starter,帮助你快速建立项目原型。 ? 它提...

349100
来自专栏微信公众号:Java团长

Java就业指导

想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些东西呢?本文陈列的这些内容既可以作为个人简历中的内容,也可以作为面...

26420
来自专栏编程一生

IO和socket编程

13930
来自专栏顶级程序员

2018年4月份GitHub上最热门的Java项目

4 月份 GitHub 上最热门的Java项目排行已经出炉啦,在本月的名单中,也有新面孔出现,如蚂蚁金服开源的基于 Spring Boot 的研发框架 SOFA...

17340
来自专栏微信公众号:Java团长

Java虚拟机:什么是Java

让我们来看一下Java的广告词,来自http://www.java.com/zh_CN/about/:

18020
来自专栏JAVA高级架构

有哪些 Java 源代码看了后让你收获很多,代码思维和能力有较大的提升?

最早看的 架构探险 从零开始写Java Web框架,黄勇写的,算是一种启蒙,作者自己写了一套ioc和aop框架以及mvc请求分发框架。 跟着写了一遍,基本明白了...

475100
来自专栏FD的专栏

Effective Testing with RSpec 3(介绍)

我们的测试再次被打破!”“为什么套件需要这么长时间才能运行?”“无论如何,我们从这些测试中获得了什么价值?”

14520
来自专栏Java架构师学习

Java开发必读--初识微服务一定要阅读这篇文章微服务是什么?

或许在座的高朋了解过其概念。个人认为,与其说微服务是一种技术,不如将其定义为一种架构,而架构则是“技”的实现与“术”的策略相辅相成。“术”的策略需要分析使用场景...

14610

扫码关注云+社区

领取腾讯云代金券