IPFS 和區(qū)塊鏈

在B站看了黎躍春老師的教學(xué)視頻巷疼,結(jié)合網(wǎng)上的資源和自己的操作整理的筆記搀擂,知識(shí)無(wú)價(jià)汽绢,感謝分享吗跋!

1.IPFS:

IPFS (InterPlanetary File System)是個(gè)點(diǎn)對(duì)點(diǎn)的分布式超媒體分發(fā)協(xié)議,它整合了過(guò)去幾年最好的分布式系統(tǒng)思路宁昭,為所有人提供全球統(tǒng)的可尋址空間跌宛,包括Git、自證明文件系統(tǒng)SFS积仗、BitTorrent 和DHT,同時(shí)也被認(rèn)為是最有可能取代HTTP的新一代互聯(lián)網(wǎng)協(xié)議疆拘。

IPFS用基于內(nèi)容的尋址替代傳統(tǒng)的基于域名的尋址,用戶(hù)不需要關(guān)心服務(wù)器的位置寂曹,不用考慮文件存儲(chǔ)的名字和路徑哎迄。我們將一個(gè)文件放到IPFS節(jié)點(diǎn)中,將會(huì)得到基于其內(nèi)容計(jì)算出的唯一加密哈希值隆圆。 哈希值直接反映文件的內(nèi)容漱挚,哪怕只修改1比特,哈希值也會(huì)完全不同.當(dāng)IPFS被請(qǐng)求一個(gè)文件哈希時(shí)渺氧,它會(huì)使用一個(gè)分布式哈希表找到文件所在的節(jié)點(diǎn)旨涝,取回文件并驗(yàn)證文件數(shù)據(jù)。

IPFS是通用目的的基礎(chǔ)架構(gòu)阶女,基本沒(méi)有存儲(chǔ)上的限制颊糜。大文件會(huì)被切分成小的分塊,下載的時(shí)候可以從多個(gè)服務(wù)器同時(shí)獲取秃踩。IPFS的網(wǎng)絡(luò)是不固定的衬鱼,細(xì)粒度的,分布式的網(wǎng)絡(luò)憔杨,可以很好的適應(yīng)內(nèi)容分發(fā)網(wǎng)絡(luò)的要求鸟赫。這樣的設(shè)計(jì)可以很好的共享各類(lèi)數(shù)據(jù),包括圖像、視頻流抛蚤、分布式數(shù)據(jù)庫(kù)台谢、整個(gè)操作系統(tǒng)。

IPFS提供了一個(gè)友好的WEB訪問(wèn)接口岁经,用戶(hù)可通過(guò)[http://ipfs](http://ipfs/.io/hash獲取IPFS網(wǎng)絡(luò)中的內(nèi)容,也許在不久的將來(lái)朋沮,IPFS協(xié)議將會(huì)徹底替代傳統(tǒng)的HTTP協(xié)議。

大量數(shù)據(jù)上傳區(qū)塊鏈成本非常高缀壤,把數(shù)據(jù)上傳到IPFS樊拓,把哈希傳到區(qū)塊鏈拂盯,通過(guò)哈希到IPFS上進(jìn)行尋址乐疆。

IPFS的工作原理:

  • 每個(gè)文件及其中的所有塊都被賦予一個(gè)稱(chēng)為加密散列的唯一指紋。

  • IPFS通過(guò)網(wǎng)絡(luò)刪除重復(fù)具有相同哈希值的文件税手,通過(guò)計(jì)算是可以判斷哪些文件是冗余重復(fù)的图呢。并跟蹤每個(gè)文件的版本歷史記錄条篷。

  • 每個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)只存儲(chǔ)它感興趣的內(nèi)容,以及一些索引信息蛤织,有助于弄清楚誰(shuí)在存儲(chǔ)什么赴叹。

  • 查找文件時(shí),你通過(guò)文件的哈希值就可以在網(wǎng)絡(luò)查找到儲(chǔ)存改文件的節(jié)點(diǎn)指蚜,找到想要的文件稚瘾。

  • 使用稱(chēng)為IPNS(去中心化命名系統(tǒng)),每個(gè)文件都可以被協(xié)作命名為易讀的名字姚炕。通過(guò)搜索摊欠,就能很容易地找到想要查看的文件。

    從IPFS的介紹可以看出柱宦, IPFS設(shè)想的是讓所有的網(wǎng)絡(luò)終端節(jié)點(diǎn)不僅僅只充當(dāng) Browser或Client的角色些椒,其實(shí)人人都可以作為這個(gè)網(wǎng)絡(luò)的運(yùn)營(yíng)者,人人都可以是服務(wù)器掸刊。

“如果你把它(分布式賬本)加到IPFS里免糕,然后通過(guò)哈希算法把它錄入?yún)^(qū)塊里,那么你就可以通過(guò)IPFS直接在網(wǎng)上瀏覽交易以及文件忧侧。IPFS協(xié)議與區(qū)塊鏈技術(shù)結(jié)合是個(gè)“完美的婚姻”石窑。” ------Benet(IPFS創(chuàng)始人)

2. IPFS本地環(huán)境安裝

2.1下載ipfs壓縮包

百度搜索IPFS 蚓炬,點(diǎn)擊 try it

image.png

下載后松逊,解壓縮存檔文件,并將ipfs二進(jìn)制文件移動(dòng)到可執(zhí)行文件$PATH中的某個(gè)位置肯夏,使用install.sh腳本:

$ tar xvfz go-ipfs_v0.4.21_linux-amd64.tar.gz

$ cd go-ipfs

$ sudo ./install.sh

$ ipfs version

測(cè)試一下:

$ ipfs help
USAGE:
ipfs - Global p2p merkle-dag filesystem.

恭喜你!現(xiàn)在经宏,您的計(jì)算機(jī)上已經(jīng)安裝了一個(gè)可以工作的IPFS犀暑。


Installing with ipfs-update

ipfs-update是一個(gè)命令行工具,用于安裝和升級(jí)ipfs二進(jìn)制文件烁兰。

Getting ipfs-update

ipfs-update can be downloaded for your platform at: https://dist.ipfs.io/#ipfs-update

If you have a working Go environment (>=1.8), you can also install it with:

$ go get -u [github.com/ipfs/ipfs-update](http://github.com/ipfs/ipfs-update)

安裝ipfs的新版本或升級(jí)時(shí)耐亏,請(qǐng)確保使用最新版本的ipfs-update。

Installing ipfs with ipfs-update

ipfs-update版本列出所有可供下載的ipfs版本:

$ ipfs-update versions
v0.3.2
v0.3.4
v0.3.5
v0.3.6
v0.3.7
v0.3.8
v0.3.9
v0.3.10
v0.3.11
v0.4.0
v0.4.1
v0.4.2
v0.4.3
v0.4.4
v0.4.5
v0.4.6
v0.4.7-rc1

ipfs-update install latest 將安裝最新可用的版本:

$ ipfs-update install latest

fetching go-ipfs version v0.4.7-rc1
binary downloaded, verifying...
success!
stashing old binary
installing new binary to /home/hector/go/bin/ipfs
checking if repo migration is needed...
Installation complete!

請(qǐng)注意沪斟,最新的可用版本可能不穩(wěn)定(即表單中的候選版本vX.X.X-rcX)广辰。因此,建議指定要安裝的版本主之,例如:ipfs-update install v0.4.6轨域。


3. 如何在本地創(chuàng)建一個(gè)IPFS節(jié)點(diǎn)

文件夾存儲(chǔ)相關(guān)數(shù)據(jù)
通過(guò)節(jié)點(diǎn)連接的形式同步,將數(shù)據(jù)上傳到整個(gè)IPFS網(wǎng)絡(luò)杀餐。

cd ~/ 到主頁(yè)面

在ubuntu下查看隱藏的文件和文件夾

ls -a 可以查看到隱藏的文件

此外 ,進(jìn)入自己主目錄朱巨,按ctrl+h也能看見(jiàn)以點(diǎn)號(hào)開(kāi)頭的隱藏文件

ipfs init 節(jié)點(diǎn)創(chuàng)建成功

image.png

ls -a 這回可以看到ipfs文件

image.png

cd .ipfs

image.png

節(jié)點(diǎn)已經(jīng)創(chuàng)建成功史翘,默認(rèn)存儲(chǔ)空間是10G,

我們要添加數(shù)據(jù)的時(shí)候冀续,會(huì)先添加到本地的節(jié)點(diǎn)中琼讽,只有通過(guò)網(wǎng)絡(luò)同步之后,才會(huì)把數(shù)據(jù)同步到整個(gè)IPFS網(wǎng)絡(luò)洪唐,如果同步到IPFS網(wǎng)絡(luò)后钻蹬,就可以直接在公網(wǎng)查詢(xún)數(shù)據(jù)。如果沒(méi)有同步凭需,就只能在本地即本機(jī)查詢(xún)问欠。

查看本地默認(rèn)的存儲(chǔ)空間是多大,如何修改:

執(zhí)行完ipfs init命令后粒蜈,會(huì)在根目錄生成一個(gè).ipfs的文件夾存儲(chǔ)節(jié)點(diǎn)數(shù)據(jù)顺献。.ipfs節(jié)點(diǎn)默認(rèn)存儲(chǔ)空間為10個(gè)G。
如果你自己想修改節(jié)點(diǎn)默認(rèn)存儲(chǔ)空間枯怖,可打開(kāi)終端執(zhí)行下面的命令注整,還是在.ipfs下。

image.png
$ export EDITOR=/usr/bin/vim

$ ipfs config edit

本步驟出問(wèn)題是因?yàn)闆](méi)有安裝vim度硝,打開(kāi)一個(gè)新的terminal安裝vim:
'$ sudo apt install vim'
再重新執(zhí)行上面的兩個(gè)語(yǔ)句肿轨。

執(zhí)行完ipfs config edit命令后會(huì)打開(kāi)一個(gè)文件,在這個(gè)文件中找到下圖中繪制紅線的位置蕊程,將10GB修改成你自己想要的存儲(chǔ)空間椒袍。修改完畢,保存退出藻茂。(PS:輸入i可以開(kāi)始編輯槐沼,編譯完畢后按esc鍵曙蒸,再輸入:,再次輸入wq保存并且退出)岗钩。

image.png

如何區(qū)分本機(jī)節(jié)點(diǎn)和其他電腦的節(jié)點(diǎn):

ipfs id

可以查看ID纽窟,ID是電腦的唯一標(biāo)識(shí),用于標(biāo)識(shí)節(jié)點(diǎn)兼吓。

image.png
cd ..  切換回桌面

cd Desktop/

ls

mkdir 1124

cd 1124/

cat > file.txt

微信:liyc1215

Ctrl C退出

cat file.txt   查看當(dāng)前文件的內(nèi)容
image.png

如何將數(shù)據(jù)添加到本地的節(jié)點(diǎn)當(dāng)中

ipfs add file.txt

將數(shù)據(jù)添加到ipfs中會(huì)返回一個(gè)哈希

QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T file.txt

已經(jīng)往我們本地節(jié)點(diǎn)儲(chǔ)存了一份數(shù)據(jù)

數(shù)據(jù)的文件名就是這個(gè)哈希臂港,可以通過(guò)這個(gè)哈希找到這個(gè)文件的內(nèi)容。

驗(yàn)證:

ipfs cat + hash

ipfs cat QmbrevseVQKf1vsYMsxCscRf6D7S2dftYpHwxkYf94pc7T

返回當(dāng)前寫(xiě)入節(jié)點(diǎn)中的數(shù)據(jù)

image.png

vi file.txt

修改數(shù)據(jù)视搏,按i可以編輯审孽,寫(xiě)完后,按ESC鍵浑娜,:wq 保存并退出

ipfs add file.txt

產(chǎn)生新的哈希

added QmXjapcc9QbEPpN78JpabCpwszjitsAyZm6Y4UHHLcJk2y.txt

ipfs cat QmXjapcc9QbEPpN78JpabCpwszjitsAyZm6Y4UHHLcJk2y
image.png

若想外網(wǎng)也可以訪問(wèn)佑力,ipfs.io/ipfs/QmXjapcc9QbEPpN78JpabCpwszjitsAyZm6Y4UHHLcJk2y

就需要把數(shù)據(jù)同步到整個(gè)網(wǎng)絡(luò)當(dāng)中,現(xiàn)在只是存儲(chǔ)在本地中筋遭。

4.同步打颤、啟動(dòng)節(jié)點(diǎn)服務(wù)器

就可以將節(jié)點(diǎn)和其他節(jié)點(diǎn)進(jìn)行同步,依然在./1124下漓滔。

ipfs daemon

image.png

ipfs.io/ipfs/QmXjapcc9QbEPpN78JpabCpwszjitsAyZm6Y4UHHLcJk2y

需要耐心等待

5.跨域資源共享CORS配置

為了后續(xù)的開(kāi)發(fā)方便编饺,我們還需要對(duì)跨域資源共享( CORS )進(jìn)行配置,ctrl- c退出ipfs响驴,然后按照下面的步驟進(jìn)行跨域配置透且。

  • 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 config --json API.HTTPHeaders.Access-Control-Allow-Credentials '["true"]'

  • ipfs config --json API.HTTPHeaders.Access-Control-Allow-Headers '["Authorization"]'

  • ipfs config --json API.HTTPHeaders.Access-Control-Expose-Headers '["Location"]'

驗(yàn)證

  • 啟動(dòng)服務(wù)器

$ ipfs daemon

  • 新建終端執(zhí)行下面的命令

$ ipfs cat /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme

image.png

localhost:~ yuechunli$

瀏覽器輸入下面的網(wǎng)址
打開(kāi)http://localhost:5001/webui會(huì)看到一個(gè)漂亮的UI界面。

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末豁鲤,一起剝皮案震驚了整個(gè)濱河市秽誊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌琳骡,老刑警劉巖养距,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異日熬,居然都是意外死亡棍厌,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)竖席,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)耘纱,“玉大人,你說(shuō)我怎么就攤上這事毕荐∈觯” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵憎亚,是天一觀的道長(zhǎng)员寇。 經(jīng)常有香客問(wèn)我弄慰,道長(zhǎng),這世上最難降的妖魔是什么蝶锋? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任陆爽,我火速辦了婚禮,結(jié)果婚禮上扳缕,老公的妹妹穿的比我還像新娘慌闭。我一直安慰自己,他們只是感情好躯舔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布驴剔。 她就那樣靜靜地躺著,像睡著了一般粥庄。 火紅的嫁衣襯著肌膚如雪丧失。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,598評(píng)論 1 305
  • 那天惜互,我揣著相機(jī)與錄音布讹,去河邊找鬼。 笑死载佳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的臀栈。 我是一名探鬼主播蔫慧,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼权薯!你這毒婦竟也來(lái)了姑躲?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤盟蚣,失蹤者是張志新(化名)和其女友劉穎黍析,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體屎开,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阐枣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了奄抽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蔼两。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖逞度,靈堂內(nèi)的尸體忽然破棺而出额划,到底是詐尸還是另有隱情,我是刑警寧澤档泽,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布俊戳,位于F島的核電站揖赴,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏抑胎。R本人自食惡果不足惜燥滑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望圆恤。 院中可真熱鬧突倍,春花似錦、人聲如沸盆昙。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)淡喜。三九已至秕磷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間炼团,已是汗流浹背澎嚣。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瘟芝,地道東北人易桃。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像锌俱,于是被迫代替她去往敵國(guó)和親晤郑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355