待字閨中開(kāi)發(fā)了一門(mén)區(qū)塊鏈方面的課程:《深入淺出ETH原理與智能合約開(kāi)發(fā)》杈绸,馬良老師講授。此簡(jiǎn)書(shū)文集記錄我的學(xué)習(xí)筆記企软。
課程共8節(jié)課庐扫。其中,前四課講ETH原理仗哨,后四課講智能合約形庭。
第三課分為三部分:
- 以太坊區(qū)塊結(jié)構(gòu)
- GHOST協(xié)議
- 搭建測(cè)試網(wǎng)絡(luò)
這篇文章是第三課第二部分的學(xué)習(xí)筆記:GHOST協(xié)議。
GHOST協(xié)議主要是解決一個(gè)普遍的矛盾厌漂,即全網(wǎng)的吞吐量和安全性之間的矛盾萨醒。在介紹以太坊GHOST協(xié)議之前,先來(lái)了解一下比特幣的最長(zhǎng)鏈機(jī)制苇倡。
1富纸、比特幣的最長(zhǎng)鏈機(jī)制
當(dāng)有兩個(gè)區(qū)塊挖出下一個(gè)區(qū)塊時(shí)囤踩,比特幣是怎么處理的呢?答案是采用最長(zhǎng)鏈機(jī)制晓褪。下面結(jié)合圖示說(shuō)明一下堵漱。
圖(1)中,某個(gè)時(shí)刻全網(wǎng)都在相同的區(qū)塊高度上(藍(lán)色圓圈)涣仿。各個(gè)節(jié)點(diǎn)都在競(jìng)爭(zhēng)挖礦勤庐,爭(zhēng)取下一個(gè)區(qū)塊的記賬權(quán)。幾乎在同時(shí)变过,左上方的節(jié)點(diǎn)挖出了橙色三角形的區(qū)塊埃元,右下方的節(jié)點(diǎn)挖出了綠色三角形的區(qū)塊,兩個(gè)區(qū)塊都被快速地廣播到附近的節(jié)點(diǎn)媚狰。
圖(2)中岛杀,區(qū)塊被繼續(xù)廣播,每個(gè)藍(lán)色區(qū)塊下都有兩個(gè)區(qū)塊崭孤,區(qū)塊鏈發(fā)生了軟分叉类嗤。
那接下來(lái),哪條鏈才是正確的鏈呢辨宠,要看在下一次競(jìng)爭(zhēng)中遗锣,誰(shuí)先爭(zhēng)取到記賬權(quán)。
圖(3)中嗤形,橙色三角形的下一個(gè)區(qū)塊被找到精偿,然后廣播出去,所有橙色三角形區(qū)塊下都有橙色的五角星區(qū)塊赋兵,而綠色三角形的下一個(gè)區(qū)塊還沒(méi)有找到笔咽。此時(shí)橙色鏈比綠色鏈長(zhǎng),下一次競(jìng)爭(zhēng)則是在橙色五角星區(qū)塊下挖礦霹期。
圖(4)顯示叶组,綠色三角形區(qū)塊會(huì)變成無(wú)效的區(qū)塊。
2历造、區(qū)塊鏈 POW 擴(kuò)容的兩難問(wèn)題
比特幣可以采用最長(zhǎng)鏈機(jī)制甩十,有一個(gè)重要的條件,即區(qū)塊產(chǎn)生的速度是每十分鐘一塊吭产。為什么是10分鐘呢侣监,這和2008年~2009年的一個(gè)研究有關(guān),研究指出臣淤,在當(dāng)時(shí)的網(wǎng)絡(luò)條件下橄霉,在比特幣的P2P網(wǎng)絡(luò)中,1M的區(qū)塊廣播至全網(wǎng)95%的節(jié)點(diǎn)需要10分鐘左右荒典。比特幣就把這個(gè)時(shí)間做為區(qū)塊產(chǎn)生的時(shí)間酪劫。這樣有一個(gè)好處,能保證全網(wǎng)95%的節(jié)點(diǎn)都能接收到新區(qū)塊寺董,都在一個(gè)新的高度上競(jìng)爭(zhēng)覆糟。但同時(shí)也有一個(gè)負(fù)作用,就是造成全網(wǎng)的吞吐量很低遮咖,區(qū)塊只有一兆滩字,10分鐘才出一個(gè),全網(wǎng)平均而言御吞,每秒大約只能有7筆左右的交易麦箍。
于是,2013~2014年左右陶珠,就有了擴(kuò)容相關(guān)方面的研究挟裂。而區(qū)塊大小和區(qū)塊生成速度是一對(duì)主要的考量。
比特幣區(qū)塊大小與區(qū)塊間隔
- 交易/區(qū)塊大小
- 新區(qū)塊生成速率
- 一個(gè)交易/區(qū)塊傳播到全網(wǎng)的時(shí)間
- 全網(wǎng)節(jié)點(diǎn)的同步狀態(tài)
- 廢塊率
- 系統(tǒng)的吞吐量
- 系統(tǒng)的安全性(主鏈的生成速度)
區(qū)塊大揍诽,能包含多一些交易诀蓉。區(qū)塊大,或者交易尺寸大暑脆,廣播至全網(wǎng)的時(shí)間會(huì)相應(yīng)變長(zhǎng)渠啤。
如果區(qū)塊間隔小,比如把10分鐘改成一分鐘添吗,則全網(wǎng)節(jié)點(diǎn)的同步狀態(tài)會(huì)變差沥曹,廢塊率也會(huì)變高。很多誠(chéng)實(shí)節(jié)點(diǎn)的算力就被浪費(fèi)了碟联。
為了解決全網(wǎng)吞吐量和安全性這一對(duì)矛盾妓美,在2013年,有研究人員發(fā)表了GHOST協(xié)議論文玄帕。
3部脚、GHOST協(xié)議
3.1 Greedy Heaviest-Observed Sub-Tree
GHOST,貪婪最重可見(jiàn)子樹(shù)協(xié)議裤纹。
選取主鏈的原則改變?yōu)槟膫€(gè)區(qū)塊的子樹(shù)包含的有效區(qū)塊最多委刘。
如果單純的計(jì)算最長(zhǎng)鏈原則,主鏈應(yīng)該是 0<-1B<-2D<-3F<-3F<-4C<-5B.
如果采用了GHOST協(xié)議, 以前的"廢塊"也會(huì)被考慮到主鏈的計(jì)算量中鹰椒。每一個(gè)節(jié)點(diǎn)下含一個(gè)子樹(shù), 兄弟節(jié)點(diǎn)之間子樹(shù)節(jié)點(diǎn)最多的被選為主鏈锡移。這樣一來(lái),0<-1B<-2C<-3D<-4B 成為主鏈漆际。
如果采用GHOST協(xié)議淆珊, 一個(gè)攻擊者僅僅提供一個(gè)1A到6A的長(zhǎng)鏈并不能被認(rèn)為是主鏈。(注奸汇,圖中紅圈表示攻擊者的那條鏈施符。)
這里涉及到一個(gè)概念:叔塊往声。其定義是直系父區(qū)塊的兄弟區(qū)塊。以4B為例戳吝,它的直系父節(jié)點(diǎn)有3D, 2C, 1B等等浩销,那個(gè)這些父節(jié)點(diǎn)的兄弟節(jié)點(diǎn)3C, 3E, 2B, 2D, 1A都是4B的叔節(jié)點(diǎn)。
在前面學(xué)習(xí)區(qū)塊結(jié)構(gòu)時(shí)听哭,提到過(guò)區(qū)塊頭中有一個(gè)Number慢洋,它是指直系父節(jié)點(diǎn)的個(gè)數(shù),這里舉例說(shuō)明一下具體的含義陆盘。對(duì)于4B區(qū)塊普筹,它的Number是 4 ,因?yàn)樗懊嬗?<-1B<-2C<-3D四個(gè)區(qū)塊隘马。對(duì)于創(chuàng)世區(qū)塊太防,它的Number為 0 。對(duì)于3B祟霍,Number是3杏头,它前面有三個(gè)直系父節(jié)點(diǎn):0,1B沸呐,2B 醇王。
3.1 獎(jiǎng)勵(lì)規(guī)則
因?yàn)椴捎昧薌HOST協(xié)議,而不是比特幣的最長(zhǎng)鏈機(jī)制崭添,相應(yīng)地寓娩,以太坊的獎(jiǎng)勵(lì)規(guī)則也發(fā)生了變化。規(guī)則如下呼渣。
主鏈節(jié)點(diǎn)獲得基本獎(jiǎng)勵(lì)棘伴,大都會(huì)版本是3個(gè)以太幣。
主鏈節(jié)點(diǎn)的兄弟非主鏈節(jié)點(diǎn)獲得 ((叔塊高度+8-當(dāng)前塊的高度)/8 )*基本獎(jiǎng)勵(lì)
這條規(guī)則的意思是一個(gè)叔塊離當(dāng)前新節(jié)點(diǎn)越遠(yuǎn)屁置,它獲得的獎(jiǎng)勵(lì)就越少焊夸。
還是以上圖為例。假設(shè)3D是新產(chǎn)生的區(qū)塊蓝角,對(duì)于其叔塊2B而言阱穗,高度相差1,所以它的獎(jiǎng)勵(lì)是(-1+8)/8 *基本獎(jiǎng)勵(lì)使鹅,即7/8*基本獎(jiǎng)勵(lì)揪阶。如果有2D,它也是可以獲得7/8*基本獎(jiǎng)勵(lì)患朱。而如果是1A能獲得獎(jiǎng)勵(lì)鲁僚,則它獲得6/8*基本獎(jiǎng)勵(lì)。同時(shí),一個(gè)當(dāng)前區(qū)塊只能包含兩個(gè)叔塊鏈接冰沙,此圖中可能是2B和2D侨艾;如果沒(méi)有2D,3D的兩個(gè)叔塊可能是2B和1A拓挥。
再多舉幾個(gè)例子蒋畜。如果2C是當(dāng)前區(qū)塊,1A可以獲得7/8*基本獎(jiǎng)勵(lì)撞叽。如果4B是當(dāng)前區(qū)塊,3C插龄、3E可能獲得7/8*基本獎(jiǎng)勵(lì)愿棋,2D、2B可能獲得6/8*基本獎(jiǎng)勵(lì)均牢,1A可能獲得5/8*基本獎(jiǎng)勵(lì)糠雨,這樣有一個(gè)代際遞減的過(guò)程。這樣設(shè)計(jì)是為了鼓勵(lì)你增大網(wǎng)速徘跪,不要落后主鏈太多甘邀。
- 主鏈的后續(xù)節(jié)點(diǎn)如果包含父節(jié)點(diǎn)(向上最多追溯7代)的兄弟節(jié)點(diǎn)(叔塊)獲得1/32的基本獎(jiǎng)勵(lì)。
比如垮庐,4B包含了叔塊3C松邪、3E,那它則可以額外多獲得1/32的基本獎(jiǎng)勵(lì)哨查。
一個(gè)節(jié)點(diǎn)最多包含2個(gè)叔塊逗抑。一個(gè)叔塊只能有一個(gè)后繼。(原因是為了防止獲得過(guò)多的獎(jiǎng)勵(lì))寒亥。叔塊只驗(yàn)證頭部邮府,不驗(yàn)證Trie(狀態(tài)樹(shù)等信息)。
交易費(fèi)用(transaction fee)不會(huì)分配給叔塊溉奕。
12秒生成一塊褂傀。
目前的網(wǎng)絡(luò)條件下,叔塊的產(chǎn)生率大約在9%~10%加勤。
采用了GHOST協(xié)議后仙辟,以太坊的吞吐量也并沒(méi)有質(zhì)的提升,當(dāng)前大約12~20個(gè)交易每秒胸竞。在加密貓或者ICO大量運(yùn)行時(shí)欺嗤,還是很擁堵。以太坊2.0對(duì)此有兩個(gè)解決方案卫枝,一個(gè)是分片煎饼,另一個(gè)是運(yùn)行一個(gè)側(cè)鏈。
不足之處校赤,請(qǐng)批評(píng)指正吆玖。