当你想开发一个去中心化应用的时候,可能会想到像以太坊这样的区块链。
区块链在管理状态、实现智能合约自动流程和交换经济价值等方面是非常有用的。你可以根据这篇教程(https://www.freecodecamp.org/news/build-a-blockchain-in-golang-from-scratch/)搭建一个区块链从而了解有关区块链的更多知识。
不过,你的应用的数据存储在哪里?这些数据包括了图像、文件,以及由HTML、CSS和JS文件构成的应用网站前端服务。你的应用和用户的数据是从一个中心化的亚马逊云服务器上加载的吗?
在区块链上存储内容是很昂贵和低效的。你的区块链应用需要去中心化的存储方案!
在这个教程中,我会向你介绍星际文件系统(InterPlanetary File System, 缩写为IPFS)。你将会学到:
1. 如何通过去中心化存储来存取数据。
2. 如何运行自己的IPFS节点。
3. 有关IPFS协议的底层构造
4. 我们还会读取一个存储在IPFS上的维基百科网站。
准备好了吗?那开始吧。
目录
什么是IPFS?
如何设立一个IPFS节点
如何使用CLI命令行和HTTP协议来存取IPFS内容
什么是CID标识——IPFS上的基于内容的标识
如何反向工程IPFS数据存储
如何将IPFS节点连接到去中心化网络
如何使用 Bitswap协议在点对点网络上交换数据
如何在点对点网络上进行内容持久化
1.什么是IPFS
星际文件系统的缩写是IPFS,它是一个点对点的超媒体协议,旨在让网络变得更快、更安全和更开放。
IPFS是一个用于存储和分享内容的协议。就如在区块链世界里的那样,每一个用户都会运行自己的节点(服务器)。节点之间可以互相通讯并交换文件。
>>>>IPFS的特别之处在哪
首先,IPFS是去中心化的,因为它从数千个节点中载入内容,而不是从单一的中心化服务器中载入。数据的每一个片段都是用密码学哈希运算处理的,从而生成一个安全的,独特的内容标识:CID。
在IPFS上存储网站可以避免审查和单点故障问题。你担心自己的IPFS节点掉线吗?不用害怕,网站仍然能从全球其他提供相应数据的节点上载入内容。
例如,假设维基百科服务难以使用,就可以从IPFS的点对点网络上获取在4月17日进行索引并持久化存储的去中心化版维基百科。具体是通过CID:"QmT5NvUtoM5nWFfrQdVrFtvGfKFmG7AHE8P34isapyhCxX"
其次,IPFS内容的完整性可以通过密码学验证。
最后,IPFS内容是有重复内容处理机制的。如果你尝试在同一个IPFS节点上存储两个一样的1MB大小文件,它们只会被存储一次。这就消除了重复数据的问题。因为它们的哈希值会生成同样的CID标识。
2.如何设立一个IPFS节点
>>>>安装IPFS
打开 IPFS文档(https://docs.ipfs.io/install/)的安装页,根据你的操作系统类型(Windows, macOS, Linux)参照相应指示。我会在下面记录Ubuntu环境下的安装过程。
IPFS安装文档
我倾向于从头开始编译ipfs/go-ipfs 代码库(http://github.com/ipfs/go-ipfs)并按需查错。毕竟,Go语言真的很棒。
>>>>在Go环境里编译代码
克隆代码库,并运行 Makefile里的安装脚本。
或者下载并安装预编译版本的 IPFS:
>>>>验证安装效果
说实话吧,Go语言是很棒的,自己编译代码也是很酷的,也算是去中心化精神的体现。由此生成的二进制文件会在你的$GOPATH里创建。
>>>>新节点初始化
运行 ipfs init 以创建新节点。默认情况下,这会新建一个文件夹并将所有数据存储在 ~/.ipfs 。你可以通过编辑IPFS_PATH 环境变量来修改此配置。
现在你的节点已经完成初始化了,等待你上传内容。
3.如何使用IPFS
>>>>增加内容
IPFS可以处理不同类型的数据,这包括了简单的文本、图像、视频和网站等。
下面先从存储这段简单的信息开始:hello IPFS world by Web3Coach:
这样,内容就存储好了,并通过密码学哈希函数建立索引,然后返回其独特的内容标识号 (CID):