摘要:和比特幣網(wǎng)絡(luò)傳輸協(xié)議的一系列優(yōu)化使得比特幣的新區(qū)塊幾乎可以在瞬間被全世界的礦工接收,非常有效的降低了孤塊率,保證了網(wǎng)絡(luò)安全。
這篇文章試圖討論全節(jié)點(diǎn)對(duì)于區(qū)塊鏈的意義。
角色我們都知道,區(qū)塊鏈網(wǎng)絡(luò)中的節(jié)點(diǎn)有不同的角色。例如:
出塊節(jié)點(diǎn)出塊節(jié)點(diǎn)負(fù)責(zé)打包交易,生產(chǎn)區(qū)塊。出塊節(jié)點(diǎn)在不同的地方有不同的名字,例如比特幣和以太坊中的礦工/礦池,Bitshares的Delegator,EOS的Producer, Cardarno的Stakeholder,Tendermint和Casper中的Validator,以及CITA中的共識(shí)節(jié)點(diǎn)等等。 在這些網(wǎng)絡(luò)中,出塊節(jié)點(diǎn)的角色往往與全節(jié)點(diǎn)角色重合。最接近純粹出塊節(jié)點(diǎn)的例子應(yīng)該是使用getblocktemplate協(xié)議參與挖礦的比特幣礦機(jī),他們不驗(yàn)證區(qū)塊,但是擁有選擇交易打包和封裝完整區(qū)塊的權(quán)力。
出塊節(jié)點(diǎn)相對(duì)于其他節(jié)點(diǎn)往往需要付出更多的資源,包括算力(無論是用于PoW還是用于交易計(jì)算),磁盤,網(wǎng)絡(luò)帶寬等等。這些資源要求抬高了出塊節(jié)點(diǎn)的門檻,容易造成出塊節(jié)點(diǎn)分布的中心化。
全節(jié)點(diǎn)區(qū)塊鏈中的區(qū)塊由兩個(gè)部分組成,區(qū)塊頭和區(qū)塊體。區(qū)塊頭中存放包括區(qū)塊見證(例如工作量證明或是投票)在內(nèi)的元數(shù)據(jù),區(qū)塊體中包含交易數(shù)據(jù)。區(qū)塊的驗(yàn)證由此也可以分為兩部分,對(duì)區(qū)塊頭的驗(yàn)證和對(duì)區(qū)塊體的驗(yàn)證。對(duì)區(qū)塊頭的驗(yàn)證主要是出塊權(quán)的檢查,例如區(qū)塊頭中包含的工作量證明是否有效;對(duì)區(qū)塊體的驗(yàn)證主要是對(duì)交易有效性的檢查,確保區(qū)塊體中每一筆交易都是有效的。
全節(jié)點(diǎn)同步交易和區(qū)塊,對(duì)其進(jìn)行驗(yàn)證,并轉(zhuǎn)發(fā)有效的交易和區(qū)塊。為了能夠進(jìn)行驗(yàn)證,全節(jié)點(diǎn)必須有完整的當(dāng)前世界狀態(tài)(例如UTXO集合)。由于全節(jié)點(diǎn)自行進(jìn)行所有的驗(yàn)證,因此不需要信任其他第三方。
通常情況下,出塊節(jié)點(diǎn)構(gòu)造新區(qū)塊時(shí)需要引用前一個(gè)有效區(qū)塊,為了確認(rèn)父塊的有效性必須對(duì)其進(jìn)行驗(yàn)證。此時(shí)出塊節(jié)點(diǎn)也做了全節(jié)點(diǎn)的事情,也是一種全節(jié)點(diǎn)。這種角色上的重合不是必然的,不影響后面的討論。
輕節(jié)點(diǎn)輕節(jié)點(diǎn)與全節(jié)點(diǎn)不同:輕節(jié)點(diǎn)只同步和驗(yàn)證區(qū)塊頭,不會(huì)同步和驗(yàn)證區(qū)塊體以及其中的交易。因此,輕節(jié)點(diǎn)只能驗(yàn)證區(qū)塊頭的有效性,無法驗(yàn)證該區(qū)塊頭對(duì)應(yīng)的區(qū)塊體中交易的有效性,只能相信構(gòu)造這個(gè)區(qū)塊的出塊節(jié)點(diǎn)沒有打包無效的交易,并且相信將這個(gè)看起來合理的區(qū)塊頭發(fā)送給自己的全節(jié)點(diǎn)對(duì)其進(jìn)行了完整的檢查。輕節(jié)點(diǎn)是信任其它節(jié)點(diǎn)的節(jié)點(diǎn)。由于不同步交易,輕節(jié)點(diǎn)也無法得知交易處理之后的世界狀態(tài),自然也無法驗(yàn)證交易雙花或是世界狀態(tài)的變更。輕節(jié)點(diǎn)的驗(yàn)證能力大大弱于全節(jié)點(diǎn)。
相信其它節(jié)點(diǎn)的好處是,輕節(jié)點(diǎn)的開銷很小:區(qū)塊頭的體積只占區(qū)塊的很小一部分,很容易同步和存儲(chǔ)。因此輕節(jié)點(diǎn)可以運(yùn)行在筆記本甚至手機(jī)等各種有限硬件環(huán)境中。
關(guān)系這幾種角色之間的關(guān)系是一個(gè)非常有意思的問題,也是我和朋友們常常會(huì)討論的一個(gè)話題。在這樣的討論中,如果你拿出一支筆,請(qǐng)?jiān)趫?chǎng)的任意一位朋友在白板上畫出他心目中的這三種節(jié)點(diǎn)組成的區(qū)塊鏈網(wǎng)絡(luò)拓?fù)?,大概率?huì)得到類似這樣的圖:
圖1. 朋友心中的節(jié)點(diǎn)拓?fù)銩12856753-e57be4f7b1204b84.jpg1240×960 44 KB
圖2. 朋友心中的節(jié)點(diǎn)拓?fù)銪12856753-90c0b692bf524eaf.jpg1240×960 46.5 KB
在圖1中,出塊節(jié)點(diǎn)在最中心的位置,全節(jié)點(diǎn)圍繞出塊節(jié)點(diǎn)形成網(wǎng)絡(luò),輕節(jié)點(diǎn)連接在全節(jié)點(diǎn)上;在圖2中,出塊節(jié)點(diǎn)和全節(jié)點(diǎn)混合組成分布式網(wǎng)絡(luò)位于中心,輕節(jié)點(diǎn)連接在全節(jié)點(diǎn)或者出塊節(jié)點(diǎn)上。哪一副圖更接近真實(shí)情況呢?
人們通常認(rèn)為出塊節(jié)點(diǎn)是守護(hù)者(Keeper)一個(gè)區(qū)塊鏈網(wǎng)絡(luò)的守護(hù)者,這樣的觀點(diǎn)不無道理。畢竟是出塊節(jié)點(diǎn)驗(yàn)證交易,生產(chǎn)新的區(qū)塊,為用戶提供服務(wù),這也是為什么人們會(huì)把出塊節(jié)點(diǎn)/礦工畫在網(wǎng)絡(luò)拓?fù)涞闹行摹?瓷先ィ麄円呀?jīng)擁有了定義區(qū)塊鏈的權(quán)力。然而,如果我們將注意力再下降一層,從P2P網(wǎng)絡(luò)的觀點(diǎn)來看,結(jié)果卻不是這樣。
一般的P2P網(wǎng)絡(luò),例如BitTorrent或是Kad Network,目的在于更快的分享數(shù)據(jù),這些網(wǎng)絡(luò)中的節(jié)點(diǎn)并不關(guān)心自己轉(zhuǎn)發(fā)的數(shù)據(jù)包包含的是什么樣的數(shù)據(jù)。這些節(jié)點(diǎn)不需要理解數(shù)據(jù),只需要轉(zhuǎn)發(fā)數(shù)據(jù),幫助數(shù)據(jù)從網(wǎng)絡(luò)中的一點(diǎn)流動(dòng)到另外一個(gè)點(diǎn)。它們只是數(shù)據(jù)的搬運(yùn)工。
區(qū)塊鏈的P2P網(wǎng)絡(luò)則不僅僅是數(shù)據(jù)的搬運(yùn)工,還是數(shù)據(jù)的驗(yàn)證者。P2P網(wǎng)絡(luò)由全節(jié)點(diǎn)構(gòu)成,全節(jié)點(diǎn)在接收到新的交易或者新的區(qū)塊時(shí),首先做的事情是驗(yàn)證。這里的驗(yàn)證不僅僅是驗(yàn)證數(shù)據(jù)本身的完整性(Integrity),還要驗(yàn)證數(shù)據(jù)在業(yè)務(wù)邏輯中的有效性,例如這筆交易是否和賬本中已經(jīng)有的交易沖突(雙花),或者這個(gè)新區(qū)塊是否包含了無效的交易。驗(yàn)證交易是否雙花是業(yè)務(wù)層(賬本)的邏輯,不是網(wǎng)絡(luò)層的邏輯。在區(qū)塊鏈的P2P網(wǎng)絡(luò)中,節(jié)點(diǎn)不僅僅要轉(zhuǎn)發(fā)數(shù)據(jù),還需要理解數(shù)據(jù)。數(shù)據(jù)轉(zhuǎn)發(fā)在區(qū)塊鏈節(jié)點(diǎn)中是一個(gè)提升到業(yè)務(wù)層的概念,而不只是一個(gè)網(wǎng)絡(luò)層的概念。
這種設(shè)計(jì)所導(dǎo)致的結(jié)果就是,全節(jié)點(diǎn)組成的網(wǎng)絡(luò)形成了一道“防火墻”,有效阻止了無效交易和區(qū)塊的傳播。出塊節(jié)點(diǎn)如果產(chǎn)生一個(gè)包含無效交易的區(qū)塊,這個(gè)區(qū)塊只能夠傳播到與其相鄰的全節(jié)點(diǎn),無法穿透這些相鄰節(jié)點(diǎn)形成的防火墻傳播到更遠(yuǎn)的地方,無法進(jìn)入全節(jié)點(diǎn)網(wǎng)絡(luò)維護(hù)的區(qū)塊鏈主分叉,無效交易也就無法被依賴全節(jié)點(diǎn)的輕節(jié)點(diǎn)或是錢包接受。
因此,出塊節(jié)點(diǎn)只是新的區(qū)塊的提議者,并不能讓全節(jié)點(diǎn)網(wǎng)絡(luò)接受無效的區(qū)塊或是交易。挖出一個(gè)新的區(qū)塊并不是共識(shí)的結(jié)束,而是共識(shí)的開始。如果套用Paxos共識(shí)里面的詞匯,出塊節(jié)點(diǎn)是Proposer,全節(jié)點(diǎn)是Acceptor。出塊節(jié)點(diǎn)持續(xù)打包交易,提交新的區(qū)塊,全節(jié)點(diǎn)驗(yàn)證新的區(qū)塊提案,保證新區(qū)塊和其中交易的正確性。從這個(gè)角度看,作為驗(yàn)證者的全節(jié)點(diǎn)更應(yīng)該被稱作守護(hù)者(Keeper)。
按照這樣的理解,我們可以畫出這樣一個(gè)圖:
在圖3中,全節(jié)點(diǎn)網(wǎng)絡(luò)位于中心,形成一個(gè)相互驗(yàn)證的去中心化網(wǎng)絡(luò),一道安全屏障。輕節(jié)點(diǎn)連接這個(gè)網(wǎng)絡(luò)中的全節(jié)點(diǎn),使用全節(jié)點(diǎn)提供的服務(wù)。輕節(jié)點(diǎn)之間也可以形成自己的網(wǎng)絡(luò),但需要注意的是,輕節(jié)點(diǎn)網(wǎng)絡(luò)沒有驗(yàn)證功能,轉(zhuǎn)發(fā)在這里更多的是網(wǎng)絡(luò)層的概念。輕節(jié)點(diǎn)網(wǎng)絡(luò)和全節(jié)點(diǎn)網(wǎng)絡(luò)是不同的網(wǎng)絡(luò)。出塊節(jié)點(diǎn)連接全節(jié)點(diǎn)提交新的區(qū)塊,出塊節(jié)點(diǎn)之間也可以形成自己的網(wǎng)絡(luò),以更好的提供服務(wù),例如比特幣的FIBRE就是一個(gè)礦池之間的專用網(wǎng)絡(luò)。
全節(jié)點(diǎn)網(wǎng)絡(luò)對(duì)區(qū)塊鏈的安全至關(guān)重要。全節(jié)點(diǎn)數(shù)量越多,網(wǎng)絡(luò)越可靠,加密經(jīng)濟(jì)的基礎(chǔ)越穩(wěn)固。全節(jié)點(diǎn)的運(yùn)行成本和長(zhǎng)期數(shù)量這兩個(gè)指標(biāo)在未來的區(qū)塊鏈價(jià)值評(píng)估中應(yīng)該會(huì)扮演越來越重要的作用。區(qū)塊鏈發(fā)展面臨的一個(gè)關(guān)鍵問題是,如何激勵(lì)全節(jié)點(diǎn)?這個(gè)問題看上去簡(jiǎn)單,實(shí)際上會(huì)觸及一些非常深層次的(也許是不可調(diào)和的)矛盾,例如data availability problem,這里就不展開說了,以后有時(shí)間再寫文章討論。
案例分析當(dāng)我們理解了全節(jié)點(diǎn)的重要性,在腦海中建立了正確的網(wǎng)絡(luò)拓?fù)浜?,就可以用這個(gè)框架來分析實(shí)際的問題了。這里舉兩個(gè)例子。
FIBREFIBRE是比特幣快速網(wǎng)絡(luò)中繼引擎(Fast Internet Bitcoin Relay Engine)的縮寫,是一個(gè)專門給礦工提供服務(wù)的區(qū)塊傳輸網(wǎng)絡(luò)。FIBRE在全球不同的位置部署了6個(gè)節(jié)點(diǎn),相互之間通過高速網(wǎng)絡(luò)連接,使用UDP+ForwardErrorCorrection傳送數(shù)據(jù),幾乎實(shí)現(xiàn)了無延遲的傳輸。在FIBRE注冊(cè)過的礦工可以連接到離自己最近的FIBRE節(jié)點(diǎn),以最短的時(shí)間獲得新的區(qū)塊數(shù)據(jù)。FIBRE和比特幣P2P網(wǎng)絡(luò)傳輸協(xié)議的一系列優(yōu)化使得比特幣的新區(qū)塊幾乎可以在瞬間被全世界的礦工接收,非常有效的降低了孤塊率,保證了網(wǎng)絡(luò)安全。
FIBRE是由Matt Corallo維護(hù)的一個(gè)需要注冊(cè)使用的網(wǎng)絡(luò),因此是一個(gè)中心化管理的系統(tǒng)。這也是FIBRE常為人所詬病的地方。但是如果我們按照?qǐng)D3的拓?fù)鋪矸治觯蜁?huì)發(fā)現(xiàn)FIBRE的中心化對(duì)比特幣網(wǎng)絡(luò)并沒有負(fù)面影響:無論礦工是用中心化還是去中心化的網(wǎng)絡(luò)加速新區(qū)塊的傳播,這個(gè)行為都不會(huì)影響全節(jié)點(diǎn)對(duì)新區(qū)塊的驗(yàn)證。FIBRE也不是整個(gè)網(wǎng)絡(luò)的單點(diǎn),如果FIBRE崩潰或者作惡,礦工隨時(shí)可以切換回比特幣自己的P2P網(wǎng)絡(luò)。
思考題:同樣的出塊節(jié)點(diǎn)間專用加速網(wǎng)絡(luò),如果用于提升網(wǎng)絡(luò)吞吐量解決scalability問題,上述結(jié)論依然成立嗎?
EOSEOS的目標(biāo)是百萬級(jí)的TPS,為了實(shí)現(xiàn)這個(gè)目標(biāo),EOS使用投票的方式由全網(wǎng)選出21個(gè)出塊節(jié)點(diǎn)(以及一定數(shù)量的候選節(jié)點(diǎn)),并要求出塊節(jié)點(diǎn)使用最好的硬件來支撐高性能。EOS是否真的實(shí)現(xiàn)了百萬級(jí)TPS并不重要,重要的是,通過這種方式來提升性能不僅僅要求出塊節(jié)點(diǎn)付出不菲的成本,也要求全節(jié)點(diǎn)付出同樣的成本。然而與出塊節(jié)點(diǎn)不同,EOS網(wǎng)絡(luò)中的全節(jié)點(diǎn)并沒有得到網(wǎng)絡(luò)的補(bǔ)貼,因此用戶很難有足夠的動(dòng)力真的去支付幾乎與出塊節(jié)點(diǎn)相同的成本去運(yùn)行一個(gè)全節(jié)點(diǎn)。在這種情況下,網(wǎng)絡(luò)最終會(huì)演化成一個(gè)沒有全節(jié)點(diǎn)的結(jié)構(gòu):
ByteMaster對(duì)21個(gè)節(jié)點(diǎn)合理性的論證是,比特幣的算力也是集中在<10個(gè)礦池手中,21個(gè)節(jié)點(diǎn)其實(shí)比10個(gè)礦池更加去中心化。我們通過比較網(wǎng)絡(luò)拓?fù)鋺?yīng)該容易看出,這個(gè)辯護(hù)并不成立,因?yàn)閮烧叩木W(wǎng)絡(luò)結(jié)構(gòu)有很大區(qū)別,無法這樣直接比較。在EOS網(wǎng)絡(luò)中,由于去中心化全節(jié)點(diǎn)網(wǎng)絡(luò)的缺失,出塊節(jié)點(diǎn)缺乏監(jiān)督,用戶只能完全相信出塊節(jié)點(diǎn)不會(huì)作惡。出塊和驗(yàn)證的工作最終都集中到出塊節(jié)點(diǎn)的角色上,出塊節(jié)點(diǎn)既是運(yùn)動(dòng)員,又是裁判。而在比特幣的網(wǎng)絡(luò)中,大量的全節(jié)點(diǎn)承擔(dān)了裁判的角色,礦池僅僅是運(yùn)動(dòng)員。用戶可以相信大量的全節(jié)點(diǎn),不需要相信礦池。
需要指出的是,這個(gè)問題實(shí)際上不僅僅是EOS的問題,也是其他要在Layer 1擴(kuò)容的項(xiàng)目會(huì)遇到的問題。
對(duì)CKB的啟示出塊節(jié)點(diǎn),全節(jié)點(diǎn),輕節(jié)點(diǎn)形成了一個(gè)動(dòng)態(tài)的網(wǎng)絡(luò),網(wǎng)絡(luò)中的各類角色都可以自由進(jìn)出(額,出塊節(jié)點(diǎn)實(shí)際上在很多區(qū)塊鏈中無法自由進(jìn)出,這個(gè)也不展開了,以后有時(shí)間再寫文章討論…),這些角色形成的拓?fù)浣Y(jié)構(gòu)(例如節(jié)點(diǎn)比例、誰和誰連接等等等等)決定了網(wǎng)絡(luò)的性質(zhì),包括性能、安全、中心化程度等各個(gè)方面。不同的設(shè)計(jì)可能會(huì)導(dǎo)致網(wǎng)絡(luò)最終形成不同的結(jié)構(gòu),而這個(gè)最終結(jié)構(gòu)所展現(xiàn)的性質(zhì)有可能和設(shè)計(jì)初衷是相違背的。
全節(jié)點(diǎn)為了能夠不信任任何第三方,選擇自行驗(yàn)證所有交易歷史。這種做法使全節(jié)點(diǎn)不僅僅滿足了自己的需求,也為網(wǎng)絡(luò)安全貢獻(xiàn)了力量,體現(xiàn)出一種正外部性。區(qū)塊鏈需要這種安全保證,因此全節(jié)點(diǎn)對(duì)于一個(gè)去中心化的網(wǎng)絡(luò)至關(guān)重要。如何內(nèi)部化這種正外部性是一個(gè)需要重視的課題,在這個(gè)課題還沒有解決的情況下,我們能做的只能是保證全節(jié)點(diǎn)可以運(yùn)行在一個(gè)較低的成本,以促進(jìn)網(wǎng)絡(luò)保有盡可能多的全節(jié)點(diǎn)。
對(duì)于希望成為未來加密經(jīng)濟(jì)的基礎(chǔ)設(shè)施的Nervos CKB來說,必須在設(shè)計(jì)之初就把這些因素考慮在內(nèi),以理想中的網(wǎng)絡(luò)結(jié)構(gòu)為目標(biāo),并通過經(jīng)濟(jì)激勵(lì)和其他機(jī)制設(shè)計(jì)來實(shí)現(xiàn)。這并不是一件容易的事情,還需要大量的研究和探索。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/24751.html
摘要:在簽名操作中,首先對(duì)信息進(jìn)行取散列值的操作,然后使用信息發(fā)送者的私鑰加密這個(gè)散列值,獲得一個(gè)數(shù)字簽名,并將簽名和原信息一同發(fā)送。 showImg(https://iocaffcdn.phphub.org/uploads/images/201903/29/9595/hcLQHeAops.png!large); 來自 簡(jiǎn)書btc address: 1FmWXNJT3jVKaHBQs2gAs...
from http://oyanglul.us It would be awesome if we can use OAuth in JavaScript purely in client side. before start to do that, please let me e...
摘要:有時(shí)候,監(jiān)控一個(gè)系統(tǒng)需要在系統(tǒng)出現(xiàn)警告時(shí)通過發(fā)送郵件來通知相關(guān)的負(fù)責(zé)人。一種是普通郵件,通過附件描述詳細(xì)報(bào)告一種是高級(jí)郵件哈哈,本來就是告警,還不趕快看,還要慢慢下載附件打開看所以將附件內(nèi)容以直接展示到正文處,并通過樣式標(biāo)記警告。 有時(shí)候,監(jiān)控一個(gè)系統(tǒng)需要在系統(tǒng)出現(xiàn)警告時(shí)通過shell發(fā)送郵件來通知相關(guān)的負(fù)責(zé)人。本文講講如何shell發(fā)送郵件。一種是普通郵件,通過附件描述詳細(xì)報(bào)告;一種...
摘要:有時(shí)候,監(jiān)控一個(gè)系統(tǒng)需要在系統(tǒng)出現(xiàn)警告時(shí)通過發(fā)送郵件來通知相關(guān)的負(fù)責(zé)人。一種是普通郵件,通過附件描述詳細(xì)報(bào)告一種是高級(jí)郵件哈哈,本來就是告警,還不趕快看,還要慢慢下載附件打開看所以將附件內(nèi)容以直接展示到正文處,并通過樣式標(biāo)記警告。 有時(shí)候,監(jiān)控一個(gè)系統(tǒng)需要在系統(tǒng)出現(xiàn)警告時(shí)通過shell發(fā)送郵件來通知相關(guān)的負(fù)責(zé)人。本文講講如何shell發(fā)送郵件。一種是普通郵件,通過附件描述詳細(xì)報(bào)告;一種...
閱讀 1792·2021-10-20 13:49
閱讀 1340·2019-08-30 15:52
閱讀 2830·2019-08-29 16:37
閱讀 1013·2019-08-29 10:55
閱讀 3048·2019-08-26 12:14
閱讀 1607·2019-08-23 17:06
閱讀 3223·2019-08-23 16:59
閱讀 2527·2019-08-23 15:42