后面实现的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 initgenerating ED25519 keypair...donepeer identity: 12D3KooWBsfJCNoZBNLd825gcAnhSMqHJoFmE3PSpd86v49PjJSQinitializing IPFS node at /Users/zhutx/.ipfsto 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.txtadded QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u hello.txt 12 B / 12 B [=========================================================] 100.00%

查看IPFS上文件内容:

$ ipfs cat QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8uHello World

上传目录

创立目录并将文件移入:

$ mkdir upload$ mv hello.txt upload

上传整个目录到IPFS:

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

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

// 能够通过【目录哈希值/文件名】的形式,拜访文件内容$ ipfs cat QmXnF4uF4hG8pANVHxXoL9z8v87xinNwcdMMnBnqRnrSiW/hello.txtHello World// 当然也是能够间接文件哈希值拜访文件内容$ ipfs cat QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8uHello World

同步到网络

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

$ ipfs daemonInitializing daemon...go-ipfs version: 0.9.1Repo version: 11System version: amd64/darwinGolang version: go1.16.6Swarm listening on /ip4/127.0.0.1/tcp/4001Swarm listening on /ip4/127.0.0.1/udp/4001/quicSwarm listening on /ip4/192.168.31.175/tcp/4001Swarm listening on /ip4/192.168.31.175/udp/4001/quicSwarm listening on /ip6/::1/tcp/4001Swarm listening on /ip6/::1/udp/4001/quicSwarm listening on /p2p-circuitSwarm announcing /ip4/127.0.0.1/tcp/4001Swarm announcing /ip4/127.0.0.1/udp/4001/quicSwarm announcing /ip4/192.168.31.175/tcp/4001Swarm announcing /ip4/192.168.31.175/udp/4001/quicSwarm announcing /ip6/::1/tcp/4001Swarm announcing /ip6/::1/udp/4001/quicAPI server listening on /ip4/127.0.0.1/tcp/5001WebUI: http://127.0.0.1:5001/webuiGateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080Daemon 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这样一个激励机制。