乐趣区

关于ipfs:以太坊实践整理六文件去中心化存储

后面实现的 DAPP,通过公开源代码和智能合约实现了运行时规定的去中心化。然而前端页面始终是来自中心化的 Web 服务器,中心化服务器对显示内容有相对的控制权,所以去中心化还不够纯正。我须要对整个前端打包目录进行去中心化的存储。

IPFS 协定

IPFS 指标是取代 HTTP 去构建一个更好的去中心化的 Web。现有的网络服务,基于 IP 寻址的,就是 IP 找到内容所在的服务器,而后再与服务器交互。而在 IPFS 的网络里是依据内容寻址的,咱们上传到 IPFS 的文件都会产生哈希值,无需晓得文件存储在哪里,通过哈希值就可能找到这个文件。

IPFS 装置

$ tar go-ipfs_v0.9.1_darwin-amd64.tar
$ cd go-ipfs
$ sudo ./install.sh

IPFS 初始化

$ ipfs init
generating ED25519 keypair...done
peer identity: 12D3KooWBsfJCNoZBNLd825gcAnhSMqHJoFmE3PSpd86v49PjJSQ
initializing IPFS node at /Users/zhutx/.ipfs
to get started, enter:

ipfs cat /ipfs/QmQPeNsJPyVWPFDVHb77w8G42Fvo15z4bG2X8D2GhfbSXc/readme

以上命令执行后,生成密钥对并产生对应的节点身份 id(peer identity)。同时在用户主目录下产生一个.ipfs 的暗藏目录,IPFS 相干数据都在这里。IPFS 配置文件为.ipfs/config,同步文件数据库在.ipfs/blocks 目录,密钥在.ipfs/keystore 目录。

上传文件

创立文件:

$ echo "Hello World" >> hello.txt

增加到 IPFS:

$ ipfs add hello.txt
added QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u hello.txt
 12 B / 12 B [=========================================================] 100.00%

查看 IPFS 上文件内容:

$ ipfs cat QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u
Hello World

上传目录

创立目录并将文件移入:

$ mkdir upload
$ mv hello.txt upload

上传整个目录到 IPFS:

$ ipfs add -r upload
added QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u upload/hello.txt
added QmXnF4uF4hG8pANVHxXoL9z8v87xinNwcdMMnBnqRnrSiW upload
 12 B / 12 B [============================================================================================] 100.00%

下面命令返回目录 hash,以及每个文件的 hash,文件的内容没变动所以还是之前的哈希值

// 能够通过【目录哈希值 / 文件名】的形式,拜访文件内容
$ ipfs cat QmXnF4uF4hG8pANVHxXoL9z8v87xinNwcdMMnBnqRnrSiW/hello.txt
Hello World

// 当然也是能够间接文件哈希值拜访文件内容
$ ipfs cat QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u
Hello World

同步到网络

下面咱们增加的文件和目录,仅仅存在于本地 IPFS 节点上,咱们须要把数据同步到 IPFS 网络中,须要开启 daemon 服务:

$ ipfs daemon
Initializing daemon...
go-ipfs version: 0.9.1
Repo version: 11
System version: amd64/darwin
Golang version: go1.16.6
Swarm listening on /ip4/127.0.0.1/tcp/4001
Swarm listening on /ip4/127.0.0.1/udp/4001/quic
Swarm listening on /ip4/192.168.31.175/tcp/4001
Swarm listening on /ip4/192.168.31.175/udp/4001/quic
Swarm listening on /ip6/::1/tcp/4001
Swarm listening on /ip6/::1/udp/4001/quic
Swarm listening on /p2p-circuit
Swarm announcing /ip4/127.0.0.1/tcp/4001
Swarm announcing /ip4/127.0.0.1/udp/4001/quic
Swarm announcing /ip4/192.168.31.175/tcp/4001
Swarm announcing /ip4/192.168.31.175/udp/4001/quic
Swarm announcing /ip6/::1/tcp/4001
Swarm announcing /ip6/::1/udp/4001/quic
API server listening on /ip4/127.0.0.1/tcp/5001
WebUI: http://127.0.0.1:5001/webui
Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
Daemon is ready

开启 daemon 之后,就会尝试连贯其余节点同步数据。同时在本地还会开启 API 服务和 Web 网关服务(默认 8080 端口)。

API 服务控制台

API 服务配套了一个 IPFS Web 版的治理控制台,能够间接在管制台上上传文件,查看节点连贯状况等等。

能够通过 http://localhost:5001/webui 拜访:

通过网关拜访

因为以后浏览器不反对 IPFS 协定(ipfs://)拜访文件,须要借助 Web 网关服务去获取 IPFS 网络上的文件。刚上传的文件能够通过网关这么拜访了:
http://127.0.0.1:8080/ipfs/Qm…

文件曾经同步至 IPFS 网络了,内部用户拜访的话,就能够通过 IPFS 官网网关拜访了:https://ipfs.io/ipfs/QmXnF4uF…

官网 IPFS 网关服务可能是须要翻墙能力连贯,能够从这里找第三方公共 IPFS 网关服务:
https://ipfs.github.io/public…

通过上传目录的形式,咱们能够把 DAPP 前端目录整个上传到 IPFS 网络去,就实现了前端的去中心化。不过,要留神代码里须要应用相对路径引入 css、js 等资源,否则通过 IPFS 拜访 index.html 时会找不到相应文件。

IPFS 与 filecoin 什么关系
IPFS 是一个网络协议,而 Filecoin 则是一个基于 IPFS 的去中心化存储我的项目。Filecoin 我的项目是 IPFS 网络的激励层,Filecoin 我的项目次要是为了激励大家奉献硬盘资源,因为 IPFS 挖矿实质上就是共享本人的存储空间。

咱们能够把 Filecoin 我的项目了解为是运行在 IPFS 网络里的一个激励制度。IPFS 是一个点对点的分布式网络,IPFS 须要更多的节点参加进来,参加形式就是接入 IPFS 网络共享硬盘和带宽。然而,如果没有一套好的激励机制,谁违心奉献出本人的硬盘和带宽资源呢?所以这时候,IPFS 就须要 filecoin 这样一个激励机制。

退出移动版