定義:去中心化的分布式?賬本數(shù)據(jù)庫
比特幣區(qū)塊鏈的原理:
block(區(qū)塊、賬簿):記錄交易單的數(shù)據(jù)單元叫做block,一個block上回記錄很多單交易囚枪。
每個block只記錄比特幣全網(wǎng)10分鐘內(nèi)的交易信息发笔,大約每10分鐘產(chǎn)生一個新的block。
比特幣區(qū)塊鏈原理——挖礦
block由那些最誠實最勤勞的節(jié)點產(chǎn)生吝羞,中本聰引入了工作量證明機制(POW)兰伤。
疑問:區(qū)塊鏈金融中有沒有挖礦的概念
高度:區(qū)塊是每十分鐘的一個交易記錄打包在塊里,每個塊都有一個ID钧排,在區(qū)塊鏈中叫高度敦腔,以及交易紀(jì)錄和上一個塊的ID,每個區(qū)塊連起來形成鏈恨溜。
疑問:區(qū)塊鏈金融中高度也是10分鐘產(chǎn)生一次嗎
新產(chǎn)生的區(qū)塊需要快速廣播出去符衔,其他節(jié)點進(jìn)行對其驗證,以防造假糟袁,每個區(qū)塊存著上一個區(qū)塊的hash值判族,可以溯源到源頭,只有經(jīng)過驗證后才最終獲得區(qū)塊的打包權(quán)项戴。
每個塊的哈希是不一樣的形帮,10分鐘的交易量最多4200次,超過這個數(shù)字的就無法打包周叮,因此不同礦工挑手續(xù)費高的進(jìn)行打包辩撑。出現(xiàn)分叉后又定義一套規(guī)則,并不馬上確認(rèn)哪個區(qū)塊不合理则吟,但兩個塊總有匯合到一起的時候槐臀,最終以鏈長的區(qū)塊進(jìn)行確認(rèn),鏈短的將被自動拋棄氓仲。
比特幣存儲——錢包地址:
去中心化:
區(qū)塊鏈基礎(chǔ)架構(gòu):
一個區(qū)塊包含以下三部分:交易信息水慨、前一個區(qū)塊形成的哈希散列、隨機數(shù)敬扛。
從技術(shù)上來講晰洒,區(qū)塊是一種記錄交易的數(shù)據(jù)結(jié)構(gòu),反映了一筆交易的資金流向啥箭。
區(qū)塊鏈本質(zhì)上是一個去中心化的巨大賬本數(shù)據(jù)庫谍珊,作為比特幣的底層技術(shù),區(qū)塊鏈?zhǔn)怯梢淮褂妹艽a學(xué)相關(guān)聯(lián)所產(chǎn)生的數(shù)據(jù)塊組成急侥,每一個數(shù)據(jù)塊中包含了多次比特幣網(wǎng)絡(luò)有效確認(rèn)(一次有效交易檢驗被稱為一次確認(rèn))的信息砌滞。隨著交易不斷產(chǎn)生侮邀,礦工不斷驗證交易創(chuàng)造新的區(qū)塊來記錄最新的交易,這個帳本會一直增長延長贝润。這些區(qū)塊按照時間順序線性補充到原有的區(qū)塊鏈上绊茧。每一個節(jié)點(每臺通過錢包的客戶端口連接到區(qū)塊鏈網(wǎng)絡(luò)上的電腦)都有一份完整的已有區(qū)塊鏈備份記錄,而這些都是通過進(jìn)行數(shù)據(jù)驗證算法解密的礦工網(wǎng)絡(luò)自動完成打掘。區(qū)塊鏈上保留有所有關(guān)于每個節(jié)點和節(jié)點上比特幣余額的信息华畏,這些信息也被記錄在完整的區(qū)塊鏈上。公共式區(qū)塊鏈帳本完全對外公開尊蚁,這意味著區(qū)塊鏈信息可以通過特定地址在區(qū)塊鏈瀏覽器上(例如www.blockchain.info)進(jìn)行查詢亡笑。
新區(qū)塊的生成將獎勵礦工新的電子貨幣,還可以通過設(shè)置交易費用來獎勵挖礦這種提供算力的行為横朋,系統(tǒng)通過這樣的方式完成電子貨幣的發(fā)行仑乌,這也讓礦工有利可圖,成為了礦工挖礦的主要動機琴锭。
每個節(jié)點接收到交易信息以后绝骚,生成新的區(qū)塊并計算該區(qū)塊的隨機數(shù)答案,最快得到答案的節(jié)點將促成這筆交易的實現(xiàn)祠够,完成交易的區(qū)塊記錄压汪,并將該區(qū)塊廣播至所有節(jié)點。同時該節(jié)點將有可能獲得一枚新的電子貨幣作為獎勵古瓤。由于其過程很像礦工挖礦止剖,因此節(jié)點提供算力的過程也叫作挖礦。通過挖礦落君,可以強制性保證塊鏈中的數(shù)據(jù)按時間順序存儲穿香,保持比特幣網(wǎng)絡(luò)的中立性,且允許比特幣網(wǎng)絡(luò)上不同的計算機對系統(tǒng)狀態(tài)達(dá)成一致绎速。
可靠數(shù)據(jù)庫(Reliable Database):
系統(tǒng)中每一個節(jié)點都擁有最新的完整數(shù)據(jù)庫拷貝皮获,修改單個節(jié)點的數(shù)據(jù)庫是無效的,因為系統(tǒng)會自動比較纹冤,認(rèn)為最多次出現(xiàn)的相同數(shù)據(jù)記錄為真洒宝。
上圖為簡化起見,僅展示了6處保留數(shù)據(jù)庫副本的節(jié)點萌京;在3個交易序列中雁歌,前2個交易的數(shù)據(jù)和簽名得到了所有6個節(jié)點的驗證,但第三個交易的位置5沒有通過驗證知残,將被其它節(jié)點的“一致意見”更改靠瞎。
哈希散列
是密碼學(xué)里的經(jīng)典技術(shù),可以用來驗證有沒有人篡改數(shù)據(jù)內(nèi)容。
這時候我們再看對區(qū)塊鏈的原始定義就能理解了:區(qū)塊鏈?zhǔn)且环N分布式數(shù)據(jù)庫乏盐,是一串使用密碼學(xué)方法相關(guān)聯(lián)產(chǎn)生的數(shù)據(jù)塊佳窑,每個數(shù)據(jù)塊都包含了一次網(wǎng)絡(luò)交易信息,用于驗證其信息的有效性和生成下一個區(qū)塊父能。
問:什么是區(qū)塊鏈华嘹?
答:區(qū)塊鏈(Blockchain)是指通過去中心化和去信任的方式集體維護(hù)一個可靠數(shù)據(jù)庫的技術(shù)方案。通俗一點說法竞,區(qū)塊鏈技術(shù)就指一種全民參與記賬的方式。所有的系統(tǒng)背后都有一個數(shù)據(jù)庫强挫,你可以把數(shù)據(jù)庫看成是就是一個大賬本岔霸。那么誰來記這個賬本就變得很重要。目前就是誰的系統(tǒng)誰來記賬俯渤,微信的賬本就是騰訊在記呆细,淘寶的賬本就是阿里在記。但現(xiàn)在區(qū)塊鏈系統(tǒng)中八匠,系統(tǒng)中的每個人都可以有機會參與記賬絮爷。在一定時間段內(nèi)如果有任何數(shù)據(jù)變化,系統(tǒng)中每個人都可以來進(jìn)行記賬梨树,系統(tǒng)會評判這段時間內(nèi)記賬最快最好的人坑夯,把他記錄的內(nèi)容寫到賬本,并將這段時間內(nèi)賬本內(nèi)容發(fā)給系統(tǒng)內(nèi)所有的其他人進(jìn)行備份抡四。這樣系統(tǒng)中的每個人都了一本完整的賬本柜蜈。這種方式,我們就稱它為區(qū)塊鏈技術(shù)指巡。
問:什么是比特幣說的“挖礦”淑履?
答:比特幣中的“挖礦”實際上就是記賬的過程,比特幣的運算采用了一種稱為“工作量證明(Proof of Work藻雪,PoW)”的機制秘噪,系統(tǒng)為了找出誰有更強大的計算能力,每次會出一道數(shù)學(xué)題勉耀,只有最快解出這道題目的計算機才能進(jìn)行記賬指煎。而搶到記賬權(quán)的計算機會獲得25個比特幣的獎勵。通常把這個行為稱為“挖礦”便斥,把獲得的比特幣視為挖礦成功獲得的獎勵贯要。
問:所有的區(qū)塊鏈都需要挖礦嗎?
答:并非所有的區(qū)塊鏈項目都會采用類似于比特幣這樣的“工作量證明”方式椭住,這更多出現(xiàn)在早期的區(qū)塊鏈項目中崇渗。如果采取其他的證明機制,如“權(quán)益證明(Proof of Stake,PoS)”宅广、“股份授權(quán)證明機制(DPoS葫掉,Delegate Proof of Stake)”都是不需要采取這樣的挖礦方式。
問:什么是公有鏈跟狱?什么是私有鏈俭厚?什么是聯(lián)盟鏈?
答:公有鏈?zhǔn)侨魏喂?jié)點都是向任何人開放的驶臊,每個人都可以參與到這個區(qū)塊鏈中參與計算挪挤,而且任何人都可以下載獲得完整區(qū)塊鏈數(shù)據(jù)(全部賬本)。但是有些區(qū)塊鏈的應(yīng)用場景下关翎,并不希望這個系統(tǒng)任何人都可以參與扛门,任何人都可以查看所有數(shù)據(jù),只有被許可的節(jié)點才可以參與并且查看所有數(shù)據(jù)纵寝。那么這種區(qū)塊鏈結(jié)構(gòu)我們稱為私有鏈论寨。
聯(lián)盟鏈?zhǔn)侵竻⑴c每個節(jié)點的權(quán)限都完全對等,大家在不需要完全互信的情況下就可以實現(xiàn)數(shù)據(jù)的可信交換爽茴,R3組成的銀行區(qū)塊鏈聯(lián)盟要構(gòu)建的就是典型的聯(lián)盟鏈葬凳。
但是隨著區(qū)塊鏈技術(shù)的快速發(fā)展,不排除以后公有鏈和私有鏈的界限會變得比較模糊室奏。因為每個節(jié)點的可以有較為復(fù)雜的讀寫權(quán)限火焰,也許有部分權(quán)限的節(jié)點會向所有人開發(fā),而部分記賬或者核心權(quán)限的節(jié)點只能向許可的節(jié)點開放胧沫,那就會不再是純粹的公有鏈或者私有鏈荐健。
什么是“分叉”?
每一個子區(qū)塊都只有一個父區(qū)塊琳袄,但一個父區(qū)塊可以暫時擁有很多子區(qū)塊江场,這種情況被稱為區(qū)塊鏈分叉。這種只有當(dāng)不同的礦工在同一時刻發(fā)現(xiàn)不同的區(qū)塊時才會發(fā)生窖逗。這時解決的方法就是址否,每一個節(jié)點總是選擇并嘗試延長擁有最大工作量證明(最長或者最大難度)的區(qū)塊鏈。
舉個例子:
我們現(xiàn)在有一個區(qū)塊鏈-藍(lán)
(圖片來自《精通比特幣》碎紊,可愛的小姑娘來自我)
位于X地區(qū)的礦工與位于Y地區(qū)的礦工同時發(fā)現(xiàn)了兩個區(qū)塊佑附。
我們假設(shè):
礦工熊貓君A發(fā)現(xiàn)區(qū)塊-紅,
礦工兔子君B發(fā)現(xiàn)區(qū)塊-綠仗考。
當(dāng)熊貓君A,兔子君B節(jié)點分別在比特幣網(wǎng)絡(luò)廣播的時候音同,部分節(jié)點會先收到熊貓君A的廣播,部分會先收到兔子君B的廣播秃嗜,然后分為兩派陣營的節(jié)點會分別開始以他們接收到的區(qū)塊作為父區(qū)塊权均,進(jìn)行深一步的挖礦活動顿膨。(這里節(jié)點的地理意義指的是網(wǎng)絡(luò)拓?fù)渖系奈恢茫钦鎸嵉牡乩砦恢眠瓷蕖#?/p>
(圖片來自《精通比特幣》恋沃,可愛的小姑娘來自我)
就在大家如火如荼地緊張解題的關(guān)鍵時刻,一個接收到兔子君B所廣播的節(jié)點的兔子君C必指,優(yōu)先發(fā)現(xiàn)了下一個區(qū)塊-粉囊咏,也就是說綠色陣營的小兔子們的區(qū)塊鏈可以進(jìn)行下一步延伸,就會比紅色陣營的小熊貓們的長度長塔橡,紅色陣營小熊貓遺憾出局梅割。這樣的話分叉問題就得到了解決。
這里我們需要提到一個名詞葛家,“共識攻擊”户辞。一個很著名的場景就是“51%攻擊”。如果一群礦工擁有了全網(wǎng)51%的算力惦银,那么只要他們聯(lián)合起來就可以打擊整個比特幣網(wǎng)絡(luò)。他們可以認(rèn)為地去制造一個分叉的區(qū)塊鏈實現(xiàn)雙重支付末誓,拿我們上文的例子舉例扯俱,攻擊者在區(qū)塊-紅中進(jìn)行過了交易,結(jié)果他強行制造出區(qū)塊-綠喇澡,并且區(qū)塊-綠中將原本的交易替換成另一筆交易(把原本應(yīng)該給賣家的錢打入自己同伙的錢包中)迅栅,然后在區(qū)塊綠的基礎(chǔ)上再計算一個區(qū)塊-粉,這樣包含偽造的區(qū)塊的區(qū)塊鏈就比包含真實交易的區(qū)塊紅高出一個高度晴玖,此時读存,包含雙重支付的惡意區(qū)塊鏈將取代真實區(qū)塊鏈,從而實現(xiàn)詐騙呕屎。51%的概念并不是說攻擊者需要全網(wǎng)51%的算力才能進(jìn)行攻擊让簿,理論上來說不到51%也是可以實現(xiàn)攻擊的,我們只是說擁有超過51%的算力的攻擊幾乎我們就可以判定它一定會成功秀睛。
上面都是在比特幣場景下進(jìn)行的論述
merle樹是一種計算機算法尔当,用于完整性校驗,最簡單的方法就是對要校驗的整個的數(shù)據(jù)文件做個哈希運算蹂安,把得到的哈希值公布在網(wǎng)上椭迎,這樣我們把數(shù)據(jù)下載到手之后,再次運算一下哈希值田盈,如果運算結(jié)果相等畜号,就表示我們下載過程中文件沒有任何的損壞。因為哈希的最大特點是允瞧,如果你的輸入數(shù)據(jù)简软,稍微變了一點點蛮拔,那么經(jīng)過哈希運算,你得到的哈希值將會變得面目全非替饿。
你要真誠的告訴對方语泽,Merkles樹是現(xiàn)代計算機一個非常基礎(chǔ)的算法视卢,廣泛用于文件系統(tǒng)踱卵,操作系統(tǒng)內(nèi)存管理,大名鼎鼎的Git据过,BT下載這些都大量用到了merkle樹惋砂。
merle樹
每一個區(qū)塊中包含一個梅克爾樹根,這個樹根是很多交易的不斷重復(fù)hash計算得到的绳锅。
假設(shè)一個區(qū)塊中包含4比交易西饵,每個交易都可以生成一個hash值,這4個hash值兩兩結(jié)合生成2個hash鳞芙,然后這兩個hash在進(jìn)行一次hash計算救得到一個hash值眷柔,這個hash值就是梅克爾樹根。
如果你希望確定一筆交易的狀態(tài)原朝,只要要求對方提供一個梅克爾證明驯嘱,也就是得到特定的交易,交易的所在的梅克爾樹根就是就是區(qū)塊頭喳坠,上一次我已經(jīng)在題主的問題說明了鞠评,客戶端會不斷同步最新的交易數(shù)據(jù),spv只用同步區(qū)塊頭就可以了壕鹉,區(qū)塊頭里面包含區(qū)塊交易的梅克爾樹根剃幌。
只要本地能驗證交易所在的區(qū)塊頭根哈希和本地相應(yīng)的區(qū)塊的根哈希就可以確定。
merkle值計算方法
區(qū)塊頭的哈希值包含兩個重要要素:一是merkle根哈希值晾浴;二是父區(qū)塊哈希值负乡,因此,區(qū)塊頭哈希值是包含了本區(qū)塊所有交易信息和父區(qū)塊的信息的電子指紋脊凰,任何針對交易的修改都會通過merkle值的變化導(dǎo)致區(qū)塊哈希值的變化敬鬓;任何對父區(qū)塊信息的修改,都會導(dǎo)致父區(qū)塊哈希值的變化笙各,從而導(dǎo)致區(qū)塊頭哈希值的變化钉答。因此,通過哈希加密杈抢,任何針對某塊信息的修改(如277315塊)数尿,都會導(dǎo)致后續(xù)所有區(qū)塊數(shù)據(jù)的修改(不僅僅要修改277315塊,還要修改277316塊等所有后續(xù)塊)惶楼。由此右蹦,可見區(qū)塊鏈的加密方法是多么嚴(yán)格诊杆。
區(qū)塊頭哈希值鏈接merkle值計算方法
區(qū)塊頭的哈希值包含兩個重要要素:一是merkle根哈希值;二是父區(qū)塊哈希值何陆,因此晨汹,區(qū)塊頭哈希值是包含了本區(qū)塊所有交易信息和父區(qū)塊的信息的電子指紋,任何針對交易的修改都會通過merkle值的變化導(dǎo)致區(qū)塊哈希值的變化贷盲;任何對父區(qū)塊信息的修改淘这,都會導(dǎo)致父區(qū)塊哈希值的變化,從而導(dǎo)致區(qū)塊頭哈希值的變化巩剖。因此铝穷,通過哈希加密,任何針對某塊信息的修改(如277315塊)佳魔,都會導(dǎo)致后續(xù)所有區(qū)塊數(shù)據(jù)的修改(不僅僅要修改277315塊曙聂,還要修改277316塊等所有后續(xù)塊)。由此鞠鲜,可見區(qū)塊鏈的加密方法是多么嚴(yán)格宁脊。
區(qū)塊頭哈希值鏈接