【朋克智库】比特币详解1.0——区块链的萌芽
區(qū)塊鏈?zhǔn)强氨然ヂ?lián)網(wǎng)的偉大發(fā)明。
比特幣是區(qū)塊鏈?zhǔn)澜绲牡谝粋€(gè)殺手級(jí)應(yīng)用。比特幣之于區(qū)塊鏈,就好比當(dāng)年郵件之于互聯(lián)網(wǎng)。
要深入了解區(qū)塊鏈,第一站一定是比特幣。
不過在那之前,「朋克」先簡單介紹下區(qū)塊鏈?zhǔn)澜绲慕M成部分。
區(qū)塊鏈的世界里有各種鏈(Chain),就好比互聯(lián)網(wǎng)的世界里有各種網(wǎng)站。鏈又大致可以分成三種:公鏈、聯(lián)盟鏈、私有鏈。
公鏈?zhǔn)?strong>所有人都可以加入成為節(jié)點(diǎn)和參與記賬的鏈,聯(lián)盟鏈?zhǔn)侵挥?strong>聯(lián)盟內(nèi)的組織可以參與記賬的鏈,而私有鏈就是僅有一個(gè)組織自己進(jìn)行記賬的鏈。
公鏈之于區(qū)塊鏈,就好比操作系統(tǒng)對(duì)于電腦或手機(jī)。只不過,目前區(qū)塊鏈的水平大致等同于DOS系統(tǒng)對(duì)于電腦的階段。(但是,如果沒有DOS的鋪墊,哪來的windows系統(tǒng);沒有塞班的鋪墊,又哪來的Android和IOS呢。)
所以第一站,「朋克」先講一講區(qū)塊鏈?zhǔn)澜绲?strong>開山鼻祖,比特幣。
一、比特幣的由來
比特幣是在2008年,由一個(gè)化名為中本聰(SatoshiNakamoto)的人提出的一種數(shù)字貨幣。目前一枚比特幣的價(jià)格約為10000美元(2018年2月27日),比特幣總市值約為1750億美元。(「朋克」提醒各位小伙伴,比特幣的最小單位是0.00000001枚,所以千萬不要以為買比特幣必須一枚一枚的買)。
二、數(shù)字貨幣怎么理解?
簡單的理解,數(shù)字貨幣就是一種既不需要紙幣,也不需要金銀銅的貨幣,所有的貨幣都是以數(shù)字的形式存儲(chǔ)在網(wǎng)上。這個(gè)乍一聽似乎覺得非常難以理解,但是仔細(xì)想想,現(xiàn)在有多少人是經(jīng)常使用紙幣的呢?相信大多數(shù)小伙伴小額用支付寶微信,大額用銀行轉(zhuǎn)賬。所以從某種意義上來說,大家的銀行存款也都是一串?dāng)?shù)字而已。
那么比特幣(以及區(qū)塊鏈中的其它數(shù)字貨幣)與這種銀行數(shù)字存款最大的區(qū)別是什么呢?
銀行系統(tǒng)是由銀行作為中心化的機(jī)構(gòu),有著中心化的賬本,進(jìn)而控制所有的交易及記錄。比特幣則是一個(gè)沒有中心化機(jī)構(gòu)的支付系統(tǒng)。那可能大家會(huì)想,那這樣的話,誰來進(jìn)行記賬呢,誰又能保證交易的正確性呢?
三、分布式賬本
沒有中心化的賬本咋辦?
這個(gè)問題好解決。要是沒有一個(gè)中心化的機(jī)構(gòu)來記賬,那就大家一起記賬唄。所有人一起記賬,用去中心化的賬本代替了中心化的賬本,并且由于賬本是公開的,并且所有人都可以進(jìn)行記錄和驗(yàn)證,從而保證了賬本的可靠性。這也就是分布式記賬的理念。
四、早期分布式賬本面臨的問題
那在這個(gè)系統(tǒng)里誰來主導(dǎo)記賬(交易的記錄和確認(rèn))呢?這個(gè)問題其實(shí)困擾了分布式賬本發(fā)展非常多年。根據(jù)民主的觀念,好像大家的第一反應(yīng)都是,這有什么難的,輪流(或隨機(jī))進(jìn)行記賬不就行了嗎,要是萬一記賬有分歧,少數(shù)服從多數(shù)不就好了嗎,反正賬本是公開透明的。
乍一聽好像是這個(gè)道理。但是,互聯(lián)網(wǎng)有一句名言“隔著電腦,沒有人知道你是一條狗”,參與區(qū)塊鏈記賬的,是電腦(節(jié)點(diǎn))。分布式記賬可以實(shí)現(xiàn)節(jié)點(diǎn)之間平等,卻沒辦法實(shí)現(xiàn)人人平等。因?yàn)橐粋€(gè)人可以制造近乎無窮多個(gè)節(jié)點(diǎn)。要是按照輪流記賬的原則,壞人要是想搞亂賬本那可就太簡單了。
舉個(gè)栗子,假設(shè)有10個(gè)人,其中9個(gè)好人,1個(gè)壞人。9個(gè)好人每個(gè)人各有一個(gè)節(jié)點(diǎn),而1個(gè)壞人偷偷注冊(cè)了10個(gè)節(jié)點(diǎn)(因?yàn)檫@是在互聯(lián)網(wǎng)上,注冊(cè)節(jié)點(diǎn)的成本約等于0),這樣總共有19個(gè)節(jié)點(diǎn)。如果按照最簡單的輪流(或隨機(jī))進(jìn)行記賬,壞人有超過50%的概率可以獲得記賬權(quán),如果剩下9個(gè)好人節(jié)點(diǎn)對(duì)記賬有疑義了,因?yàn)閴娜丝刂屏?0個(gè)節(jié)點(diǎn),超過了總節(jié)點(diǎn)的一半,那他就可以強(qiáng)行把有問題的賬記錄下來并且讓別人必須要接受這個(gè)賬本。
看到這里大家應(yīng)該都明白了,因?yàn)樵诨ヂ?lián)網(wǎng)上創(chuàng)造節(jié)點(diǎn)的成本約等于零,所以壞人(攻擊者)可以用近乎于零的成本創(chuàng)造大量節(jié)點(diǎn),就可以擁有整個(gè)系統(tǒng)的話語權(quán)(這也就是俗稱的“女巫攻擊”)。
如果用輪流(或隨機(jī))進(jìn)行記賬的模式,核心的問題就是:創(chuàng)造節(jié)點(diǎn)的成本約等于零→贏得大量記賬權(quán)的成本約等于零→攻擊系統(tǒng)的成本約等于零。導(dǎo)致極易產(chǎn)生攻擊!!!
這個(gè)問題困擾了分布式賬本發(fā)展多年...
...直到中本聰橫空出世!
五、工作量證明(Proof of Work,挖礦)
中本聰?shù)乃悸泛芎唵?#xff0c;就是不能按照輪流(或隨機(jī))的模式進(jìn)行記賬,而是每一個(gè)節(jié)點(diǎn)必須要做一定的工作后才能贏得記賬權(quán),這也就是所謂的工作量證明(Proof of Work,簡稱PoW)。這樣,攻擊整個(gè)系統(tǒng)的成本,就會(huì)從基本為零的成本變?yōu)榉浅8叩某杀?#xff08;因?yàn)橐獔?zhí)行一定的工作)。
打個(gè)比方,比特幣的機(jī)制,會(huì)不斷的發(fā)布數(shù)學(xué)題目(SHA256加密)給所有節(jié)點(diǎn),整個(gè)數(shù)學(xué)題目唯一的解法就是枚舉法,每當(dāng)有節(jié)點(diǎn)找到正確的解,就會(huì)贏得記賬權(quán)。同時(shí)系統(tǒng)會(huì)生成下一個(gè)新的題目,當(dāng)有一個(gè)新的節(jié)點(diǎn)解出了新的題目后,記賬權(quán)就從之前的節(jié)點(diǎn)轉(zhuǎn)移到了新的節(jié)點(diǎn)。
整個(gè)過程會(huì)不斷的重復(fù),每一個(gè)新的節(jié)點(diǎn)開始記錄新的賬本,也就是比特幣中的區(qū)塊,賬本與賬本之間的銜接也就是區(qū)塊與區(qū)塊的銜接,也就形成了區(qū)塊鏈。(比特幣的機(jī)制會(huì)自動(dòng)調(diào)節(jié)解題難度,從而保證區(qū)塊與區(qū)塊的出塊間隔在10分鐘左右,這也就是比特幣的出塊速度。)整個(gè)過程中,主要依靠的是算力,算力越強(qiáng),就可以在同等時(shí)間驗(yàn)算更多的解,從而可以更快的找到正確的解。這樣,要攻擊這個(gè)系統(tǒng),就需要非常強(qiáng)的算力(一般來說認(rèn)為需要整個(gè)系統(tǒng)51%以上的算力),從而使比特幣的體系安全性非常高。
而為了鼓勵(lì)大家進(jìn)行記賬,一方面贏得記賬權(quán)節(jié)點(diǎn),可以獲得一次性的一定數(shù)量的比特幣獎(jiǎng)勵(lì),同時(shí)可以獲得記賬的交易手續(xù)費(fèi)。這也就是俗稱的挖礦。
六、個(gè)人財(cái)產(chǎn)的保護(hù)
那么講完了賬本和記賬的問題,對(duì)個(gè)人來說,比特幣又是如何保障個(gè)人財(cái)產(chǎn)的呢?
中本聰使用了公鑰密碼學(xué)來解決這個(gè)問題。公鑰密碼學(xué)的原理可以用這個(gè)簡單的類比來說明:小朋克一開始有兩個(gè)不同密碼和一個(gè)賬戶(地址),分別稱為公共密碼(公鑰)和私密密碼(私鑰)。通過私密密碼可以推導(dǎo)出公共密碼,通過公共密碼可以推導(dǎo)出賬戶地址,但是反過來是無法推導(dǎo)的。
這個(gè)公共密碼是所有人(節(jié)點(diǎn))都能看到,而私密密碼只有小朋克自己知道。每當(dāng)小朋克要發(fā)送交易,必須要用私密密碼才能操控賬戶,發(fā)送交易。而其他所有人可以通過公共密碼進(jìn)行交易的驗(yàn)證。
從數(shù)學(xué)原理上來說,是小朋克通過私密密碼把信息加密,然后把公共密碼和被加密的信息公布在網(wǎng)絡(luò)上。所有人都可以通過用公共密碼解密信息的方式來確認(rèn)這筆信息一定是由小朋克發(fā)送的,并且由于公共密碼不能用來加密信息,沒有人可以冒充小明克發(fā)送能由公共密碼解密的信息。
?
?
在比特幣的系統(tǒng)中,私鑰是一筆資產(chǎn)所有權(quán)的唯一證明。從某種意義上來說,比特幣通過密碼學(xué)原理真正的實(shí)現(xiàn)了人民對(duì)自己資產(chǎn)的完全控制。
七、Coin的機(jī)制
比特幣的總量是有上限的,總共是2100萬個(gè)比特幣。每個(gè)區(qū)塊獎(jiǎng)勵(lì)給礦工的比特幣數(shù)量約每4年減半一次,從最開始的50個(gè)比特幣到25個(gè)比特幣到目前的12.5個(gè)比特幣。后面還會(huì)降為6.25個(gè)、3.125個(gè)...... 預(yù)計(jì)到2140年,所有的比特幣將全部被挖出,出塊將沒有獎(jiǎng)勵(lì),礦工的收益全部來自于交易費(fèi)用。
比特幣最終是一種不會(huì)通貨膨脹的數(shù)字貨幣(當(dāng)然目前因?yàn)槿圆粩嘤谐鰤K獎(jiǎng)勵(lì)所以有輕微的通貨膨脹),并且由于不可避免的會(huì)有人遺失秘鑰或操作失誤導(dǎo)致比特幣無法找回,比特幣是一種輕微的通貨緊縮的貨幣。
這可能會(huì)造成因幣值會(huì)緩慢上升,導(dǎo)致大家更愿意持幣而不是將幣花出去的現(xiàn)象,降低比特幣的流動(dòng)性。當(dāng)然這是2140年才需要考慮的事情,之前一直會(huì)保持輕度的通貨膨脹。
八、智能合約
智能合約是區(qū)塊鏈?zhǔn)澜缋锓浅V匾臋C(jī)制。智能合約,通俗的來講,就是用代碼寫好合約(合同),從而保證合約一定會(huì)按照約定好的條件執(zhí)行。
這也是顛覆式的進(jìn)步。通過智能合約可以完美的解決交易雙方之間的信任問題。
In Code We Trust!
代碼是最值得信任的合同!
并且,應(yīng)用范圍不僅僅限于簡單的合約。比特幣可以實(shí)現(xiàn)編程,并且可以運(yùn)行去中心化的程序(decentralized-apps)。想象一下未來所有的程序都在區(qū)塊鏈上運(yùn)行,從而再也不用擔(dān)心各種信任問題。
聽起來非常美好吧!
可是,比特幣作為最早的可編程的數(shù)字貨幣,在實(shí)際應(yīng)用過程中,一方面由于比特幣的智能合約不是圖靈完備的(注:圖靈完備是指這種計(jì)算機(jī)語言理論上能寫出任何程序),因而只能支持非常基礎(chǔ)的操作;另一方面由于比特幣緩慢的出塊速度,導(dǎo)致合約的執(zhí)行和交互至少以10分鐘為單位,因此智能合約在比特幣內(nèi)應(yīng)用并不廣泛,反而在以太坊上大方光彩(之后的文章里「朋克」會(huì)詳細(xì)介紹)。
九、分叉及解決方案
可能大家會(huì)有一個(gè)疑問,萬一有兩個(gè)節(jié)點(diǎn)接近同時(shí)找到了正確的解,那到底是由誰來進(jìn)行記賬呢?
在這種情況下,兩個(gè)節(jié)點(diǎn)都會(huì)進(jìn)行記賬,也就會(huì)造成分叉。在這種情況下,其它節(jié)點(diǎn)會(huì)遵循最長鏈原則,即哪條鏈上有新的區(qū)塊產(chǎn)生,使得它的鏈更長,則就會(huì)在更長的鏈上繼續(xù)記賬。而被拋棄的區(qū)塊,一般被稱為孤塊。
上面說的這種情況雖然會(huì)產(chǎn)生分叉,但最終還是會(huì)在最長的鏈上繼續(xù)走下去,最終只有一條鏈長期存在。
但是有情況會(huì)產(chǎn)生硬分叉,也就是會(huì)永久的形成兩條鏈,并且之后的鏈與鏈之間,完全獨(dú)立。
這種情況發(fā)生在,當(dāng)部分節(jié)點(diǎn)修改共識(shí)規(guī)則,這些節(jié)點(diǎn)產(chǎn)生的新塊將被舊的節(jié)點(diǎn)判斷為非法,但是這些節(jié)點(diǎn)本身會(huì)在新的區(qū)塊上繼續(xù)發(fā)展下去,這樣就會(huì)形成硬分叉。例如比特幣現(xiàn)金(BCH)從比特幣(BTC)分叉時(shí),就是將區(qū)塊上限由1M提升至8M,那么舊的節(jié)點(diǎn)就認(rèn)為BCH節(jié)點(diǎn)新生成的區(qū)塊為非法,同時(shí)BCH也不認(rèn)可BTC節(jié)點(diǎn)形成的區(qū)塊,從而造成了硬分叉。另外,當(dāng)部分節(jié)點(diǎn)與原有的其它節(jié)點(diǎn)之間的網(wǎng)絡(luò)(主動(dòng)或被動(dòng)地)完全中斷之后,也有可能造成硬分叉。
十、惡意攻擊及解決方案
那么比特幣在什么時(shí)候會(huì)存在安全性問題?
?
?
?
?
首先需要注意的是,
惡意節(jié)點(diǎn)哪怕獲得了記賬權(quán),也無法發(fā)送錯(cuò)誤的交易!
否則,其它節(jié)點(diǎn)不會(huì)承認(rèn)它的記賬權(quán),而是繼續(xù)進(jìn)行計(jì)算爭奪這個(gè)區(qū)塊的記賬權(quán)。
因此,惡意節(jié)點(diǎn)能做的事情是,通過分叉的機(jī)制,否認(rèn)區(qū)塊內(nèi)已經(jīng)確認(rèn)的交易。通常意義上,我們認(rèn)為若能控制超過51%的比特幣算力,就獲得了這種否認(rèn)已被區(qū)塊打包的交易的能力。
假設(shè)惡意節(jié)點(diǎn)A控制了51%的算力,想否認(rèn)第N個(gè)塊中的某筆交易,它就修改它的比特幣節(jié)點(diǎn),拒絕承認(rèn)這個(gè)塊,重新從N-1個(gè)塊開始挖礦,并故意不打包這筆交易,強(qiáng)行開始產(chǎn)生分叉。因?yàn)锳占有的算力比網(wǎng)絡(luò)剩余的算力更多,A的分叉的出塊速度一定會(huì)比主鏈快。比特幣的共識(shí)是區(qū)塊高度最高的鏈為主鏈,因此A否認(rèn)別人交易的鏈將會(huì)成為主鏈。這樣,之前已經(jīng)獲得一個(gè)區(qū)塊確認(rèn)的交易也可以被否定。
不過,這里需要強(qiáng)調(diào)的一點(diǎn)是,惡意節(jié)點(diǎn)不能只修改鏈中間的一個(gè)區(qū)塊而不改變后續(xù)的區(qū)塊。舉個(gè)栗子,如果現(xiàn)在已經(jīng)有5個(gè)區(qū)塊,高度分別為1,2,3,4,5。如果惡意節(jié)點(diǎn)要修改高度為3的區(qū)塊中的一筆交易,那么它必須連帶的把區(qū)塊3之后的所有區(qū)塊全部都重新開始計(jì)算,而不是僅僅把區(qū)塊3重新替換。
這也被稱為區(qū)塊鏈不可篡改的特性。這是因?yàn)槊恳粋€(gè)區(qū)塊頭都有一段數(shù)據(jù),是上一個(gè)區(qū)塊頭的信息(例如區(qū)塊高度、產(chǎn)生時(shí)間等)加密而成的。只要改動(dòng)其中的一個(gè)區(qū)塊,后面的所有區(qū)塊頭包含的上一個(gè)區(qū)塊的加密信息就會(huì)無法對(duì)上。所以,如果要惡意攻擊的話,必須將后面的區(qū)塊全部重新挖出來。
正是基于這種不可篡改的特性,惡意攻擊方式并不是不能防范的,主要就是通過更多的節(jié)點(diǎn)確認(rèn)數(shù)來進(jìn)行防范。假設(shè)現(xiàn)在的塊高度為M,而惡意節(jié)點(diǎn)要修改的交易在N,則M-N(M-N的值又被稱為交易的確認(rèn)數(shù))越大,惡意分叉成功的時(shí)間也就越長,因?yàn)檎\實(shí)節(jié)點(diǎn)在M的高度進(jìn)行挖礦,而惡意分叉需要從N的高度重新挖,中間需要追趕M-N個(gè)高度。這也是為什么很多交易所要6個(gè)確認(rèn)后才會(huì)顯示余額,因?yàn)楫?dāng)6個(gè)確認(rèn)后,占有51%算力的惡意否認(rèn)交易理論上要超過20天才能成功分叉,這將給整個(gè)社區(qū)足夠的時(shí)間采取反制措施。
所以,即使占有網(wǎng)絡(luò)的絕大數(shù)算力也并不意味著就能為所欲為。
十一、小結(jié)
區(qū)塊鏈就這樣伴隨著比特幣的誕生,而萌芽。
雖然比特幣只是區(qū)塊鏈技術(shù)的應(yīng)用之一,但是沒有比特幣就沒有區(qū)塊鏈的誕生。比特幣是跨時(shí)代的產(chǎn)品,通過巧妙的設(shè)定(分布式賬本+工作量證明),形成了安全性非常高的共識(shí)機(jī)制,屬于區(qū)塊鏈1.0的代表公鏈。
這也是人類歷史上,第一次實(shí)現(xiàn)真正安全的去中心化的交易體系。
但是,不可否認(rèn)的是,目前比特幣的公鏈系統(tǒng)頂多算是電腦的DOS系統(tǒng)水平,還存在大量的問題和瓶頸。
那么比特幣具體有哪些問題,又該如何解決呢?
?
https://zhuanlan.zhihu.com/p/34075135?
總結(jié)
以上是生活随笔為你收集整理的【朋克智库】比特币详解1.0——区块链的萌芽的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 进程保活手段分析
- 下一篇: 【朋克智库】比特币详解2.0——比特币的