加密貨幣可擴(kuò)展性交易網(wǎng)絡(luò)Mochimo介紹
Mochimo(MCM)一個(gè)第三代加密貨幣和交易網(wǎng)絡(luò)。我們從頭開始構(gòu)建,來避免現(xiàn)有區(qū)塊鏈系統(tǒng)中的已知問題和缺陷。為了將目前行業(yè)的最佳功能都組合到一個(gè)加密貨幣生態(tài)系統(tǒng)中,Mochimo由一個(gè)空白頁面開始,從零編寫代碼。而且這個(gè)加密貨幣生態(tài)系統(tǒng),能夠適應(yīng)未來,不會(huì)過時(shí),因?yàn)樗泻罅孔蛹用芩惴▉肀U掀溟L(zhǎng)期的安全。作為該協(xié)議的一部分,該貨幣采用了隨機(jī)化點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)、新的共識(shí)機(jī)制和獨(dú)特的工作量證明挖礦技術(shù)。這些技術(shù)組合在一起,成為一個(gè)無需信任第三方的分布式帳本。最重要的是,為Mochimo貨幣開發(fā)的各種算法包括多種創(chuàng)新和功能,為當(dāng)今困擾現(xiàn)有和新型區(qū)塊鏈的一些最關(guān)鍵問題提供了已知有效的解決方案。
以下簡(jiǎn)短地列舉了一些我們的創(chuàng)新之處:
1. ChainCrunch技術(shù)
這個(gè)專有的技術(shù)將區(qū)塊數(shù)據(jù)的總大小降低,保證可擴(kuò)展并處理大量交易的能力(6.75年內(nèi)從現(xiàn)有的1000 TPS擴(kuò)展到20000 TPS);對(duì)Mochimo來說,不論是短期內(nèi)還是長(zhǎng)期,擴(kuò)展(scaling)不是問題。
2. Triggs算法
專有的工作量證明算法,可以確保FIFO交 易以固定的交易費(fèi)用處理。將 無限期地為所有級(jí)別的礦工保持挖礦的可行性。
3. Mochimo共識(shí)機(jī)制
基于隨機(jī)網(wǎng)絡(luò)模型構(gòu)建的新系統(tǒng),允許高速匯聚,孤立鏈修剪(orphaned chain pruning)。以及數(shù)學(xué)上可證明的共識(shí),這個(gè)共識(shí)優(yōu)于許多加密貨幣使用的的謠言共識(shí)方式(consensus- by-rumor)。
4. 量子計(jì)算方面的安全性
通過部署由歐盟資助的PQCRYPTO研究組織審查過的WOTS +來保障Mochimo地址的安全,并通過讓整個(gè)MCM協(xié)議基于量子安全算法,Mochimo開發(fā)團(tuán)隊(duì)解決了加密貨幣存在的一個(gè)關(guān)鍵問題。這個(gè)問題最終將導(dǎo)致基于ECDSA的協(xié)議,如比特幣,以太坊和所有ERC-20代幣在功能上無法安全運(yùn)轉(zhuǎn),不論是用作交易網(wǎng)絡(luò)還是價(jià)值存儲(chǔ)。
5.公平的分發(fā)方式
最少量預(yù)挖給開發(fā)團(tuán)隊(duì),沒有ICO,不斷自我調(diào)節(jié)和恒定的挖礦難度,以及緩慢 減少的區(qū)塊獎(jiǎng)勵(lì)的保護(hù)性措施等內(nèi)置的防護(hù)因素,一起保證了MCM幣的公平分發(fā),而且可以保證“更遲”接觸到MCM的人更容易加入。
Mochimo開發(fā)團(tuán)隊(duì)由系統(tǒng)架構(gòu)師Matt Zweil領(lǐng)導(dǎo), 他是一位專家級(jí)網(wǎng)絡(luò)架構(gòu)師,設(shè)計(jì)并部署了業(yè)內(nèi)交易網(wǎng)絡(luò),數(shù)據(jù)中心設(shè)計(jì)和服務(wù)提供商網(wǎng)絡(luò)領(lǐng)域的一些最艱 巨的項(xiàng)目。 Mochimo的主開發(fā)人是Trigg,他是C語言的大師級(jí)程序員和人工智能研究員,自70年代末以來一直致力于開發(fā)具有創(chuàng)新性的系統(tǒng)。他們共 同創(chuàng)造了MCM協(xié)議和ChainCrunch技術(shù)。在更大的Mochimo開發(fā)團(tuán)隊(duì)的協(xié)助下,Matt和Trigg已經(jīng)實(shí)現(xiàn)了一 個(gè)已在運(yùn)轉(zhuǎn)的協(xié)議,這是本文的主要內(nèi)容。
MOCHIMO協(xié)議設(shè)計(jì)理念
從2009年起投資了第一波和第二波加密貨幣,并對(duì)其做出貢獻(xiàn)后,2017年初,一伙區(qū)塊鏈領(lǐng)域的元老聚在一起,啟動(dòng)了Mochimo項(xiàng)目。作為加密貨幣純粹主義者,他們的首要任務(wù)之一就是提煉總結(jié)出一套決定加密貨幣設(shè)計(jì)的原則。
MCM的起始目標(biāo)是成為一個(gè)適應(yīng)未來的加密貨幣。這樣的貨幣本質(zhì)上是真正去中心化的,無需信任第三方,永不可變并 且可無限擴(kuò)展沒有上限。我們的協(xié)議已經(jīng)實(shí)現(xiàn)了這四項(xiàng)并且之外還實(shí)現(xiàn)了更多。
總之,Mochimo加密貨幣網(wǎng)絡(luò)是一個(gè)點(diǎn)對(duì)點(diǎn)、無信任(trustless)的分布式賬本,具有高速匯聚和強(qiáng)大的雙花保護(hù)(Double——spend)。Mochimo不 是其他區(qū)塊鏈的分叉,而且簡(jiǎn)單地重用市面上已有的代碼實(shí)現(xiàn)不了Mochimo目前所能做到的。相反, Mochimo加密貨幣生態(tài)系統(tǒng)是通過新的代碼對(duì)中本聰式區(qū)塊鏈、分布式帳本的重新部署。重新部署的區(qū)塊鏈不僅是基于中本聰最初的愿景,還通過多年來的經(jīng)驗(yàn)性更新得到增強(qiáng)。在這些原則中,最至關(guān)重要的是去中心化。
現(xiàn)如今,加密貨幣基本分為兩大類:
1.真正的去中心化并且因此無信認(rèn)(Trustless)
2.半中心化
所有半中心化加密貨幣都應(yīng)該被拋棄,沒有例外。任何事物的中心化比如: 交易所,信用信息,貨幣等都會(huì)吸引攻擊。與區(qū)塊鏈的本質(zhì): 獨(dú)立的帳本相反,中心化的權(quán)威,不論它們是對(duì)是錯(cuò),都基本上決定著網(wǎng)絡(luò)上帳本的當(dāng)前狀態(tài)。
當(dāng)然,有些人可能會(huì)把這個(gè)缺陷稱作好處。為了轉(zhuǎn)移大家對(duì)其架構(gòu)中固有缺陷的注意力,中心化系統(tǒng)經(jīng)常向大家展示超高的交易吞吐量數(shù)據(jù)。他們未能提到這樣做的代價(jià)相當(dāng)于割掉最核心的無信任(trustless)環(huán)境,這像心臟一樣關(guān)鍵。實(shí)際上,每秒過高的交易數(shù)量(“TPS“) 的廣告經(jīng)常初步說明了系統(tǒng)創(chuàng)建者的實(shí)際意圖有可能是想對(duì)投資者的資產(chǎn)有更多的控制。
為什么“快速 ”意味著“控制”?一個(gè)中心化的權(quán)威機(jī)構(gòu)可以處理數(shù)十/百萬的TPS,這不是因?yàn)樗麄兊墓沧R(shí)機(jī)制有多高效,而是因?yàn)樗械墓沧R(shí)都被忽略了。用政治來類比,獨(dú)裁政權(quán)是高效的,但這個(gè)政府不再真正代表人民,也不再為人民服務(wù)。當(dāng)前加密貨幣實(shí)現(xiàn)交易速度可擴(kuò)展的障礙為:目前的共識(shí)機(jī)制的速度是瓶頸。那么 我們?nèi)绾卧诓粚⒖刂平唤o中心化權(quán)威的情況下保持或提高速度呢?我們認(rèn)為,主要的設(shè)計(jì)挑戰(zhàn)如下:
●確保區(qū)塊鏈大小不會(huì)大到失去控制
●維持通信的帶寬要求,讓普通人容易加入。任何人都應(yīng)該能夠簡(jiǎn)單輕松地創(chuàng)建節(jié)點(diǎn)并加入網(wǎng)絡(luò),完全同步賬本,并開始處理交易并挖區(qū)塊。
●允許快速傳播交易,區(qū)塊更新和快速匯聚,所有這些都通過有效且可在數(shù)學(xué)上證明的競(jìng)爭(zhēng)解決方案實(shí)現(xiàn)。
為了解決這些問題,Mochimo生態(tài)系統(tǒng)引入了一些創(chuàng)新,其中最主要的是“ChainCrunch”,它允許任何單個(gè)節(jié)點(diǎn)在丟棄舊區(qū)塊的同時(shí)不影響查看整個(gè)區(qū)塊鏈。Mochimo還 具有極快速的匯聚速度和對(duì)孤立鏈的修剪(Pruning)。為了與這一愿景保持一致, Mochimo有加密貨幣世界中一些說明文檔最詳盡的代碼。
1. 自主性去中心化
我們的第一信條是,一個(gè)加密貨幣要做到真正的去中心化,在發(fā)布后,任何參與者都不應(yīng)當(dāng)有能力控制其政策方向,無論礦工還是其開發(fā)者。因此,管理系統(tǒng)的法則全部是代碼,并且沒有人應(yīng)該控制這個(gè)代碼。
因?yàn)檫@個(gè)原因,Mochimo拒絕目前一些新的加密貨幣所有嘗試的方法:可信節(jié)點(diǎn)(trustednodes)、投票機(jī)制、權(quán)益證明(POS, Proof of Stake)或代理權(quán)益證明(DPOS, Delegated Proofof Stake)。 不僅如此,我們完全拒絕挖礦算力的集中,因?yàn)檫@將允許這些參與者通過蠻力控制政策。不論是什么共識(shí)機(jī)制被用于加密貨幣中,只要它允許某-個(gè)參與者獲得比其他參與者更多的影響力,都會(huì)導(dǎo)致那些處于權(quán)力位置的人的權(quán)力得到進(jìn)一步集中。最終這將 破壞區(qū)塊鏈網(wǎng)絡(luò)的自治。這種操縱已經(jīng)在幾乎所有現(xiàn)有的加密貨幣中發(fā)生,我們可以將此統(tǒng)稱為中心化趨勢(shì)。它有可能導(dǎo)致這些區(qū)塊鏈的長(zhǎng)期消亡。
2. 自我修復(fù) 式賬本
Mochimo團(tuán)隊(duì)認(rèn)為,每個(gè)單獨(dú)的網(wǎng)絡(luò)節(jié)點(diǎn)必須能夠在不需要請(qǐng)求權(quán)威來源的情況下,確定網(wǎng)絡(luò)的狀態(tài),賬本以及任何指定的交易。需要信任單一權(quán)威,這是所有自治系統(tǒng)的短板。
出于這個(gè)原因,Mochimor的設(shè)計(jì)拒絕“主節(jié)點(diǎn)”,“超級(jí)節(jié)點(diǎn)”,“可信節(jié)點(diǎn)”和所有其他類似概念。這類方法的設(shè)計(jì)將讓中心化的權(quán)威有能力管理區(qū)塊鏈網(wǎng)絡(luò)的行為。簡(jiǎn)要地說:如果區(qū) 塊鏈網(wǎng)絡(luò)需要以任何形式依賴于參與者的互相信任才能運(yùn)轉(zhuǎn),那么該賬本是可變的。
如果區(qū)塊鏈?zhǔn)强勺兊?,那么這個(gè)加密貨幣實(shí)際上是一文不值的。
相反,當(dāng)MCM網(wǎng)絡(luò)內(nèi)出現(xiàn)沖突時(shí),節(jié)點(diǎn)本身將通過數(shù)學(xué)確定主鏈并獨(dú)立自主地修剪任何孤立鏈。同樣,交易和區(qū)塊解決方案不通過中心化的節(jié)點(diǎn)中繼,而是通過多播機(jī)制(Multicastmechanisms)點(diǎn)對(duì)點(diǎn)傳播到整個(gè)網(wǎng)絡(luò)。
Mochimo協(xié)議的每一環(huán)都拒絕中心化處理, 交易分發(fā)(transacTIon distribuTIon)、 節(jié)點(diǎn)探測(cè)(Peer detecTIon)、爭(zhēng)用解決(ContenTIon resolution),投票,Tie -breaking,代碼版本實(shí)施(code version enforcement)。這些機(jī)制都是薄弱環(huán)節(jié)。它們創(chuàng)造了讓賬本(Ledger)可變的機(jī)會(huì),其中任何一個(gè)都可能會(huì)因?yàn)槟橙喝藶榱烁淖儙け镜慕Y(jié)果和狀態(tài),而被濫用,從而導(dǎo)致其變得可變。只有通過運(yùn)行一個(gè)無需信任的系統(tǒng)(就是說,每個(gè)節(jié)點(diǎn)都有做決定并達(dá)成共識(shí)所需要的所有信息),加密 貨幣的終端用戶才能真正信任交易網(wǎng)絡(luò)。
3. 平等的挖礦門檻
擴(kuò)展(Scaling)是當(dāng)今第一代和第二代加密貨幣面臨的最大問題。目前大部分市值前100的加密貨幣對(duì)計(jì)算,帶寬和存儲(chǔ)要求越來越高。挖礦需要的資源需求增長(zhǎng)速度大多超過普通人的硬件迭代速度。隨著挖礦難度的增加,普通人再也無法參與挖礦。
一旦挖礦被有效地限制于具有足夠資源來支撐高性能計(jì)算和存儲(chǔ)資源的大型組織中,加密 貨幣的中心化控制就開始了。 因?yàn)橥诘V是中心化的,所以節(jié) 點(diǎn)也被礦工中心化。 通過這,這些礦工們開始控制加密貨幣的開發(fā)方向,并推遲或阻止任何降低其挖礦收益的創(chuàng)新。在此之后不久,惡意分叉和其他有害行為就隨之而來。
類似地,沒有人喜歡總是處于沒有權(quán)利可言的位置,而且如果所有決定總是不利于其他參與者,最終他們會(huì)拋棄這個(gè)加密貨幣,去支持更平等的選項(xiàng)。
隨著中心化的大的控制者不斷失去新的和小的參與者。這 個(gè)加密貨幣的目標(biāo)不再是去創(chuàng)造一個(gè)全民日常使用的可持續(xù)的價(jià)值存儲(chǔ)媒介(Store of Value),而是去代表最大的礦工的利益。
用戶將始終能夠挖Mochimo,并且不會(huì)被不良參與者邊緣化。
MOCHIMO的設(shè)計(jì)解決了許多問題
隨著加密貨幣變得成熟,大規(guī)模應(yīng)用導(dǎo)致各種問題出現(xiàn)。很多第二代加密貨幣試圖解決其中一個(gè)或更多問題。與那些只解決一部分問題的協(xié)議不同,Mochimo團(tuán)隊(duì)開發(fā)出 了統(tǒng)觀整體、未雨綢繆的解決方案。這個(gè)解決方案通過結(jié)合一系列加密貨幣設(shè)計(jì)上的創(chuàng)新得以實(shí)現(xiàn)。以下所有問題因而得到解決:
●量子計(jì)算機(jī)的威脅
●網(wǎng)絡(luò)可擴(kuò)展性的長(zhǎng)期解決方案
●通過轉(zhuǎn)賬費(fèi)用方面的創(chuàng)新以確保交易處理先進(jìn)先出(F.I.F.O.)
●交易吞吐量和安全性
1. 量子計(jì)算機(jī)的威脅
Mochimo解決的第一個(gè)也是最值得注意的問題是迅速發(fā)展的量子計(jì)算機(jī)對(duì)加密貨幣生態(tài)系統(tǒng)的威脅。目前大部分區(qū)塊鏈系統(tǒng)和加密貨幣的錢包地址和余額是通過量子不安全的數(shù)據(jù)簽名算法保護(hù)。目前最常被使用的是ECDSA( 即橢圓曲線數(shù)字簽名算法,比特幣、以太坊和所有ERC20代幣都使用此算法 ),量子計(jì)算攻擊ECDSA像戳紙一 樣簡(jiǎn)單 。
盡管對(duì)傳統(tǒng)計(jì)算機(jī)來說破解ECDSA是計(jì)算死結(jié)(Computationally intractable)。 ECDSA的破解是量子計(jì)算機(jī)的最先的發(fā)展目標(biāo)之一。鑒于此, 這些使用ECDSA的加密貨幣是暴露于風(fēng)險(xiǎn)中的,盡管它們本身已是了不起的成就。因而他們實(shí)際上不可被視作長(zhǎng)期的價(jià)值存儲(chǔ)媒介。而且,也沒有什么神奇的補(bǔ)J可以加到他們的代碼中,使它們變得可防量子攻擊。
這是防量子攻擊能力需要從零開發(fā)的原因,也解釋了我們?yōu)槭裁床灰匀魏维F(xiàn)有的區(qū)塊鏈項(xiàng)目為基礎(chǔ)借鑒、分叉或設(shè)計(jì)。一些意識(shí)到ECDSA量子方面缺陷的組織和個(gè)人已經(jīng)開始編寫“后量子時(shí)代安全”的新加密協(xié)議標(biāo)準(zhǔn)。其中最值得一提的是歐盟資助的PQCRYPTO工作組。 他們的“ICT- 645622”文檔是基于量子計(jì)算機(jī)目前和預(yù)期能力的量子安全加密算法參考標(biāo)準(zhǔn)。
該標(biāo)準(zhǔn)中,他們推薦了一些抗量子數(shù)字簽名算法。量子領(lǐng)域計(jì)算能力的提高并不影響這些算法的計(jì)算不可解性(Computationally intractable) 。 Mochimo開發(fā)團(tuán)隊(duì)這些算法中選擇了使用Winternitz一次性簽名的WOTS+版本的XMSS+(由Andreas Hulsing于 2017年9月提出并證明)。
2. 網(wǎng)絡(luò)可擴(kuò) 展性的長(zhǎng)期解決方案
Mochimo是一個(gè)交易網(wǎng)絡(luò); 因此,交易網(wǎng)絡(luò)的可擴(kuò)展性(Scalability)是一個(gè)首要考慮因素。許多協(xié)議都不計(jì)后果地允許其區(qū)塊鏈區(qū)塊大小無限地增長(zhǎng),通常增到數(shù)百GB,甚至TB。
以比特幣為例,我們可以清楚地看到其區(qū)塊大小每12-16個(gè)月就翻一倍。地址和簽名數(shù)據(jù)相對(duì)較小的比特幣區(qū)塊,一直以指數(shù)級(jí)曲線增長(zhǎng)。截至2018年3月,原始數(shù)據(jù)已超過180GB。眾所周知經(jīng)常網(wǎng)絡(luò)擁堵的以太坊有過的多次網(wǎng)絡(luò)暫停,都是由更快得多的區(qū)塊大小增加速度導(dǎo)致,它的區(qū)塊大小(包括EVM trace數(shù) 據(jù))現(xiàn)在必需存儲(chǔ)空間已經(jīng)超過1TB。
其他加密貨幣在網(wǎng)絡(luò)需求和區(qū)塊大小增加的情況下,這方面不會(huì)更好。鑒于這種交易網(wǎng)絡(luò)擁堵問題,很容易理解為什么可能存在實(shí)施量子安全措施的阻力。地址和簽名數(shù)據(jù)大小比比特幣或以太坊等協(xié)議的大一個(gè)數(shù)量級(jí)。
盡管存在著這種擁堵問題,這些加密貨幣開發(fā)者總是聲稱摩爾定律預(yù)測(cè)的未來技術(shù)發(fā)展速度跟得上區(qū)塊鏈區(qū)塊大小的增加速度。訴諸摩爾定律根本上是錯(cuò)誤的,因?yàn)榧用茇泿排u(píng)者們憑經(jīng)驗(yàn)實(shí)際觀察到,幾乎所有區(qū)塊鏈的存儲(chǔ)消耗方面增長(zhǎng)值都超過了摩爾定律18個(gè)月周期的技術(shù)發(fā)展目標(biāo)值。
不過Mochimo已經(jīng)通過名為ChainCrunchTM的創(chuàng)新性區(qū)塊鏈處理算法解決了區(qū)塊大小增長(zhǎng)過大并失控的問題。ChainCrunchTM是 Mochimo專有技術(shù)。它可以讓用戶運(yùn)行完整的節(jié)點(diǎn),但只保留歷史區(qū)塊數(shù)據(jù)的一小部分。ChainCrunchTM受HASH256保護(hù), 并對(duì)量子計(jì)算攻擊免疫。因?yàn)檫@項(xiàng)創(chuàng)新(這個(gè)文檔后面將詳細(xì)介紹) -Mochimo區(qū) 塊鏈大小不會(huì)增長(zhǎng)。相反, 無論區(qū)塊鏈網(wǎng)絡(luò)運(yùn)行了多少年或我們處理多少交易,它的大小都完美穩(wěn)定于一個(gè)很小的值。
3. 通過轉(zhuǎn)賬費(fèi)用方面的創(chuàng)新以確保交易處理先進(jìn)先出(F.I.F.O.)
現(xiàn)有區(qū)塊鏈交易費(fèi)系統(tǒng)存在的問題是它們激勵(lì)礦工優(yōu)先處理愿意支付更高手續(xù)費(fèi)的用戶的交易,本該是平等、去中心化的網(wǎng)絡(luò)因此受到了破壞。礦工選擇高手續(xù)費(fèi)的交易,會(huì)導(dǎo)致支付了低手續(xù)費(fèi)或零手續(xù)的交易在繁忙的內(nèi)存池中等待數(shù)小時(shí)。(內(nèi)存池即Mempool,或MemoryPool,用于臨時(shí)存儲(chǔ)未確認(rèn)的交易)。比如以太坊上的ICO進(jìn)行時(shí),用戶會(huì)為了插隊(duì)搶先完成交易,付夸張、驚人的高額手續(xù)費(fèi)。這種用戶行為不利于可靠、可擴(kuò)展的區(qū)塊鏈系統(tǒng)的發(fā)展。只有改變挖礦激勵(lì)方式才能讓其停止。
Mochimo開發(fā)團(tuán)隊(duì)認(rèn)為激勵(lì)礦工優(yōu)先處理某類交易起的作用相反,無益于健康的網(wǎng)絡(luò)。因此,Mochimo協(xié)議采用了一-種新的費(fèi)用不變的方法處理交易。 Mochimo網(wǎng)絡(luò)上發(fā)送交易的手續(xù)費(fèi)始終是: 0.000005 $MCM.這樣描述可更直觀地理解交易手續(xù)費(fèi)有多小: 假設(shè)Mochimo的市值超過了所有替代貨幣(AItcoin)總市值,1個(gè)MCM便值25000美元,這時(shí)的交易手續(xù)費(fèi)仍然小于0.13美元。因而,我們可以放心地說,MCM的交易成本在很多年內(nèi)都會(huì)小到微不足道。這有利于MCM的日常使用。
4. 交易吞吐量和安全性
Mochimo協(xié)議上的每筆交易都必須有以下6個(gè)基本元素: 源地址(Source address) ,目標(biāo)地址(Destination address),變更后地址(Change Address), 已發(fā)送金額(Amount sent),礦工費(fèi)(固定不變)和余額變更后金額(Balance Change Amount)。
它還有以下重要限制:源地址在使用后總是被清空和銷毀。系統(tǒng)會(huì)檢查確認(rèn)已發(fā)送余額、余額變更后金額、礦工費(fèi)之和等于源地址余額。這樣,每筆交易的所占字節(jié)大小固定,輸入輸出簡(jiǎn)單到可忽略不計(jì),對(duì)丟失的幣的保護(hù)也非常簡(jiǎn)單。
此外,如果不對(duì)現(xiàn)有源地址中的所有貨幣進(jìn)行完整記帳,則無法發(fā)送交易。也不能匯總多個(gè)輸入和輸出。地址的所有錢包和余額管理都是錢包軟件的客戶端功能。
與Mochimo的ChainCrunchTM技術(shù)實(shí)現(xiàn)的非凡速度增長(zhǎng)相結(jié)合,我們網(wǎng)絡(luò)上交易的查詢, 驗(yàn)證和執(zhí)行速度是業(yè)內(nèi)最快的。更 重要的是,因?yàn)橛蠧hainCrunchTM, 隨著網(wǎng)絡(luò)規(guī)?;蚪灰淄掏铝康脑鲩L(zhǎng),速度不會(huì)減慢或停滯。相反,交易速度會(huì)一直保持很快,并且隨著普通節(jié)點(diǎn)的處理硬件的增加,它將超出其初始能力。
所以Mochimo速度很快,并且只會(huì)隨著時(shí)間推移變得更快。
主要技術(shù)概述
1. 使用隨機(jī)網(wǎng)絡(luò)模型的連接管理
MCM連接管理的設(shè)計(jì)目標(biāo)不是僅連接到最近的,知名的的或地理上相近的點(diǎn)(Peers,或Nodes),而是保證一個(gè)無信任的環(huán)境, 以此讓Mochimo網(wǎng)絡(luò) 上的每個(gè)節(jié)點(diǎn)在整個(gè)網(wǎng)絡(luò)上隨機(jī)打開和關(guān)閉連接。隨機(jī)網(wǎng)絡(luò)協(xié)議(Random Networks)旨在快速和異步地將所有收到的交易信息傳播到網(wǎng)絡(luò)的其余部分。Albert-Laszlo Barabasi的 在他的網(wǎng)絡(luò)科學(xué)出版物: RandomNetworks5中正式分析了隨機(jī)網(wǎng)絡(luò)理論(Random Network)。
過程:服務(wù)器系統(tǒng)上準(zhǔn)備好候選的知名節(jié)點(diǎn)列表。這些只是該版本系統(tǒng)自帶的標(biāo)準(zhǔn)節(jié)點(diǎn)。通過命令行下使用-S開關(guān), 該節(jié)點(diǎn)列表可被用戶提供的節(jié)點(diǎn)覆蓋。用戶可以提供一個(gè)用于初始連接的特定節(jié)點(diǎn),或是包含一系列節(jié)點(diǎn)的文件。雖然Mochimo開發(fā)團(tuán)隊(duì)設(shè)置了那些知名的節(jié)點(diǎn),它們與其他節(jié)點(diǎn)沒有不同。
初始化時(shí),服務(wù)器加載知名節(jié)點(diǎn)或用戶提供的列表,將其隨機(jī)化,并隨機(jī)選擇-個(gè)準(zhǔn)備連接的點(diǎn)。連接時(shí),服務(wù)器執(zhí)行OP_ CODE: GET_ PEER,如果成功,則在第一度連接中獲得一個(gè)復(fù)制的最近節(jié)點(diǎn)列表。由此列表,服務(wù)器隨機(jī)讓目前的16節(jié)點(diǎn)清單開始第二度連接,每個(gè)節(jié)點(diǎn)都嘗試連接,并且失敗的連接總是被修剪掉(Pruning)。對(duì)于每個(gè)失敗連接,服務(wù)器向一個(gè)成功的二度連接發(fā)送、執(zhí)行GETPEER,隨機(jī)化獲得的結(jié)果,并繼續(xù)讓目前節(jié)點(diǎn)列表開始唯一的第三度連接。
輪換連接的隨機(jī)化的網(wǎng)絡(luò)意味著開放網(wǎng)絡(luò)上兩個(gè)節(jié)點(diǎn)(Node)之間的分隔度是16^D = N,其中D是分隔度,N是網(wǎng)絡(luò)上的節(jié)點(diǎn)數(shù)。例如,有恰好4096個(gè)節(jié)點(diǎn)的網(wǎng)絡(luò)中任何兩個(gè)節(jié)點(diǎn)之間的平均分隔度將是16^3 = 4096或3個(gè)跳轉(zhuǎn)(Hop)。 對(duì)于65536個(gè)節(jié)點(diǎn)的網(wǎng)絡(luò),平均增加到4個(gè)跳轉(zhuǎn)。
連接并更新節(jié)點(diǎn)列表的過程不斷重復(fù),直到當(dāng)前節(jié)點(diǎn)列表中包含16個(gè)與初始知名節(jié)點(diǎn)至少2度或3度相隔的活動(dòng)節(jié)點(diǎn)。當(dāng)前節(jié)點(diǎn)超時(shí)并無法連接時(shí),四度連接會(huì)以同樣的方式循環(huán)接替當(dāng)前節(jié)點(diǎn)列表,即通過從上一次添加的節(jié)點(diǎn)中獲取節(jié)點(diǎn)列表。這樣,每個(gè)Mochimo服務(wù)器會(huì)永遠(yuǎn)不斷地循環(huán)連接全世界新的和不同的節(jié)點(diǎn)。
此外,此隨機(jī)網(wǎng)絡(luò)理論可用于數(shù)學(xué)上確定Mochimo網(wǎng)絡(luò)上任意兩個(gè)節(jié)點(diǎn)之間的平均分隔度。我們有意這樣設(shè)計(jì):隨機(jī)在網(wǎng)絡(luò)中抓取新節(jié)點(diǎn),并且每個(gè)Mochimo服務(wù)器動(dòng)態(tài)地確保交易鏡像和區(qū)塊分配的快速傳播。
那么如何擴(kuò)展?使用這個(gè)網(wǎng)絡(luò)類型,假設(shè)節(jié)點(diǎn)數(shù)量N等于 目前比特幣大概的節(jié)點(diǎn)數(shù),循環(huán)、隨機(jī)選擇節(jié)點(diǎn)數(shù)k=16, 那么Mochimo網(wǎng)絡(luò)上任意兩節(jié)點(diǎn)間平均分隔度會(huì)在3到4之間。這意味著,交易信息擴(kuò)散,區(qū)塊發(fā)現(xiàn)消息傳遞,全網(wǎng)范圍匯聚需要最多3到4次跳轉(zhuǎn)來獲得相關(guān)數(shù)據(jù)。
2. 交易鏡像
交易鏡像的設(shè)計(jì)目標(biāo)是利用隨機(jī)網(wǎng)絡(luò)模型(RandomNetworks model)。
要理解鏡像在哪里起作用,首先要理解主服務(wù)器進(jìn)程中維持一組循環(huán)更新的當(dāng)前節(jié)點(diǎn),接收多個(gè)交易請(qǐng)求,讓其排隊(duì),并驗(yàn)證簽名,然后生成子進(jìn)程以執(zhí)行交易鏡像。
過程: 服務(wù)器對(duì)16個(gè)最近的節(jié)點(diǎn)(Peers)維持一組節(jié)點(diǎn)連接,(又稱: 當(dāng)前節(jié)點(diǎn)表。英文: CURRENT-PEER table),并查看每個(gè)節(jié)點(diǎn)的是否有外來請(qǐng)求。通過挑戰(zhàn)-回應(yīng)(Challenge-response),三向握手(three- -way handshake), 服務(wù)器為每個(gè)外來請(qǐng)求生成唯一的通信密鑰。
通過OP_ CODE: OP _TX,從一個(gè)節(jié)點(diǎn)接收到一個(gè)交易信息。服務(wù)器解析這個(gè)交易信息,并將其傳遞給到交易驗(yàn)證函數(shù)(Transaction Validator function)(TX_ _VAL)。
TX_ VAL可驗(yàn)證一些參數(shù)L,包括如下:節(jié)點(diǎn)傳播的當(dāng)前區(qū)塊是否與本地系統(tǒng)相同? 根據(jù)本地區(qū)塊鏈帳本(L edger)交易參數(shù)是否有效?然后它執(zhí)行重復(fù)檢測(cè);如果所有交易參數(shù)沒問題,則執(zhí)行簽名驗(yàn)證。
如果通過驗(yàn)證,TX將被移至CL EAN_ TXQUEUE。如果TX未通過驗(yàn)證,則會(huì)被丟棄,發(fā)送者也將被加入黑名單。對(duì) 于移至CL EANTXQUEUE的交易,服務(wù)器異步生成子進(jìn)程來服務(wù)CL EAN _TXQUEUE。子進(jìn)程通過以下方式為其服務(wù):在當(dāng)前節(jié)點(diǎn)列表(CURRENT PEERL IST)中為最高到16個(gè)節(jié)點(diǎn)形成交易鏡像(除了 發(fā)出交易的節(jié)點(diǎn)),然后退出。與此同時(shí),服務(wù)器繼續(xù)其正常的處理循環(huán)。TX鏡像通過外來源-哈希(inbound source- hash)驗(yàn)證來保證不向交易發(fā)起者生成鏡像。
3. 三向握手
所有點(diǎn)對(duì)點(diǎn)的通信中,Mochimo都 會(huì)部署一個(gè)防止拒絕服務(wù)攻擊(英語: denial-of -service attack,縮寫: DoS)、 幌騙攻擊(Spoofing)和中間人攻擊(man-in- -the- -middle attack)的安全功能。這種 三向握手可以在許多網(wǎng)絡(luò)協(xié)議中找到;以下是它在Mochimo中的工作原理。
過程: 對(duì)于每個(gè)新的外出連接(Outboundconnection),Mochimo服 務(wù)器會(huì)在一個(gè)Hello消息中生成隨機(jī)的16比特(bit)的標(biāo)識(shí)符。該標(biāo)識(shí)符稱為ID1。接收的節(jié)點(diǎn)(Peer)響應(yīng)的信息是包含ID1的Hello-ack和隨機(jī)生成的識(shí)別唯一識(shí)別符ID2。 原來發(fā)送ID1的節(jié)點(diǎn)發(fā)送包含ID1和I1D2的Hello- ACK-ACK,完成三向握手,這樣,兩個(gè)節(jié)點(diǎn)就“完全相鄰”(Fully Adjacent)。 通過添加標(biāo)識(shí)符,它們現(xiàn)在可以這會(huì)話期可以互 相發(fā)送和接收信息。
每次標(biāo)識(shí)符是唯一的,只在那個(gè)短暫的會(huì)話期有效,這樣可以防止通過偽造節(jié)點(diǎn)(node)進(jìn)行的拒絕服務(wù)攻擊(DoS)和中間人攻擊。因?yàn)槊看谓?易時(shí)會(huì)重新生成唯一的ID1和ID2, Mochimo的三向握手提供快速、簡(jiǎn)單和一次性的安全防護(hù)。
任何節(jié)點(diǎn)接收的信息如果:
1.不是三向握手狀態(tài)機(jī)的一部分,或
2.沒有正確的ID,就都會(huì)被直接忽略。
4. 快速服務(wù) 器初始化
Mochimo服務(wù)器剛上線時(shí)會(huì)處于兩種狀態(tài):純凈啟動(dòng)(CleanBoot)或優(yōu)雅重啟(Graceful Restart)。 只有終端用戶從監(jiān)視器關(guān)閉系統(tǒng)時(shí),服務(wù)器才會(huì)進(jìn)行優(yōu)雅重啟。所有其他情況下,如果系統(tǒng)下線(比如因?yàn)榻鉀Q爭(zhēng)用,剪除孤立鏈,或因某種致命錯(cuò)誤下線), 服務(wù)器的所有狀態(tài)信息都會(huì)被清除。這包括節(jié)點(diǎn)列表本地區(qū)塊鏈帳本,全部區(qū)塊數(shù)據(jù),磁盤上的任何候選塊等。
過程:任何時(shí)候確認(rèn)有損壞(Corruption)或爭(zhēng)用(Contention)問題,Mochimo系 統(tǒng)這樣維持穩(wěn)定性:先純凈啟動(dòng),然后利用Mochimo快速匯聚的特點(diǎn)重建區(qū)塊文件和本地帳本。因?yàn)镸ochimo上爭(zhēng)用極少見,因此軟件強(qiáng)制的純凈啟動(dòng)是不常有的。
純凈啟動(dòng)時(shí),系統(tǒng)初始化其主要IP列表,并創(chuàng)建最小2度和3度的隨機(jī)節(jié)點(diǎn)(Peer)列表。
然后服務(wù)器用MCM專有的Quorum函數(shù)在節(jié)點(diǎn)列表里存在的節(jié)點(diǎn)中識(shí)別最長(zhǎng)的區(qū)塊鏈(即主鏈)。最長(zhǎng)的鏈執(zhí)行的工作量最多。為了識(shí)別它,Mochimo節(jié)點(diǎn)會(huì)維護(hù)一個(gè)歷史區(qū)塊尾方件(Trail File), 上面有一 直到最初的第一個(gè)區(qū)塊(即創(chuàng)世區(qū)塊,Genesis Block)的區(qū)塊鏈信息。這個(gè)尾文件里包含了所有已解決的區(qū)塊的條目(每個(gè)100字節(jié)),它們組成了一個(gè)可驗(yàn)證的區(qū)塊解決過程記錄的鏈表。(區(qū)塊解決過程記錄?了,包括Nonce、Hash和用于獲得每個(gè)區(qū)塊難度要求的時(shí)間簽名)。
這個(gè)文件會(huì)被從頭到尾遍歷。對(duì)于每個(gè)已解決的區(qū)塊,其解決難度會(huì)被加入計(jì)數(shù)器(Counter)。T-File鏈中已解決區(qū)塊的權(quán)重等于2^(難度- 1), 意味著難度35的已解決區(qū)塊的權(quán)重是難度34區(qū)塊權(quán)重的2倍。因?yàn)門-File鏈?zhǔn)沁B接著的(可證明),并且包含X難度的已解決區(qū)塊信息,通過請(qǐng)求節(jié)點(diǎn)(Peer)的T-File,我們可以計(jì)算這個(gè)節(jié)點(diǎn)的從第一個(gè)區(qū)塊到最新區(qū)塊所執(zhí)行的總工作量。如果這條鏈的總權(quán)重是網(wǎng)絡(luò)上可見的最高值,那么這個(gè)節(jié)點(diǎn)(node)就在主鏈上,并且是可臨時(shí)信任的。
5. CHAINCRUNCH背后的技術(shù)
Mochimo最重要的專有創(chuàng)新之一, ChainCrunchTM, 可以讓區(qū)塊鏈網(wǎng)絡(luò)維持一個(gè)可完整 查看的帳本,以完美的準(zhǔn)確度驗(yàn)證、確認(rèn)區(qū)塊,并在短短幾分鐘(而不是幾周)內(nèi)重建一個(gè)新或現(xiàn)有節(jié) 點(diǎn)的本地數(shù)據(jù)庫。此外,ChainCrunchTM 允許極快查找交易確認(rèn)信息的同時(shí),保持很小的區(qū)塊大小和存儲(chǔ)要求(與其他加密貨幣所需存儲(chǔ)要求相比,只是一點(diǎn)點(diǎn))。
過程一個(gè)Mochimo“Aeon”是256個(gè)區(qū)塊,每個(gè)區(qū)塊的解決時(shí)間間隔為337.5秒,所以Aeon的平均生命周期為86,400秒, 即一天。Mochimo服務(wù)器在磁盤上維護(hù)著一個(gè)本地?cái)?shù)據(jù)庫,它是網(wǎng)絡(luò)上所有有余額地址的排序列表(按地址索引)。具體情境中描述: 系統(tǒng)通過處理有效交易并對(duì)每個(gè)成功交易后的變化進(jìn)行排序,來對(duì)該數(shù)據(jù)庫進(jìn)行添加和增量(根據(jù)從區(qū)塊1到區(qū)塊255)。 到達(dá)區(qū)塊255時(shí),系統(tǒng)將數(shù)據(jù)庫作為區(qū)塊256寫入磁盤,給它哈希值,并附加尾部信息(Trailer)。這個(gè)特殊區(qū)塊稱為“新生區(qū)塊(或Neogenesis區(qū)塊,英文: Neogenesis block)”。從新生區(qū)塊開始,系統(tǒng)繼續(xù)解決區(qū)塊257。
從這個(gè)新生區(qū)塊寫入磁盤的那一刻起,系統(tǒng)就不再需要來自區(qū)塊鏈的所有歷史數(shù)據(jù)來運(yùn)行。
新生區(qū)塊可以讓系統(tǒng)丟棄鏈上的幾乎所有區(qū)塊,但仍然以完美的準(zhǔn)確度驗(yàn)證交易。使用ChainCrunchM和新生區(qū)塊,系統(tǒng)將永遠(yuǎn)不必在磁盤上存儲(chǔ)超過512個(gè)塊,因?yàn)橹匦聠?dòng)新系統(tǒng)需要從第一個(gè)先前的新生區(qū)塊重建(就是說,不是當(dāng)前Aeon的新生區(qū)塊)。
當(dāng)新系統(tǒng)上線或由于未通過爭(zhēng)用檢查而重新啟動(dòng)時(shí),系統(tǒng)將使用隨機(jī)網(wǎng)絡(luò)模型查找主鏈上的選定的一組(Quorum)節(jié)點(diǎn)(Peers)。從那時(shí)起,Mochimo服 務(wù)器向Quorum中的一個(gè)隨機(jī)成員發(fā)出請(qǐng)求,并下載先前的第-個(gè)新生成區(qū)塊。
由于每256個(gè)區(qū)塊產(chǎn)生一個(gè)新的新生區(qū)塊,所請(qǐng)求的區(qū)塊序號(hào)將是網(wǎng)絡(luò)上的當(dāng)前區(qū)塊減去(最多)511個(gè)區(qū)塊。因此,完全同步Mochimo節(jié) 點(diǎn)所需的區(qū)塊數(shù)將始終保持在257和511區(qū)塊之間。如第16頁的圖中所示,無論您在第二個(gè)Aeon中的哪個(gè)位置,您與先前的新生區(qū)塊之間的距離總是小于512個(gè)塊。
服務(wù)器下載的未受信任的新生成塊包含原始帳本(ledger)文件,列出Mochimo網(wǎng)絡(luò) 中每個(gè)有余額的地址的余額。Mochimo服務(wù)器以未受信任的狀態(tài)導(dǎo)入此帳本(L edger),并使用它來驗(yàn)證鏈中隨后的256個(gè)區(qū)塊(每次從Quorum群中提取一個(gè)區(qū)塊,以此帳本對(duì)其進(jìn)行驗(yàn)證,同時(shí)根據(jù)需要進(jìn)行調(diào)整,并在本地尾文件中進(jìn)行構(gòu)建)。
到達(dá)第256個(gè)區(qū)塊時(shí),服務(wù)器生成其自己的新生區(qū)塊(該區(qū)塊以臨時(shí)可信的狀態(tài)存在),并 開始驗(yàn)證當(dāng)前Aeon中的所有現(xiàn)有區(qū)塊,直到到達(dá)與Quorum相同的當(dāng) 前區(qū)塊,并與其驗(yàn)證區(qū)塊的哈希值。從那時(shí)起,服務(wù)器等待由非Quorum成員解決新塊,如果該塊可以針對(duì)服務(wù)器的本地狀態(tài)進(jìn)行驗(yàn)證,則稱服務(wù)器為“已同步”,并且本地狀態(tài)信息現(xiàn)在被信任。
服務(wù)器這時(shí)進(jìn)入“在線”狀態(tài)并像往常-樣發(fā)送和接收交易,嘗試解決區(qū)塊等。整個(gè)過程從開始到結(jié)束通常需要幾分鐘,具體取決于多長(zhǎng)時(shí)間才能解決下一個(gè)區(qū)塊。
6. 共識(shí)算法
共識(shí)算法回答了一個(gè)問題:“節(jié)點(diǎn)如何知道它是在主鏈還是孤立鏈(Orphaned Chain)上?”Mochimo根據(jù)廣播節(jié)點(diǎn)所在區(qū)塊鏈執(zhí)行的工作量,通過驗(yàn)證“BLOCKFOUND”消息來回答這個(gè)問題。要得出這個(gè)值,我們必須首先介紹尾文件(Trailer File)和 鏈權(quán)重(ChainWeight)的概念。
過程: Mochimo尾文件(Trailer File)是自 自創(chuàng)世區(qū)塊以來每個(gè)區(qū)塊的尾部信息的鏈表(L inked list), 不論系統(tǒng)處于哪個(gè)Aeon還是已經(jīng)有了數(shù)千或數(shù)百萬個(gè)區(qū)塊。每個(gè)尾文件都是100字節(jié)的數(shù)據(jù),因此即使Mochimo運(yùn)行了數(shù)千年, 這樣大小的數(shù)據(jù)也不會(huì) 大到無法儲(chǔ)存。尾文件是不可變的,它包含:每個(gè)區(qū)塊的開始和解決時(shí)間,區(qū)塊哈希(Block Hash), 解決它的Nonce/ Hash(哈希)以及解決時(shí)所需的難度。尾文件的鏈表用于計(jì)算聲稱已找到區(qū)塊的鏈的工作量之和。該值被稱為鏈的“權(quán)重”。
ChainCrunch的底層機(jī)制讓我們可以丟棄區(qū)塊數(shù)據(jù)的同時(shí),保留從第一個(gè)區(qū)塊到當(dāng)前區(qū)塊解決記錄的鏈表。尾文件是ChainCrunchTM這個(gè)底層機(jī)制的一部分。
為了確定所執(zhí)行的工作量,我們只需將每個(gè)塊的難度值以二進(jìn)制形式加在一起。例如,以34的難度解決的區(qū)塊需要有34個(gè)前導(dǎo)零(L .eading Zero)的哈希(Hash)輸出值。 計(jì)算權(quán)重時(shí),我們將2^34加到解決該區(qū)塊的鏈的總權(quán)重上。如果下一個(gè)區(qū)塊以35的難度被解決,則該區(qū)塊的權(quán)重是之前的兩倍。
隨著網(wǎng)絡(luò)規(guī)模和礦工數(shù)量的增加,難度也相應(yīng)增加,使得每個(gè)解決的區(qū)塊隨著時(shí)間的推移比以前的區(qū)塊的權(quán)重值更高。 當(dāng)我們驗(yàn)證T- File時(shí),我們驗(yàn)證每個(gè)Hash(哈希)和nonce,開始和解決時(shí)間,重新創(chuàng)建難度(從區(qū)塊0計(jì)算),然后附加到候選鏈的權(quán)重上,這很重要。
使用鏈權(quán)重,而不是以區(qū)塊數(shù)量衡量的區(qū)塊鏈長(zhǎng)度,使我們能夠快速且確定地證明-條鏈的總工作量多于另一條鏈。它還可以防止惡意行為者試圖將假鏈或錯(cuò)誤區(qū)塊/賬本加入網(wǎng)絡(luò),因?yàn)闉榱藗卧煲粋€(gè)區(qū)塊,他們必須執(zhí)行網(wǎng)絡(luò)所執(zhí)行的所有工作量的總和。當(dāng)節(jié)點(diǎn)(Peers)發(fā)出“BL OCKFOuND”聲明時(shí),附加到該聲明是四個(gè)項(xiàng)目: 區(qū)塊的hash(哈希值), 前一個(gè)區(qū)塊的hash,nonce和難度。
在第一次傳遞時(shí),接收的節(jié)點(diǎn)檢查以確定BL OCK FOUND消息指示的先前區(qū)塊哈希值是否與其當(dāng)前區(qū)塊匹配。如果它找到該消息,則這個(gè)節(jié)點(diǎn)對(duì)所廣播的難度進(jìn)行合理性檢查,確認(rèn)其與預(yù)期的難度相匹配。如果該檢查失敗,廣播的節(jié)點(diǎn)將被列入黑名單。確認(rèn)節(jié)點(diǎn)都在正確的鏈上并且難度匹配時(shí),本地節(jié)點(diǎn)向這個(gè)節(jié)點(diǎn)請(qǐng)求該區(qū)塊。
在接收到區(qū)塊時(shí),節(jié)點(diǎn)調(diào)用區(qū)塊驗(yàn)證器,區(qū)塊驗(yàn)證器驗(yàn)證區(qū)塊中包含的每個(gè)交易,構(gòu)造候選塊,并通過挖礦 算法傳遞它和提供的nonce。如果區(qū)塊有效,則本地節(jié)點(diǎn)暫停挖礦,刷新其交易隊(duì)列, 并調(diào)用區(qū)塊更新程序。區(qū)塊更新器執(zhí)行所有相關(guān)的全局變量增量,更新本地帳本數(shù)據(jù)庫, 如果我們處于Aeon邊界,則調(diào)用新生區(qū)塊例程。當(dāng)區(qū)塊更新程序完成執(zhí)行后,系統(tǒng)狀態(tài)將返回到“已同步”,也就是我們已與網(wǎng)絡(luò)“達(dá)成共識(shí)”。
7. 爭(zhēng)用算法
僅當(dāng)網(wǎng)絡(luò)中的兩個(gè)或更多節(jié)點(diǎn)在大致相同的時(shí)間解決區(qū)塊時(shí)才會(huì)發(fā)生爭(zhēng)用(Contention)。由于采用隨機(jī)網(wǎng)絡(luò)模型、以及我們將平均解決時(shí)間設(shè)置為337.5秒,爭(zhēng)用在Mochimo網(wǎng)絡(luò)中將相對(duì)發(fā)生較少,但是當(dāng)這種情況出現(xiàn)時(shí),共識(shí)算法將按照以下列方式非??焖俚貐R聚網(wǎng)絡(luò)。
過程:收到“BLOCK FOUND(中文:發(fā)現(xiàn)區(qū)塊)”消息后,如共識(shí)算法部分代碼所示,節(jié)點(diǎn)進(jìn)行更新。當(dāng)網(wǎng)絡(luò)進(jìn)入爭(zhēng)用時(shí),意味著在同一最大長(zhǎng)度的網(wǎng)絡(luò)上存在多個(gè)鏈,我們可以預(yù)期該節(jié)點(diǎn)將接收另一個(gè)指示“BL OCK FOUND” 的消息,但發(fā)現(xiàn)的是該節(jié)點(diǎn)已經(jīng)在處理的區(qū)塊。此消息還將具有不同的哈希值,這表示節(jié)點(diǎn)存在爭(zhēng)用。該節(jié)點(diǎn)將忽略這個(gè)BLOCK FOUND消息, 因?yàn)樗@示的區(qū)塊序號(hào)不高于節(jié)點(diǎn)的當(dāng)前區(qū)塊,雖然權(quán)重是相同的。
在這種情況下,我們可以說網(wǎng)絡(luò)上存在兩個(gè)鏈,每個(gè)鏈具有相同的權(quán)重。由于區(qū)塊的傳播可以在0.5秒內(nèi)跨越網(wǎng)絡(luò),因此我們可以預(yù)期將在N*(337.5/0.5)個(gè)區(qū)塊后看到網(wǎng)絡(luò)上的第二個(gè)鏈,其中N是網(wǎng)絡(luò)上的節(jié)點(diǎn)數(shù)。然而,在大多數(shù)情況下,第二鏈的傳播程度將受到嚴(yán)重限制。
解決這個(gè)問題的方法非常簡(jiǎn)單:當(dāng)下一個(gè)區(qū)塊被挖出時(shí),無論同時(shí)已經(jīng)挖出了多少個(gè)鏈,所有節(jié)點(diǎn)都將收到一個(gè)具有更高權(quán)重的更高區(qū)塊序號(hào)的BL .OCK FOUND消息。 通過該消息,廣播的節(jié)點(diǎn)不在同一鏈上的事實(shí)將顯而易見,因?yàn)槊總€(gè)廣播的BL OCK FOUND也顯示先前區(qū)塊的哈希值。由于前一個(gè)區(qū)塊的哈希值與我們的哈希值不匹配,我們知道與我們不同的鏈在聲稱是自己主鏈。
此時(shí),為了解決爭(zhēng)用,本地節(jié)點(diǎn)從廣播的節(jié)點(diǎn)獲取最近的哈希表。節(jié)點(diǎn)通過提供從新生區(qū)塊到當(dāng)前區(qū)塊的每個(gè)區(qū)塊的哈希值來響應(yīng)。本地節(jié)點(diǎn)將此列表與其自己的哈希列表進(jìn)行比較,并向后搜索以查找匹配項(xiàng)。如果找到匹配項(xiàng),則該節(jié)點(diǎn)位于孤立鏈上。執(zhí)行一些額外的驗(yàn)證檢查 以確保塊沒有被幌騙(Spoofng),并且在驗(yàn)證時(shí),接收節(jié)點(diǎn)刷新所有狀態(tài)并進(jìn)行重啟。
注,Mochimo網(wǎng)絡(luò)的超快速匯聚能力讓我們可以通過這樣解決爭(zhēng)用:允許發(fā)現(xiàn)自己在孤立鏈上的節(jié)點(diǎn)離開網(wǎng)絡(luò)并重新同步。此外,鏈不僅可以分裂一次還可以分裂第二次。然而,發(fā)生這種情況的可能性是1比(N*(337.5 / .5)^2)區(qū)塊。
理解這一點(diǎn)很重要:網(wǎng)絡(luò)上活動(dòng)鏈的數(shù)量永遠(yuǎn)不會(huì)超過2個(gè),并且在發(fā)生爭(zhēng)用后的一個(gè)BL OCKFOUND消息不會(huì)增加網(wǎng)絡(luò)上鏈的數(shù)量,而是增加刷新節(jié)點(diǎn)狀態(tài)并進(jìn)行重啟的節(jié)點(diǎn)數(shù)量。