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