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