需要在答辩之前做一点demo进行展示,好给评委老师展示我们的预期成果,组长最后挑选了IPFS作为初级的展示工具。我们的第一次在链上操作就开始了。区块链具有去中心化、不可篡改、智能合约的一些特性。其实大家都知道区块链是这几年因为比特币的火而赶上风口的东西,ipfs就是一个实现。
这里借用网络的一些资源简要介绍一下IPFS的东西。
部分内容来源于
黎跃春区块链博客–IPFS环境配置
IPFS简介
IPFS(InterPlanetary File System)
是一个点对点的分布式超媒体分发协议,它整合了过去几年最好的分布式系统思路,为所有人提供全球统一的可寻址空间,包括
Git
、自证明文件系统
SFS
、
BitTorrent
和
DHT
,同时也被认为是最有可能取代
HTTP
的新一代互联网协议。
IPFS
用基于内容的寻址替代传统的基于域名的寻址,用户不需要关心服务器的位置,不用考虑文件存储的名字和路径。我们将一个文件放到
IPFS
节点中,将会得到基于其内容计算出的唯一加密哈希值。哈希值直接反映文件的内容,哪怕只修改
1
比特,哈希值也会完全不同。当
IPFS
被请求一个文件哈希时,它会使用一个分布式哈希表找到文件所在的节点,取回文件并验证文件数据。
IPFS是通用目的的基础架构,基本没有存储上的限制。大文件会被切分成小的分块,下载的时候可以从多个服务器同时获取。IPFS的网络是不固定的、细粒度的、分布式的网络,可以很好的适应内容分发网络的要求。这样的设计可以很好的共享各类数据,包括图像、视频流、分布式数据库、整个操作系统、模块链、8英寸软盘的备份,还有静态网站。
IPFS
提供了一个友好的
WEB
访问接口,用户可通过
http://ipfs.io/hash
获取IPFS网络中的内容,也许在不久的将来,IPFS协议将会彻底替代传统的HTTP协议。
/* end*/
其实这些区块链的实现的关键技术都有类似的,例如点对点,分布式,这个也是一种发展趋势。这里不多做解释,如果想要深入了解区块链架构,可以去找寻一点 例如白话区块链 图解区块链 深入理解区块链 区块链架构之类的书籍去看看。
IPFS的环境配置
博主在Windows系统上和Linux系统上都试着装过ipfs的环境,现在机器上也有ipfs的环境,整个安装过程给人感觉很简单,一步一步走下去就ok,坑几乎没有,前提是网络啊 机器啊一些底层环境都存在。
做到结束 能在本地打开你的ipfs的一个HelloWorld的web端,输入一个数字,返回一串hash值,就很安逸,大功告成。
因为Ubuntu系统对于开发者、对于作为服务器端具有更好的性能,我们这里首先以Ubuntu为例开始讲,参考的还是
黎跃春区块链博客–IPFS环境配置
。
首先去IPFS官网www.ipfs.io下载它的对应你系统的安装包,
之后的通过ipfs访问hash的操作也是才能看到。也可以去CSDN或者网盘去搜下载的
一个windows的下载地址
。
一个Ubuntu的下载地址
还是建议去官网下最新的。
如图所示
在Try it 后的页面找到install ipfs找到属于自己的系统平台,下载对应的文件即可。
Linux下就是tar.gz压缩包、windows下就是zip压缩包。在Ubuntu下后需要拷贝到一个给定的目录,建议这个目录不要太深,比较好找,因为你可能经常需要终端操作。
可以通过ls命令看到在home下的
使用 tar xvfz go-ipfs_xxxx.tar.gz命令解压 也就是tar xvfz加上你的文件名 结果如图所示
czb@ubuntu:~$ tar xvfz go-ipfs_v0.4.17_linux-amd64.tar.gz
go-ipfs/build-log
go-ipfs/install.sh
go-ipfs/ipfs
go-ipfs/LICENSE
go-ipfs/README.md
czb@ubuntu:~$
然后再用ls命令 可以发现文件目录中多了一个 go-ipfs文件夹 就是解压得到的
使用cd命令进入go-ipfs文件夹 因为里面有可执行的文件
czb@ubuntu:~$ cd go-ipfs
czb@ubuntu:~/go-ipfs$ ls
build-log install.sh ipfs LICENSE README.md
因为这个ipfs文件是其可执行安装的文件,有的人会把这个进行移动,我没移动,以后就都得在这个文件夹中执行了。你在当前文件夹下直接打开ipfs 也就是终端输入ipfs 会发现就像-help一样 已经好了 可以执行操作了 (因为相当于你直接打开)
我们使用ipfs init在你的机器上初始化 创建第一个结点,
czb@ubuntu:~/go-ipfs$ ipfs init
initializing IPFS node at .ipfs
generating 2048-bit RSA keypair...done
peer identity: QmdKXkeEWcuRw9oqBwopKUa8CgK1iBktPGYaMoJ4UNt1MP
to get started, enter:
ipfs cat /ipfs/QmVLDAhCY3X9P2uRudKAryuQFPM5zqA3Yij1dY8FpGbL7T/readme
应该就是这样,因为我的已经早之前init过,这里提示不能再init。接着你就可以用ls 和 cd命令查看目录了。
此时其实已经可以用了 只是一些功能受限,它对我们只是一个库,通过它完成自己的APP还得设置很多。
修改节点默认存储空间
可以在ipfs根目录.ipfs 使用export EDITOR=/usr/bin/vim 和ipfs config edit 进行修改默认存储空间。
查看节点id
本来想给大家展示如何查看节点id的,但是显示我这个锁上了,
通过先ipfs repo fsck删除锁 再通过ipfs daemon启动即可解锁 (ipfs daemon命令经常用到)
czb@ubuntu:~/go-ipfs$ ipfs id
Error: api not running
czb@ubuntu:~/go-ipfs$ ipfs fsck
Error: Unknown Command "fsck"
czb@ubuntu:~/go-ipfs$ ipfs repo fsck
Lockfiles have been removed.
czb@ubuntu:~/go-ipfs$ ipfs daemon
Initializing daemon...
Successfully raised file descriptor limit to 2048.
然后再打开一个新的终端,试着ipfs id即可查看结点 如图
czb@ubuntu:~$ ipfs id
{
"ID": "QmfTUiUGGn9ao8uo2YZjpXJ3qMvt9SGav87b1eKmUPGPU9",
"PublicKey": "CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC48Jx6BLYcHXNwBDTq/WNEDBxN+J8Mpq3BNWBbZkeSEtthP4bwdIZGjf+BmSJgUfOg3bUpdwvmFui9BMsl/QtTgGxGq7SWVbEj0V8x9VoQ/ySgvicYJXulajuZSdeLxAjvY8EWqi0L3+fzMGJc2NN/xDwac6HtBuGJ82gf2gRCH4b5q2cOQhUdOehYMyLo4EKh+NTiBRAv2RVT22H2NviuzoVtHQE1lkO3BpbnUpB2SSmwO2sQku7+38e2UXIDDASc4fyYocUWe/QFWa+7IUGFTWUXpNDCIWo0Zdf6eC1FWSKI/w+6srigRBpQnQPJ6FyoTKyhPIAQYFBUdf/WtrgTAgMBAAE=",
"Addresses": [
"/ip4/127.0.0.1/tcp/4001/ipfs/QmfTUiUGGn9ao8uo2YZjpXJ3qMvt9SGav87b1eKmUPGPU9",
"/ip6/::1/tcp/4001/ipfs/QmfTUiUGGn9ao8uo2YZjpXJ3qMvt9SGav87b1eKmUPGPU9"
],
"AgentVersion": "go-ipfs/0.4.17/",
"ProtocolVersion": "ipfs/0.1.0"
}
以下字符串为你的ID的hash值 之后可以通过它去官网上查看你的主页。
"ID": "QmfTUiUGGn9ao8uo2YZjpXJ3qMvt9SGav87b1eKmUPGPU9",
一点关于复制粘贴的建议,Ubuntu的终端 如果你ctrl + c就会默认中止当前命令 如果你执行一些较长的命令,切记不要ctrl+c 直接鼠标右键 copy 即可。
启动结点服务器
前面提到的 ipfs daemon命令 就是启动结点服务器的命令,在给链上传文件、传字符串的之后daemon一下。可以认为是同步节点的过程和打开本地服务器的过程 ,主要是打开本地服务器,就像apache一样,给你提供了一个端口,你启动之后,通过127.0.0.1:5001/webui 进行访问。这里要建议的是 建议不要出现全角字符,不然会莫名报错。
daemon的命令产出的结果是这样
czb@ubuntu:~/go-ipfs$ ipfs daemon
Initializing daemon...
Successfully raised file descriptor limit to 2048.
21:19:09.061 ERROR core: mdns error: No multicast listeners could be started core.go:271
Swarm listening on /ip4/127.0.0.1/tcp/4001
Swarm listening on /ip6/::1/tcp/4001
Swarm listening on /p2p-circuit/ipfs/QmfTUiUGGn9ao8uo2YZjpXJ3qMvt9SGav87b1eKmUPGPU9
Swarm announcing /ip4/127.0.0.1/tcp/4001
Swarm announcing /ip6/::1/tcp/4001
API server listening on /ip4/127.0.0.1/tcp/5001
Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
Daemon is ready
跨域资源共享CORS配置
这个可以认为是为了传输而适应底层的一些协议而设置的东西,Windows和Ubuntu都有差别,在Ubuntu上简单的按照要求即可,Windows的配置后续会说。
对跨域资源共享
( CORS )
进行配置,先
ctrl- c
退出
ipfs
,然后按照下面的步骤进行跨域配置。
press ctrl- c//退出ipfs
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Methods '["PUT", "GET", "POST", "OPTIONS"]'
ipfs config --json API.HTTPHeaders.Access-Control-Allow-Origin '["*"]'
验证是否配置成功
先启动节点服务器
ipfs daemon
然后新建终端执行下面的命令
ipfs cat /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme
这个里面的hash不是我的,命令直接输入即可,看结果即可
会在终端画一个这样的东西,表示你的环境安装成功了。大功告成
czb@ubuntu:~$ ipfs cat /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme
Hello and Welcome to IPFS!
██╗██████╗ ███████╗███████╗
██║██╔══██╗██╔════╝██╔════╝
██║██████╔╝█████╗ ███████╗
██║██╔═══╝ ██╔══╝ ╚════██║
██║██║ ██║ ███████║
╚═╝╚═╝ ╚═╝ ╚══════╝
If you're seeing this, you have successfully installed
IPFS and are now interfacing with the ipfs merkledag!
-------------------------------------------------------
| Warning: |
| This is alpha software. Use at your own discretion! |
| Much is missing or lacking polish. There are bugs. |
| Not yet secure. Read the security notes for more. |
-------------------------------------------------------
Check out some of the other files in this directory:
./about
./help
./quick-start <-- usage examples
./readme <-- this file
./security-notes
ipfs daemon成功后 也可打开127.0.0.1:5001/webui 即可看到它预设的网页 里面包含你的结点信息、上传的文件、IPFS区块链的分布情况等。如图
我们已经完成了本次ipfs基本的配置和说明,关于windows的配置和更多操作之后进行分享,特别鸣谢
黎跃春区块链博客–IPFS环境配置
祝大家使用顺利。
一点说明 是ipfs已经打好了基础的区块链,也具有一定规模的结点和群体,具有基本的足够的操作。程序员可以直接操作传值传文件返回hash值,但是加密解密,实现hash到用户还是需要程序员想办法,这只是冰山一角的工作,思考更合理的逻辑,更安全有效的加密方式才是我们做应用需要的工作。