這是司馬特小分隊第11篇原創(chuàng)文章
最近幣圈真的火的一塌糊涂蹭秋,之前的比特幣瘋漲(總計7年瘋漲100余萬倍)裸弦、到現(xiàn)在周邊朋友同事人人都在談論代幣,甚至那批征戰(zhàn)股市多年的大媽們都已經(jīng)開始蠢蠢欲動入市了,看來2018年的最牛熱點非比特幣之流莫屬啊景鼠。
—小試牛刀之區(qū)塊鏈篇—
說到比特幣,不得不說區(qū)塊鏈,兩者什么關系呢铛漓?比特幣是區(qū)塊鏈技術的一種應用溯香。
那么區(qū)塊鏈技術是什么呢?我們可以把它理解成一種分布式賬本浓恶。賬本是用來記賬的玫坛,只不過它是一種電子賬本,需要服務器來記錄數(shù)據(jù)包晰。而分布式的概念其實IT行業(yè)一直都有湿镀,即去中心化,這里指由多個服務器節(jié)點完成記錄伐憾,而非某一個中心化(比如銀行勉痴、或者支付寶)平臺單獨記錄。所以簡單概括下:區(qū)塊鏈1.0是由多個服務器節(jié)點完成數(shù)據(jù)記錄的技術树肃。
目前與智能合約結合的區(qū)塊鏈2.0也是非常常見了蚀腿,比如以太坊。
智能合約又是啥扫外?舉個非常容易理解的例子售貨機:我放一美元進去,就會觸發(fā)讓我選商品的選項易茬,選擇以后售貨機的可樂就會掉下來缤骨,這就是智能合約鸠窗。一旦合約設定的某個條件被觸發(fā),就會執(zhí)行相應的動作驾讲。
而以太坊是一個能夠在區(qū)塊鏈上實現(xiàn)智能合約、開源的底層系統(tǒng)席赂,類似于計算機的操作系統(tǒng)吮铭,N多程序猿可以在上面編程開發(fā)應用。
沒有一個東西是莫名其妙出現(xiàn)的颅停,區(qū)塊鏈的出現(xiàn)也必然是為了解決某些問題谓晌。傳統(tǒng)的數(shù)據(jù)存儲一旦出現(xiàn)丟失、竊取癞揉、損壞會比較麻煩纸肉,因為數(shù)據(jù)都是個人單獨存儲的,很多甚至都沒有備份喊熟,而區(qū)塊鏈很好的解決了這個問題柏肪,因為哪怕你的數(shù)據(jù)丟了,其他所有人依然存儲著數(shù)據(jù)(包括你的數(shù)據(jù))芥牌,他們只要把數(shù)據(jù)同步給你就可以了烦味,所以媽媽再也不用擔心我了~
既然每個人都存儲著全網(wǎng)所有數(shù)據(jù),那么是不是就意味著我的賬戶上有多少錢別人也能看到壁拉?哎呀媽谬俄,這不是要被大家發(fā)現(xiàn)我“負二代”的身份了0匕小!7锸荨宿礁!
別慌,區(qū)塊鏈當然考慮到了這點蔬芥,他采用了哈希摘要的方式梆靖,也就是說別人只能看到一串字符串摘要(比如1234567ABC),但并不能拿到隱藏在背后的信息笔诵,比如“我在1月5日借了隔壁老王250元”返吻。哈希摘要是什么原理,且聽我后面分解乎婿。
那聰明的你又會問:我借了老王250元测僵,但是如果老王竄通樓上的小紅、小白谢翎、小綠等一眾小三一起造假記錄“我借了老王500元”捍靠,那可怎么辦?因為在中心化的管理模式下森逮,比如支付寶榨婆,他的造假成本是非常高的,理論上他也不可能會去造假褒侧。但是在沒有中心化機構的記賬模式下良风,如何保證記錄的信息是真實可靠的?而不是虛假偽造的闷供?
那是因為:每次交易數(shù)據(jù)都會傳給系統(tǒng)中的各個節(jié)點烟央,大家都會在自己的節(jié)點上進行記錄,如果有人偽造歪脏,而其他人按照正確的進行記錄疑俭,一旦超過50%的節(jié)點認為這個記錄不可靠,那么這個數(shù)據(jù)包包含的交易肯定有錯誤婿失,是不被認可的怠硼。篡改數(shù)據(jù)也是一樣的道理。
那么區(qū)塊鏈到底是怎么記賬的移怯?
假如有這樣一條交易信息:
區(qū)塊鏈通過哈希函數(shù)y=hash(x)算出哈希值香璃,這個過程就可以簡要的理解為記賬。其中第一頁賬本中的輸入值 x 包括(賬本序號舟误、記賬時間葡秒、交易記錄),相信大家應該都知道,這些都是記賬中的必要字段眯牧,缺一不可蹋岩。而第二頁賬本的輸入值 x 包括(上一頁的哈希值、賬本序號学少、記賬時間剪个、交易記錄)。算出的哈希值代表著一個區(qū)塊版确,就像你的身份證號碼代表著你一樣扣囊。
從中可以看出每個區(qū)塊都是互相聯(lián)系的,就像鏈子一樣一環(huán)扣著一環(huán)绒疗,這樣的區(qū)塊鏈就構成了一個便于驗證(只要驗證最后一個區(qū)塊的Hash值就相當于驗證了整個賬本)侵歇,不可更改(任何一個交易信息的更改,會讓所有之后的區(qū)塊的Hash值發(fā)生變化吓蘑,這樣在驗證時就無法通過)的總賬本惕虑。所以看到大家是不是對整個區(qū)塊鏈概念已經(jīng)豁然開朗了~
—最火應用比特幣基礎篇—
其實比特幣是早于區(qū)塊鏈被大家所知曉的,就像大家知道了蘋果手機磨镶,用起來后才開始了解蘋果系統(tǒng)非常好用一樣溃蔫,正因為比特幣的巨大市場,很多人開始關注其中的本質——區(qū)塊鏈技術琳猫,并將其應用在其他領域酒唉。作為目前最火的應用,比特幣到底和區(qū)塊鏈有什么關系呢沸移?
我們前面已經(jīng)講過:
區(qū)塊是包含了一定時間內(nèi)若干筆交易數(shù)據(jù)及時間戳的數(shù)據(jù)塊
那么以比特幣為例:
1、?比特幣的本質是什么侄榴?它和區(qū)塊的關系雹锣?
2、比特幣系統(tǒng)中癞蚕,區(qū)塊記錄了哪些信息蕊爵?
3、?怎么生成區(qū)塊桦山?
4攒射、?怎么鏈下去?
5恒水、?誰來記錄這些數(shù)據(jù)呢会放?
6、如何確認區(qū)塊的有效性钉凌?
7咧最、?為什么會形成分叉?
8、區(qū)塊鏈為什么不可篡改矢沿?
接下來跟著馬特的思路滥搭,我們逐步揭開事件的真相:
1、比特幣的本質是什么捣鲸?它和區(qū)塊的關系瑟匆?
比特幣的本質是一種虛擬幣,他其實并沒有和現(xiàn)實中的任何一個實體幣有關系栽惶。馬特依然給大家舉個通俗易懂的例子愁溜,像支付寶余額,他其實代表著是你在支付寶存的錢媒役,這個錢是可以以紙幣的形式取出來的祝谚,是以實體幣作為背書的,所以他是有價值的酣衷。但是比特幣并沒有以實體幣或是某種實物作為背書交惯,或者說標的,理論上來講他并沒有價值穿仪。
它和區(qū)塊啥關系席爽?
區(qū)塊只是記錄了比特幣交易的數(shù)據(jù),當然區(qū)塊中還包含其他信息啊片,只是最重要的就是比特幣的交易信息~
2只锻、比特幣系統(tǒng)中,區(qū)塊記錄了哪些信息紫谷?
簡單來講齐饮,區(qū)塊有一個區(qū)塊頭,有一個區(qū)塊體
我們簡單介紹下:
2.1笤昨、哈希值前面講過是類似于a8fdc205a9f19cc1c7507a60c4f01b13d11d7fd0(十六進制)這樣一串字符串祖驱,轉成二進制就是 256 位。
哈希值可以理解為一個區(qū)塊的標識瞒窒,所以每個區(qū)塊的哈希值是不一樣的捺僻。
比特幣中的區(qū)塊哈希值大概是這么算出來的(原諒我也不知道具體的函數(shù)公式是怎么樣的):
h0 = Hash(A || Nonce0)
h1 = Hash(B || h0 || Nonce1)
從一個簡易版的公式可以看出下一個區(qū)塊的哈希值h1是根據(jù)上一個區(qū)塊的哈希值h0、當前區(qū)塊的待確認的交易信息B崇裁、Nonce值Nonce1(隨機數(shù))綜合計算得出的匕坯。可以看到和前面區(qū)塊鏈中的介紹的略有不同,但是本質一樣拔稳。
另外我們需要了解哈希函數(shù)有幾個特點:
同樣的原始信息用同一個哈希函數(shù)總能得到相同的摘要信息
原始信息任何微小的變化都會哈希出面目全非的摘要信息
從摘要信息無法逆向推算出原始信息
2.2葛峻、難度目標是什么,為什么會有難度目標巴比?
因為在比特幣的世界里是這樣設計的:
每個節(jié)點在計算hash值時泞歉,如果所計算出的hash值小于目標值逼侦,則這個節(jié)點才可以宣布解出謎題,打包出區(qū)塊腰耙,并向全網(wǎng)傳輸榛丢。通過這個計算,系統(tǒng)將區(qū)塊生成速度限定為約10分鐘/塊挺庞。但是隨著算力(計算的節(jié)點)增加晰赞,區(qū)塊生成會越來越快,假設上周區(qū)塊平均生成速度為9分鐘选侨,那么本周算法難度(目標值會相應減小來增加難度)會上浮10%掖鱼,以確保區(qū)塊生成速度平均為10分鐘/塊,說白了就是動態(tài)調整計算難度來保持恒定的區(qū)塊生成速度援制。
此外那個Nonce值隨機數(shù)其實就是計算中不停的枚舉戏挡、試錯,最后找到那個滿足目標值的Nonce值晨仑。
區(qū)塊體:一個區(qū)塊第一個交易規(guī)定為coinbase交易褐墅。
普通交易:
這里有很多數(shù)據(jù)、參數(shù)洪己,看不懂沒關系妥凳,后面都會講到,大家只要知道區(qū)塊體是記錄交易數(shù)據(jù)為主的就行~
那么這些表格里要求的數(shù)據(jù)是怎么產(chǎn)生的答捕?
比如A把10個比特幣轉給了B逝钥,那么這就是一筆交易,就會記錄下來這筆交易的所有相關數(shù)據(jù)拱镐。聰明的小伙伴們可能會問:那如果沒有交易呢艘款?那就沒有交易唄,那就不存交易信息沃琅,但是依然會生成區(qū)塊哗咆。因為比特幣系統(tǒng)中大概設定的是每10分鐘左右一定會生成一個區(qū)塊。
3阵难、區(qū)塊是怎么生成的?
前面也講了芒填,區(qū)塊其實就是一串字符串呜叫,他是根據(jù)一段時間內(nèi)的交易數(shù)據(jù)、時間戳殿衰、哈希值朱庆、難度、Nonce值等組合而成并記錄到節(jié)點上(也即某一臺服務器中)闷祥。
4娱颊、誰來記錄這些數(shù)據(jù)呢傲诵?
答案是礦工,你可以理解為一個節(jié)點或一個人箱硕,礦工來幫你在他的節(jié)點進行區(qū)塊的記錄拴竹。
那它憑什么幫你?
因為他有收益呀剧罩,區(qū)塊鏈的創(chuàng)始人在創(chuàng)造它的時候就規(guī)定了:礦工通過生成區(qū)塊可以獲得一定的比特幣獎勵栓拜。假如某一天比特幣全部發(fā)完了,那么就會用交易傭金惠昔、或者叫手續(xù)費來獎勵礦工幕与。所以理論上來說,只要收益高于成本镇防,就會有人愿意幫忙記賬啦鸣,反過來說只有礦工不斷的努力工作,整個區(qū)塊鏈系統(tǒng)才能不斷延續(xù)下去来氧。
5诫给、區(qū)塊怎么鏈下去?
每生成一個區(qū)塊時饲漾,都必須以上一個所有節(jié)點公認的區(qū)塊作為父區(qū)塊蝙搔,本區(qū)塊中也必須帶上父區(qū)塊的哈希值,確保只有一條主鏈考传。那么問題又來了吃型,怎么讓一個區(qū)塊大家都認可?這到底是怎么實現(xiàn)的僚楞?
其實很簡單勤晚,在這樣一個全網(wǎng)數(shù)據(jù)公開的環(huán)境中,每個礦工都在算一個目標值以下的哈希值泉褐,如果A算出來了赐写,他會馬上播報給全網(wǎng),如果A是全網(wǎng)第一個算出來的膜赃,那么毫無疑問挺邀,大家都認可他作為本區(qū)塊,其他礦工自動放棄跳座,開始以他為父區(qū)塊進行下一個區(qū)塊的計算端铛。
但是聰明的你又會問:如果同時有多人在同一個時間算出來呢?或者說廣播傳到B那里經(jīng)過了一定時間疲眷,B在此之前已經(jīng)生成了一個區(qū)塊禾蚕,那到底B是以A傳過來的區(qū)塊為準還是以自己的為準呢?
這就引發(fā)出了另一個問題:如何確認區(qū)塊的有效性狂丝?
6换淆、如何確認區(qū)塊的有效性哗总?
系統(tǒng)考慮了這個問題并規(guī)定了一個策略:那就是6次確認,即包含交易數(shù)據(jù)的區(qū)塊鏈已經(jīng)創(chuàng)建了6個區(qū)塊以后倍试,這筆交易(第一個區(qū)塊中記錄的這幣交易)獲得了6次確認讯屈,那么這個區(qū)塊被廢棄的可能性就無限趨于0了(別問我為什么,中老濕通過科學的驗證后得出的)易猫,即這筆交易被記錄且不可篡改耻煤。
7、?為什么會形成分叉准颓?
回到5中提到的哈蝇,區(qū)塊生成后,會同步傳輸給其他節(jié)點攘已。如果在傳輸過程中炮赦,其他還未被同步的節(jié)點同時生成了一個區(qū)塊,那么一條主鏈就會形成分叉样勃。分叉里又有一種情況叫雙花吠勘。
什么是雙花?假設A只有5比特幣峡眶,A將5比特幣交易給B剧防,在交易確認前,又將5比特幣交易給C辫樱,那么將有礦工決定這5比特幣最終交易給了誰峭拘。如果此時兩個礦工同時生成了區(qū)塊,在分叉的兩條線路中狮暑,其中一條給了B鸡挠,一條給了C,這就形成了雙花搬男。
形成雙花怎么辦拣展?比特幣的處理方法是在這兩條分叉的區(qū)塊鏈下,由礦工繼續(xù)進行挖礦行為缔逛。當多條鏈路同步給某個節(jié)點后备埃,節(jié)點會選擇鏈路更長的一條,交易給B的區(qū)塊后已經(jīng)創(chuàng)建了3個區(qū)塊褐奴,交易給C的區(qū)塊后只創(chuàng)建了2個區(qū)塊按脚,那么此時,節(jié)點廢棄第二條鏈路歉糜,選擇第一條乘寒。當所有節(jié)點做出選擇時望众,全網(wǎng)的賬單就統(tǒng)一了匪补。
關于分叉伞辛,我們再做個詳細的解釋方便大家理解:
比如某個區(qū)塊h1生成后,A節(jié)點根據(jù)h1在10分鐘的時候生成h2夯缺,然后開始向全網(wǎng)傳播蚤氏,然后傳了2分鐘(事實上并沒有那么久,因為一個區(qū)塊也就1M踊兜,按照100M的網(wǎng)速花不了幾秒)竿滨,也就是在12分鐘的時候傳到B節(jié)點,但是B節(jié)點在11分鐘的時候生成h3捏境,那么這個時候到底是以h2還是h3為下一個區(qū)塊呢于游?我們暫且假設一部分人優(yōu)先聽到h1,包括A垫言、A1贰剥、A2、A3.筷频。蚌成。。凛捏。A9共10個節(jié)點担忧,另一部分優(yōu)先聽到h2,包括B坯癣、B1瓶盛、B2、B3坡锡、蓬网。。鹉勒。B9共10個節(jié)點帆锋;然后大家開始瘋狂計算下個節(jié)點,此時A3最快計算出h3禽额,于是廣而告之锯厢,這時除非B~B9在聽到h3之前算出h4,否則只能以h3作為下一個區(qū)塊脯倒,然而h3并不是基于h2算出來的(事實上是基于h1算出來的)实辑,數(shù)據(jù)對不上了,于是B~B9啪啪啪打臉藻丢,認h3為真正的下一個區(qū)塊剪撬,同時h2的分支則被無情拋棄,大家開始以h3作為父區(qū)塊計算下一個區(qū)塊了悠反。
這里聰明的小伙伴可能已經(jīng)考慮到了:
如果區(qū)塊生成速度過快残黑,那么出現(xiàn)分叉的可能性就會很高馍佑,假設區(qū)塊鏈中有1000個節(jié)點,如果有兩個分叉梨水,則平均每個分叉有500個節(jié)點拭荤,此時只需要超過250個節(jié)點,就可以控制其中一條分叉(51%攻擊)疫诽。區(qū)塊生成速度越快舅世,出現(xiàn)分叉的可能性越高,風險也就越高奇徒。因此綜合考慮系統(tǒng)控制10分鐘左右生成一個新區(qū)塊雏亚。如果全網(wǎng)的區(qū)塊節(jié)點越來越多時,分叉的可能性也更高摩钙。
8评凝、區(qū)塊鏈為什么不可篡改?
我們做個假設:假如區(qū)塊內(nèi)的數(shù)據(jù)被該節(jié)點篡改腺律,那么他對應的哈希值就會變化(生成新的分支)奕短,新的分支區(qū)塊會播報給所有節(jié)點,此時如果其他節(jié)點上已經(jīng)記錄的區(qū)塊數(shù)大于播報給他的新分支的節(jié)點數(shù)(或者說所有區(qū)塊的哈希值與傳過來的不匹配)匀钧,顯然大家都會選擇鏈路更長的一條翎碑,因此新分支不被承認,自動廢棄之斯。(請認真思考這段話)
那么此時問題又來了日杈,如果超過50%的節(jié)點都竄通起來一起篡改呢?話說真有這種算力的團伙佑刷,只能說這個系統(tǒng)已經(jīng)被操控了莉擒,沒救了,大家自然會放棄它瘫絮。而且按照比特幣現(xiàn)在的節(jié)點數(shù)來看涨冀,要掌控50%以上的節(jié)點那基本上是富可敵國,哦不麦萤,富克敵好幾國了鹿鳖,基本可能性為0!
總結:
看了上述的介紹壮莹,相信大家應該已經(jīng)了解比特幣的基本運作邏輯了翅帜,目前其他代幣也基本上是這樣一套原理,那么我們來總結下他的優(yōu)缺點:
缺點:
1命满、缺乏時效性:交易確認時間長涝滴。
2、安全性問題:比特幣發(fā)展至今,已經(jīng)擁有足夠多的節(jié)點以防止數(shù)據(jù)被篡改歼疮,而市面上新發(fā)行的各種貨幣僵娃,仍會因為節(jié)點數(shù)量過少而缺乏安全性。
3腋妙、能源消耗大:全球那么多節(jié)點同時在計算一件事件,重復勞動下所消耗的能源極大讯榕,并且最終在區(qū)塊鏈的某個位置骤素,只有一個節(jié)點計算出區(qū)塊是真正有效的,也就是說其他節(jié)點計算中所消耗的能源全部無效愚屁,造成了極大的能源浪費济竹。
4、難以最終做到去中心化:前面說生成區(qū)塊需要做大量的計算霎槐,那么擁有更多算力的人更有可能在這個過程中獲得礦工獎勵送浊。按照20%的人掌握全世界80%的資源這個規(guī)則,最終比特幣80%的節(jié)點將最終掌握在20%的機構或人手中丘跌,這樣去中心化的意義就不存在了袭景。只能說是多中心化。
優(yōu)點當然是去中心化的數(shù)據(jù)公開闭树、不可篡改性等...
對于區(qū)塊鏈和比特幣的基本原理介紹基本到這里就差不多了耸棒,你全部看懂并理解了嗎?如果還有疑問报辱,可以留言問我們与殃,我們將認真回復每個問題。
下一篇的主題將是“比特幣進階”和“聯(lián)盟鏈碍现、側鏈”等一系列延伸產(chǎn)物的深度解析幅疼。
歡迎大家關注“司馬特小分隊”公號,不錯過進階篇昼接,才能真正了解區(qū)塊鏈和比特幣爽篷。
歡迎大家關注公眾號“司馬特小分隊”,后續(xù)有更多區(qū)塊鏈的干貨慢睡!