IPFS是什么?

How to enable

首先使用 ipfs-swarm-key-gen 生成 swarm.key

go get github.com/Kubuxu/go-ipfs-swarm-key-gen/ipfs-swarm-key-genipfs-swarm-key-gen > ~/.ipfs/swarm.key

要加入一个私有网络首先要得到这个网络的 swarm.key 并保存到
~/.ipfs/swarm.key 中,如果自定了
IPFS_PATH,那么就将它放入自定义的路径下。

当启用私网配置后,将无法再使用默认的 bootnode 了,需要设置为私网的
bootnode

为了防止私网节点尝试访问默认的 bootnode 我们先将其清除:

ipfs bootstrap rm --all

然后像这样来添加私网自己的 bootnode

ipfs bootstrap add <multiaddr>

例如:

ipfs bootstrap add /ip4/104.236.76.40/tcp/4001/ipfs/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64

网络中的 bootnode 节点与其他节点没有任何不同,所以制作一个 bootnode
还是非常容易的。

也可以通过设置环境变量 LIBP2P_FORCE_PNET=1
来强行启用私网配置,如果没有正确配置 swarm.key 会导致 daemon 启动失败

  • 参考资料 IPFS官方文档

首先看看 key 是如何生成的

//github.com/Kubuxu/go-ipfs-swarm-key-gen/blob/master/ipfs-swarm-key-gen/main.gofunc main() { key := make([]byte, 32) _, err := rand.Read if err != nil { log.Fatalln("While trying to read random source:", err) } fmt.Println("/key/swarm/psk/1.0.0/") fmt.Println("/base16/") fmt.Print(hex.EncodeToString}

是不是太简单了?生成一个 32 位的随机数,用 hex.Encode 成一个 64 位
16进制数,谈下一话题。

Companies firstly use leased lines to communicate with branches remotely
located in other areas or even overseas.Leased lines ranges from
Integrated Services Digital Networks runs 144 kbps to Optical Carrier-3
(OC3, runs 155 Mbps). Leased lines is fast, secure when it comes to
compare with WAN, but it is very expensive, and there is other weakness
that it can’t provide service for mobile users. So nowadays companies
intend to build their own Virtual Private Networks to communicate with
remote offices and mobile employees.

IPFS是Interplanetary File
System的缩写,直译过来就是“星际文件系统”,是一个点对点的超媒体协议(“A
peer-to-peer hypermedia protocol”)。

       
区块链是价值互联网的基础设施,基础设施之间如何互联互通并会引发什么样应用场景?按这个思路查找了下相关技术方案,发现了IPFS协议。

图片 1图片 2图片 3

首先我们来看一下 libp2p 中的 pnet 接口和实现
  • go-libp2p-interface-pnet

// go-libp2p-interface-pnet/interface.go// Protector interface is a way for private network implementation to be transparent in// libp2p. It is created by implementation and use by libp2p-conn to secure connections// so they can be only established with selected number of peers.type Protector interface { // Wraps passed connection to protect it Protect (net.Conn, error) // Returns key fingerprint that is safe to expose Fingerprint() []byte}

Protector 接口说它是实现私网的一种方式,由 libp2p-conn
调用创建加密连接

  • go-libp2p-pnet

// go-libp2p-pnet/protector.gotype protector struct { psk *[32]byte fingerprint []byte}func (p protector) Protect(in net.Conn) (net.Conn, error) { return newPSKConn(p.psk, in)}func (p protector) Fingerprint() []byte { return p.fingerprint}

这个 protector 类实现了 Protector 接口,在创建这个类时会去反序列化
key 得到 psk ,那个就不重要了,比较重要的是 newPSKConn 这个包装

func newPSKConn(psk *[32]byte, insecure net.Conn) (net.Conn, error) { if insecure == nil { return nil, errInsecureNil } if psk == nil { return nil, errPSKNil } return &pskConn{ Conn: insecure, psk: psk, }, nil}

上面的 newPSKConn 返回了 pskConn ,这个类继承了 net.Conn并且对
readwrite 进行了有关加密解密的封装

type pskConn struct { net.Conn psk *[32]byte writeS20 cipher.Stream readS20 cipher.Stream}func (c *pskConn) Read(out []byte) (int, error) { if c.readS20 == nil { // 如果是第一个包,那么前 24 个字节一定是一个随机数 // 因为下面的 Write 方法第一个包就是放了一个 24 byte 的 nonce 在前面 nonce := make([]byte, 24) _, err := io.ReadFull(c.Conn, nonce) if err != nil { return 0, errShortNonce } // salsa20.New 这个实现过程比较复杂,目的是返回一个标准库中 cipher.Stream 接口的实现类 c.readS20 = salsa20.New(c.psk, nonce) } maxn := uint32 in := mpool.ByteSlicePool.Get. // get buffer defer mpool.ByteSlicePool.Put // put the buffer back in = in[:maxn] // truncate to required length n, err := c.Conn.Read // read to in if n > 0 { // 代码看到这里就可以省略后面的处理了,因为答案已经出来了 // 直接去看标准库中对于 cipher.Stream.XORKeyStream 的定义即可 c.readS20.XORKeyStream(out[:n], in[:n]) // decrypt to out buffer } return n, err}func (c *pskConn) Write(in []byte) (int, error) { ...... c.writeS20.XORKeyStream // encrypt return c.Conn.Write // send}

ReadWrite 的实现中看到了 XORKeyStream
,字面能猜出这是通过数据包和 key
进行异或操作而实现的简单的加密传输,两边的key肯定是一致的,并且每次建立连接时都会交换一个
24 位的 nonce,细心的同学可以去看一下具体的拆分逻辑,分成了 前16
和后 8
,又做了一些复杂的位移操作用来生成连接通道上使用的key,随机数保证了每次连接通道上的
key 都是不同的。

===================================

我们可以看出,IPFS的本质是一份“协议”,通过“点对点”的方式进行网络的组织,在这样一个去中心化的存储网络中,每个节点都可以提供存储空间,供网络中的其他节点进行存储。同时也提供传输,依据规则向网络中需要读取该文件的节点发送本地存储的文件。它是一个面向全球的、点对点的分布式文件系统,试图将所有相同文件系统的计算设备连接在一起。

        IPFS是点对点路由协议InterPlanetary File
System的简称,它是一个面向全球的、点对点的分布式版本文件系统,试图将所有具有相同文件系统的计算设备连接在一起。

IPFS官方周报更新

谁在使用 Protector ?
  • 答案:go-libp2p-transport-upgrader

libp2p 中定义了很多 Option 用来初始化 Host
对象,在前面的几篇入门文章中提及过,其中就有一个叫
libp2p.PrivateNetworkoption,用来为 Host 指定 Protector
。前面的文章也提到过 TcpTransportUpgrader 的调用过程,这个
Protector 就是在 Upgrader.upgrade
中被使用到的,有兴趣的同学可以重新回忆并翻找一下代码。

现在我们知道了私网是通过对通道进行加密来建立的,发出的数据包都用密钥进行一次异或
XOR(packet,securityKey)
,接收端再做一次相同的操作即可还原数据包。这个原理计算机专业的同学应该都了解,如果不了解就演算一下

  • 演算过程: 设 packet = 1 , securityKey = 1securityPacket =
    xor(packet, securityKey) = xor = 0packet =
    xor(securityPacket,securityKey) = xor = 1

Blockchain analogy

IPFS宣布了一个未来Web发展计划,它用基于内容的地址替代基于域名的地址。也就是说用户寻找的不是某个地址而是存储在某个地方的内容,不需要验证发送者的身份,而只需要验证内容的哈希,通过这样可以让网页的速度更快、更安全、更健康、更持久。IPFS的成功应用将会取代HTTP,成为下一点互联网传输的基石。

IPFS协议是怎么出来的,解决哪方面的问题?

这是2019年的第一期周报

Blockchain is like the service Googleprovide as Google slides. It can’t
be recorded by itself, and every slide canonly be added to the last one
created. Google slides is kind of like acompetition, like who can
predict most accurately for what weather will be likefor next 10 mins in
Toronto, and every participant uses their own predictivemodel, and the
winner will be given Tom Hortons card as incentive. As thewinner slide
are being agreed manually by every participant, it will bepermanent and
public access to everyone.

总结:IPFS是一个面向全球的、点对点的分布式版本文件系统,目标是补充甚至取代目前统治互联网的超文本传输协议,将所有具有相同文件系统的计算设备连接在一起,希望构建速度更快、更安全、更自由的互联网时代。

          升级取代HTTP协议,发明者Juan Benet。拟解决如下场景问题:

星系云科技为您带来翻译

Template: the tool shaped for particularuses like digging or mining. The
thing made to be the foundation or base forother things.

二、HTTP存在的问题

在 /ipfs 和 /ipns
下挂载全球文件系统,挂载的个人同步文件夹,拥有版本功能,文件加密,数据共享系统,可用于所有软件的带版本的包管理器,可以作为虚机的根文件系统,可以作为数据库:应用可以直接操作
Merkle DAG,拥有 IPFS
提供的版本化、缓存以及分布式特性,可以做(加密)通讯平台,各种类型的
CDN,永久的 Web,不存在不能访问的链接。

精彩不要错过

Incentives: things as reward to encourage people to do it.

高度集中化

IPFS协议商业化前景如何?

《IPFS官方周报24期》:

Web的本意是去中心化,但却变得越来越中心化,今天我们使用的网络服务绝大部分是少数几个网站的服务,如Google、Amazon、腾讯、阿里等。我们每一次访问网络服务都需要连接到中央服务器,中央服务器再将这些数据返回给我们。数据的传输速度取决于网络带宽,如果很多人同时访问中央服务器,会导致延迟甚至无法访问。假如某天这些公司的服务器遭受大量的网络攻击,或是自然灾害导致的服务器瘫痪,我们全球的网民就无法使用他们提供的服务了。可见HTTP变成了一个高度集中的、脆弱的、过度依赖于骨干网络的协议。

         
近日,IFPS宣布了一个未来web发展计划,它用基于内容的地址替代基于域名的地址,也就是用户寻找的不是某个地址而是储存在某个地方的内容,不需要验证发送者的身份,而只需要验证内容的哈希,通过这样可以让网页的速度更快、更安全、更健壮、更持久。IPFS表示,IPFS未来将替代HTTP(以及其他的许多东西)。

一、2018年是取得重要里程碑的一年

将Web进行去中心化,可以大大降低少数组织的延展性,提高所有节点的独立性和自由度,同时也降低了由于服务器中断造成的数据丢失的风险。

IFPS2017年8月完成ICO,目前部分交易所可以买到代币6月合约。

1月:Mozilla在火狐浏览器Firefox中增加了IPFS协议的支持 。

维护成本高

2月:libp2p进入世界视野
,这是一个模块化构建的对等网络栈,是IPFS底层核心。

中心化的服务器,因为要保障数据服务的稳定性和安全性,所以维护成本非常高。在中心化服务运维中,有一个KPI指数叫SLA,稳定性没有达到99.9%的话,基本不合格。SLA需要消耗特别大的成本,大公司需要雇佣一批运维专家或专业人士,去保障系统的稳定性。

3月:js-ipfs v0.28.0发布,IPFS创始人Juan
Benet向麻省理工学院最大的研究实验室,“计算机科学与人工智能实验室”做了演示,同时go-ipfs发布新版本0.4.14。

不然12306也不会宣传花费了1个亿去建一个购票网站了,即使这样,在高峰时刻也还是不得不拔网线。

4月:我们介绍了IPFS Companion
2.2.0收集App,并让人们了解了Windows上的go-ipfs 。

过度依赖于Internet主干网

5月:我们首次宣布有史以来的IPFS大会
,Textile推出了支持移动设备上运行的个人IPFS节点
,用于分布式存储。另外,js-ipfs 0.29.0发布了 ,我们在IPFS
Cluster网站上启动了IPFS Cluster 0.4.0发布候选版本筛选。

当内容过度集中化之后,数据中心就会高度依赖于Internet主干网络。这样除了有利于政府对内容进行封锁和审查,事实上会存在很多问题。因为主干网络有可能会被损坏,出现路由表失控、或者遭受攻击等问题。

7月:GitHub上的Awesome IPFS项目升级为IPFS官网的一个板块 。
背靠背发布了js-ipfs v0.30.0和v0.31.0。 js-libp2p也首次正式发布 ,
go-ipfs 客户端更新到了v0.4.17 。

三、IPFS的应用优势

图片 4

IPFS架构

8月:我们在加州旧金山庆祝2018年实验室日
(参见实验室日的会谈
的官方网站( js.ipfs.io)。 随着IPFS Cluster
0.5.0的发布,我们在告别清新夏日迈入美丽的秋天。

IPFS有八层协议栈,从上至下分为:身份、网络、路由、交换、对象、文件、命名、应用,每个协议栈各司其职,又相互搭配。

图片 5

技术上不太懂,总的来说,IPFS具有两大核心优势:

9月:Cloudflare宣布他们的IPFS网关,IPFS周报也回归。 js-ipfs
0.32.0发布, ipld-explorer-cli更新到 0.14 。

1、大大提高系统效率;

10月:IPFS
Pinbot在Twitter上出现。(小编注:这个账号可以帮助你自动Pin)

2、大大降低系统成本。

11月:开发版本发布的重要月份! js-ipfs 0.33、go-ipfs
0.4.18、js-libp2p v0.24.0全部发布。

基于内容寻址

12月:重命名HTTP客户端库 ,2018年结束。

目前通过HTTP浏览器搜索文件的时候,首先要找到服务器的位置,然后使用路径名称在服务器上查找文件。IPFS从根本上改变了用户搜索的方式,通过IPFS,用户搜索的是内容。只有文件所有者可以判断这是否是用户要找的文件,此时,必须保证托管者不会通过移除文件或者关闭服务器对文件做任何更改。

二、一些很酷的消息

当文件被添加到IPFS节点上,它得到了一个新的名字,这个名字就是一个加密哈希,它是由文件内容被计算出来的。通过加密哈希保证了该哈希只表示该文件的内容,哪怕对文件只做一点点修改,哈希值就会完全不同。当下一步向IPFS网络询问哈希的时候,它通过一个分布式哈希表,可以快速找到拥有该数据的节点,从而检索该数据,并使用哈希验证是否是正确的数据。

全球知名媒体和机构报道了IPFS及协议实验室的一些里程碑,所以这里回顾一下这些新闻:

IPFS服务的文件可大可小,对于一些大的文件,它会自动将其切割为一些小块,使IPFS节点不仅仅可以像HTTP一样从一台服务器上下载文件,而且可以从数百台服务器上进行同步下载。IPFS网络是一个细粒度的、可靠的、分布式的内容分发网络。

8月:Mozilla Hacks, 《Dweb:利用IPFS建立合作和信任网络》

小结:IPFS应用基于内容的地址替代基于域名的地址,也就是用户寻找的不是某个地址而是存储在某个地方的内容,不需要验证发送者的身份,而只需要验证内容的哈希,通过这样可以让网页的速度更快、更安全、更健壮、更持久。

图片 6

四、IPFS的应用意义

9月:英国卫报,《去中心化:互联网的下一个重要一步》

一、为内容创作带来自由

图片 7

Akasha是一个典型的应用,它是基于以太坊和IPFS的社交博客创作平台,用户创作的博客内容通过IPFS网络进行发布,而非中心服务器。同时,用户和以太坊账户进行绑定,用户可以对优质内容进行ETH打赏,内容创作者能以此赚取ETH。没有太多监管的限制,也没有中间商抽成,内容收益直接归创业者所有。

10月:麻省理工学院技术评论
《一家大型科技公司正在努力从巨头垄断中解放互联网》

二、降低存储和宽带成本

图片 8

用户上传的文件如视频文件,经过IPFS协议进行存储,具有唯一标识。相较于传统视频网站,它降低了同样资源的冗余程度,同时大大节约了海量用户在播放视频时所产生的带宽成本。

11月:福布斯杂志, 《去中心化网络可以改善地理位置数据隐私问题吗吗?

三、与区块链完美结合

图片 9

区块链的本质是分布式账本,瓶颈之一就是账本的存储能力。目前大部分公链的最大问题是没法存储大量的超媒体数据在自己的链上,需要IPFS这样的技术提供底层的数据存储服务。

纳斯达克, 《泰国在 Primaries 使用区块链支持的电子投票系统》

典型的应用就是EOS,其引以为傲的是可以支持百万级的TPS并发量,其中除了DPOS共识机制的功劳外,还归功于底层存储采取IPFS技术来解决大型数据的传输效率。

图片 10

四、为传统应用提供分布式缓存方案。

Hackernoon,《破冰:用IPFS、以太坊和胖协议的来构建未来》

IPFS将中心服务提供的数据通过算法转化成一维字符串,并将与之相关联的具有检索价值的数据存入IPFS网络,并由IPFS网络标识唯一性,然后分布在各个邻近节点上。

图片 11

当检索请求到来时,系统先通过字符串近似度范围比较,缩小检索范围,加快检索效率。通过临近节点拿到超媒体数据,达到类似分布式缓存的效果,大大提高了传统应用的检索效率。

三、全球社区活动

在这一年中,人们一起参与聊天,探讨IPFS。
以下是值得关注的一些事件,如果你错过了这些,2019年不要错过了!

1月:里斯本IPFS大会,2018年是分布式网络的一年。

图片 12

2月:俄勒冈研讨会,探讨WebVR / AR III混合现实网络 。

5月:巴尔的摩/ DC
IPFS举行了会议。(小编注:地点是芝加哥洛约拉大学(Loyola University
Chicago),是一所世界的顶级私立研究型大学)

8月 :2018年加州旧金山IPFS峰会举行。

10月 :第一届IPFS柏林大会举行;伦敦线下系列交流会开始。

图:IPFS柏林大会参会人员达到100多人

图片 13

四、2018年是名字和数字组成的一年

2018年,共有261名贡献者为IPFS项目的167个存储库中提交了8417个提交。
感谢以下人员为IPFS做出如此惊人的一年。

IPFS 贡献者名单

图片 14

注:完成名单请点击

非常感谢大家的时间、专业知识、贡献。 没有你们每一个人,我们都无法做到。

五、使用Awesome IPFS构建更好的Web网络

这些只是提交给新的Awesome
IPFS站点的一些新应用程序和工具,这也表明使用IPFS开发越来越受关注。

brig– 使用git接口和FUSE文件系统进行文件同步。

IPFSStore– 使用Steem支付费用

Autonomica“IPFS社交证明” –
Autonomica是一个类似Keybase的Dapp,用于通过已发布的社交媒体和网络证明创建身份并证明此身份。

TallyLab
本地优先的端到端加密的日记应用程序,用于捕获、分析和共享有关任何内容的数据。

Pinata– 通过Pinata的REST API和IPFS工具包构建和管理dapp。

enzypt.io– 通过以太坊和IPFS购买和出售文件的网站。

qri – 分布式Web上的数据集创建、协作和数据发掘。

Peer Bandwidth Demo – 使用window.ipfs的演示应用程序,由IPFS
Companion Web扩展提供,用于获取和绘制IPFS节点的带宽信息

killcord – 一个关于censorship 的开关

Philes – 一个简单的基于浏览器的IPFS记事本应用程序。

Arpadyne– 新的Internet –
由OrbitDB提供支持的DNS,通过IPFS提供的内容。

感谢您阅读

这就是IPFS官方周报的特别版。
如果我们遗漏了某些内容,请回复此电子邮件告知我们mailto:newsletter@ipfs.io!
下周我们将回顾自2018年IPFS整个生态系统中的所有消息。

如果这是您第一次阅读IPFS官方周报,您可以通过在GitHub上查看项目或在IRC上加入我们来了解更多信息或参与其中。IPFS
Github项目地址:

IRC:

下周见。

@星系云科技原创翻译,更多IPFS热点,请关注我们,第一时间掌握价值动向。

《独家:正在爆发的互联网革命》

《区块链2018年度盘点》

《IPFS官方周报23期》

众号回复“资源”免费领取30份IPFS学习资源

公众号回复“白皮书”免费获得IPFS、Filecoin等白皮书中英文版

图片 15

相关文章