需要在答辯之前做一點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到用戶還是需要程序員想辦法,這只是冰山一角的工作,思考更合理的邏輯,更安全有效的加密方式纔是我們做應用需要的工作。