官網(wǎng)?http://block.one/?|?https://eos.io/
開源?https://www.github.com/eosio?|?技術白皮書?|?存儲白皮書
EOS (Enterprise Operation System) 為商用分布式應用設計的一款區(qū)塊鏈操作系統(tǒng)
開發(fā)者友好的區(qū)塊鏈底層平臺
類似與電郵系統(tǒng)的系統(tǒng)架構
跨鏈消息傳遞機制
獨立的腳本語言
免費的區(qū)塊應用程序
協(xié)同效應
對于EOS的一些了解:
區(qū)塊鏈應用最大的限制就是延遲和數(shù)據(jù)吞吐量港华,EOS通過并行鏈和DPOS的方式解決了延遲和數(shù)據(jù)吞吐量的難題,比如BTC是大概最少三十分鐘后數(shù)據(jù)才能被確認午衰,7TPS/S立宜,ETH也需要幾分鐘冒萄,只有,但基于石墨烯底層的BTS和STEEM卻可以達到1.5S的平均確認速度和有限條件下實測3300TPS的數(shù)據(jù)吞吐量橙数,EOS通過并行鏈的方式尊流,最高可以達到數(shù)百萬TPS,并且并行本地鏈甚至可以達到毫秒級的確認速度灯帮。
EOS率先支持的WREN編程語言在BM(Daniel Larimer)之前的博文中有過描述崖技,是一種十分高效的編程語言。
EOS和ETH的愿景大致相似钟哥,一個操作系統(tǒng)的底層迎献,在這個操作系統(tǒng)里,可以構建各種各樣的智能合約應用瞪醋,并且又因為并行鏈而使得EOS系統(tǒng)里的每一個軟件都可以獲得高性能支撐忿晕。類似BTS STEEM這種每日交易次數(shù)超過BTC和ETH的真正意義上的應用装诡,只有EOS上可以構建银受。
關于EOS的投資前景:
首先看EOS的技術負責人 BM,他是BTS(BitShares)和STEEM的創(chuàng)始人鸦采,并且這兩個應用目前看都處于良好的運行狀態(tài)宾巍,至少對比很多概念性的項目,這兩個項目是最落地的公鏈項目了渔伯。
本中文白皮書翻譯自EOS白皮書英文版顶霞,如果有表述不一致的地方,以英文版本為準锣吼。
EOS.IO軟件引入了一種新的塊鏈架構选浑,旨在實現(xiàn)分布式應用的性能擴展。這是通過創(chuàng)建一個可以構建應用程序的類似操作系統(tǒng)的架構來實現(xiàn)的玄叠。該軟件架構提供帳戶古徒,身份驗證,數(shù)據(jù)庫读恃,異步通信以及在數(shù)以百計的CPU或群集上的程序調(diào)度隧膘。該技術的最終形式是一個塊鏈體系架構,該區(qū)塊鏈每秒可以支持數(shù)百萬個交易寺惫,同時普通用戶無需支付使用費用疹吃。
Blockchain技術源于2008年推出的比特幣,自那時以來西雀,企業(yè)家和開發(fā)人員一直在努力推廣該技術萨驶,以便在單個塊鏈平臺上支持更廣泛的應用。
雖然一些通用區(qū)塊鏈平臺還在努力實現(xiàn)第一個能正常運行的區(qū)塊鏈應用艇肴,針對特定場景的區(qū)塊鏈應用諸如BitShares去中心化交易所(2014)和Steem社交媒體平臺(2016)已經(jīng)成為日活躍用戶上萬的成功應用腔呜。 這兩個應用成功的把性能提高到每秒數(shù)千個交易判莉,延遲降低到1.5秒,降低交易費用育谬,并實現(xiàn)了與中央服務器方案相似的用戶體驗券盅。
由于現(xiàn)有的塊鏈平臺使用費用高昂,性能有限膛檀,阻礙了區(qū)塊鏈應用的廣泛傳播锰镀。
成為一個成功的區(qū)塊鏈應用平臺塊,應該需要滿足以下要求:
支持百萬級別用戶
如Ebay咖刃,Uber泳炉,AirBnB和Facebook這樣的應用,需要能夠處理數(shù)千萬日活躍用戶的區(qū)塊鏈技術嚎杨。 在某些情況下花鹅,應用程序可能無法正常工作,除非達到了大量用戶枫浙,因此可以處理大量用戶數(shù)量的平臺至關重要刨肃。
免費使用
有時候應用開發(fā)人員需要靈活的為用戶提供免費服務; 用戶不必為了使用平臺而付出費用÷嶂悖可以免費使用的塊鏈平臺自然可能會得到更多的關注真友。有了足夠的用戶規(guī)模,開發(fā)者和企業(yè)可以創(chuàng)建對應的盈利模式紧帕。
輕松升級和Bug恢復
基于塊鏈的應用程序在進行功能迭代的時候自然需要能支持軟件升級盔然。所有軟件都有可能受到bug的影響。一個區(qū)塊鏈底層平臺在遭遇bug的時候是嗜,需要能夠從bug中修復錯誤愈案。
低延遲
及時的反饋是良好用戶體驗的基礎。延遲時間如果超過了幾秒鐘鹅搪,會大大影響用戶體驗站绪,嚴重降低程序的競爭力。
串行性能
有些應用程序由于命令執(zhí)行必須是順序的涩嚣,從而無法用并行算法進行實現(xiàn)崇众。諸如交易所之類的應用經(jīng)常需要處理大量的串行操作,因此一個成功的區(qū)塊鏈架構需要具有強大的串行性能航厚。
并行性能
大規(guī)模應用程序需要在多個CPU和計算機之間劃分工作負載顷歌。
EOS.IO軟件架構中采用目前為止唯一能夠復合上述性能要求的區(qū)塊鏈共識算(DPOS)。根據(jù)這種算法幔睬,全網(wǎng)持有代幣的人可以通過投票系統(tǒng)來選擇區(qū)塊生產(chǎn)者眯漩,一旦當選任何人都可以參與區(qū)塊的生產(chǎn)。
EOS.IO里預計每3秒生產(chǎn)一個區(qū)塊。任何時刻赦抖,只有一個生產(chǎn)者被授權產(chǎn)生區(qū)塊舱卡。如果在某個時間內(nèi)沒有成功出塊,則跳過該塊队萤。
EOS.IO架構中區(qū)塊產(chǎn)生是以21個區(qū)塊為一個周期轮锥。在每個出塊周期開始時,21個區(qū)塊生產(chǎn)者會被投票選出要尔。前20名出塊者首選自動選出舍杜,第21個出塊者按所得投票數(shù)目對應概率選出。所選擇的生產(chǎn)者會根據(jù)從塊時間導出的偽隨機數(shù)進行混合赵辕。以便保證出塊者之間的連接盡量平衡既绩。
如果出塊者錯過了一個塊,并且在最近24小時內(nèi)沒有產(chǎn)生任何塊还惠,則這個出塊者將被刪除饲握。這確保了網(wǎng)絡的順利運行。
在正常情況下蚕键,DPOS塊鏈不會經(jīng)歷任何叉救欧,因為塊生產(chǎn)者合作生產(chǎn)區(qū)塊而不是競爭。如果有區(qū)塊分叉嚎幸,共識將自動切換到最長的鏈條颜矿。具有更多生產(chǎn)者的區(qū)塊鏈長度將比具有較少生產(chǎn)者的區(qū)塊鏈增長速度更快。此外嫉晶,沒有塊生產(chǎn)者應該同時在兩個區(qū)塊鏈分叉上生產(chǎn)塊。如果一個塊生產(chǎn)者發(fā)現(xiàn)這么做了田篇,就可能被投票出局替废。
交易確認
由DPOS共識算法維護的區(qū)塊鏈一般出塊者都是100%在線的。這就是說一個交易平均1.5秒后泊柬,會被寫入?yún)^(qū)塊鏈中椎镣,同時被所有出塊節(jié)點知曉這筆交易。這就意味著只需要1.5秒兽赁,一筆交易可以認定為99.9%被區(qū)塊鏈接收了状答。
有一些非常情況下例如,軟件bug刀崖,Internet擁塞或惡意出塊者出現(xiàn)惊科,區(qū)塊鏈可能出現(xiàn)分叉。為了確保一個交易是不可逆轉的亮钦,可以等待15個區(qū)塊確認馆截。根據(jù)EOS.IO軟件的配置,在正常情況下15個區(qū)塊確認平均需要45秒。
在分叉產(chǎn)生的9秒鐘內(nèi)蜡娶,出塊節(jié)點就可能發(fā)現(xiàn)這個分叉可能并警告用戶混卵。一個節(jié)點觀察網(wǎng)絡的時候如果發(fā)現(xiàn)連續(xù)2次的丟塊事件,這意味著改節(jié)點由95%可能性在區(qū)塊鏈的分叉分支上窖张。有出現(xiàn)3個連續(xù)的丟塊以后幕随,該節(jié)點有99%的可能性在一條分叉出來的區(qū)塊鏈上∷藿樱可以生成一個預測模型合陵,它將利用節(jié)點丟失的信息,最近的參與率以及其他因素來快速地警告用戶出現(xiàn)什么問題澄阳。
對這種警告的反應完全取決于業(yè)務交易的性質(zhì)拥知,但最簡單的反應是等待15/21確認,直到警告停止碎赢。
交易證明(TaPoS)
EOS.IO軟件要求每個交易都包括最近的區(qū)塊頭的哈西低剔。 這個哈希有兩個目的:
1.防止分叉區(qū)塊鏈上出現(xiàn)大量交易記錄;
2.使得系統(tǒng)能感知到用戶是否在分叉出來的區(qū)塊鏈上
隨著時間的推移,所有用戶最終直接確認塊鏈肮塞,這使得難以偽造假冒鏈襟齿,因為假冒將無法從合法鏈路遷移交易。
EOS.IO軟件允許使用唯一的長度為2到32個字符的可讀的名稱來實現(xiàn)對帳戶的引用枕赵。該名稱由帳戶的創(chuàng)建者自行選擇猜欺。所有帳戶必須在創(chuàng)建時必須充入最小的帳戶余額以支付存儲帳戶數(shù)據(jù)的費用。帳戶名稱還支持命名空間拷窜,因此帳戶@domain的所有者是唯一可以創(chuàng)建帳戶@user.domain的用戶开皿。
在去中心化的情況下,應用程序開發(fā)人員將支付創(chuàng)建帳戶名義上的成本以注冊新用戶篮昧。通常企業(yè)已經(jīng)以廣告和免費服務等形式為獲取每個客戶花費了大量資金赋荆。相比之下,創(chuàng)建新的區(qū)塊鏈帳戶所需的資金成本是微不足道的懊昨。并且幸運的是窄潭,沒有必要為已經(jīng)由另一個應用程序注冊的用戶創(chuàng)建帳戶。
消息和消息處理程序
每個帳戶可以將結構化消息發(fā)送到其他帳戶酵颁,并且可以定義消息被接受后的處理腳本嫉你。EOS.IO軟件為每個帳戶提供其自己獨有的數(shù)據(jù)庫,只能由自己的消息處理程序訪問躏惋。消息處理腳本還可以向其他帳戶發(fā)送消息幽污。消息和自動的消息處理程序的組合正是EOS.IO定義智能合約的方式。
基于角色的權限管理
權限管理主要涉及明確特定的消息是否被正確授權其掂。權限管理的最簡單形式是檢查事務是否具有所需的簽名油挥,但這隱含著所需的簽名是已知的。通常權力是與可以分類的個人或個人群組綁定在一起的。EOS.IO軟件提供了一個聲明式權限管理系統(tǒng)深寥,可以讓帳戶細粒度和高級別地控制誰在何時能夠做什么攘乒。
至關重要的是,身份認證和權限管理被標準化實現(xiàn)惋鹅,并與應用程序的業(yè)務邏輯分離则酝。這使得開發(fā)某種工具以通用方式管理權限成為可能,并為性能優(yōu)化提供了巨大的空間闰集。
每個帳戶都可以通過其他帳戶和私鑰的任何加權組合來控制沽讹。這種機制創(chuàng)建了一個能夠真實反映權限在現(xiàn)實中的組織情況的層次化權限結構,并使得多用戶對資金的控制比以往任何時候都更容易武鲁。多用戶控制是提升安全性的最重要因素爽雄,如果能正確地使用,可以極大地消除黑客盜竊的風險沐鼠。
EOS.IO軟件允許帳戶可以定義與其他帳戶密鑰的“and”和“or”的組合挚瘟,并且把這個組合以將特定類型的消息發(fā)送到另一個帳戶。例如饲梭,可以為用戶的社交媒體帳號提供一個密鑰乘盖,另一個用于交易。甚至用戶可以給予其他帳戶許可讓其代表自己的帳戶行事憔涉,而無需向其他帳戶分配密鑰订框。
命名權限級別
使用EOS.IO軟件疆拘,帳戶可以定義命名權限級別逞怨,每個權限級別可以從更高級別的命名權限派生理逊。每個命名權限級別定義一個權力猴誊,這個權力可以是其他帳戶的密鑰和(/或)命名權限級別組成的多簽名檢查的閾值。例如逐纬,帳戶的“朋友”權限級別可以設置為帳戶能被其任何朋友帳戶平等地控制包个。
另一個例子是Steem區(qū)塊鏈垛玻,其具有三個硬編碼命名的權限別:owner议街,active和posting。Posting權限只能執(zhí)行諸如投票和發(fā)布等社交行為璧榄,而active權限可以做除了更改所有者的所有事情特漩。owner權限實質(zhì)是被保留了起來,它能夠做所有一切骨杂。EOS.IO通過允許每個帳戶持有者定義自己的權限層次結構以及動作的分組來實現(xiàn)類似的管理理念涂身。
命名消息處理程序組
EOS.IO軟件允許每個帳戶將自己的消息處理程序以命名嵌套的方式予以組織。這些命名的消息處理程序組可以通過配置其權限級別被其他帳戶引用搓蚪。
最高級別的消息處理程序組是處理帳戶名稱的程序組蛤售,最低級別的消息處理程序組是處理該帳戶正在接收的單獨消息類型的程序組。這些程序組的引用格式為:@accountname.groupa.subgroupb.MessageType。
在這種模式下悴能,可以將創(chuàng)建和取消訂單的交易合約與存取款的交易合約分離揣钦。這種交易合約的分組對用戶使用交易合約提供了較大便利。
權限映射
EOS.IO軟件允許每個帳戶定義任何帳戶的命名消息處理程序組與其自己的命名權限級別之間的映射漠酿。例如冯凹,賬戶持有人可以將賬戶持有人的社交媒體應用程序映射到帳戶持有者的“朋友”權限組。通過此映射炒嘲,帳戶的任何朋友都可以和帳戶持有者一樣宇姚,在帳戶的社交媒體上發(fā)布內(nèi)容。即使他們將作為帳戶持有者發(fā)布夫凸,他們?nèi)匀粫褂米约旱拿荑€來簽名浑劳。這意味著總是可以辨別出來哪些朋友以何種方式使用了其帳戶。
權限評估
當從@alice到@bob傳送“Action”類型的消息時夭拌,EOS.IO軟件將首先檢查@alice是否為@bob.groupa.subgroup.Action定義了權限映射魔熏。如果沒有找到任何結果,那么將會檢查@bob.groupa.subgroup啼止,然后是@bob.groupa道逗,最后是@bob的映射。如果此時仍然沒有找到匹配的結果献烦,那么假定的映射將是命名的權限組@alice.active滓窍。
一旦識別出權限映射,則啟動多簽名閾值校驗過程巩那。如果校驗成功吏夯,所命名的權限將與關聯(lián)的權限建立關聯(lián)。如果失敗即横,那么它會遍歷父權限噪生,最終遍歷到其所有者的權限@alice.owner。
默認權限組
該技術還允許所有帳戶都有一個可以做所有事情的“owner”權限組东囚,和一個除了更改所有者組之外可以執(zhí)行所有操作的“active”權限組跺嗽。所有其他權限組均派生自“active”權限組。
權限的并行評估
權限評估是個“只讀”的過程页藻,即使在事務過程中對權限進行了修改桨嫁,在運行到區(qū)塊結尾時這種修改也會失效。首先份帐,這意味著所有事務的所有密鑰和權限評估可以并行執(zhí)行璃吧。其次,這種機制意味著可以快速驗證權限废境,而不需要考慮啟動可能回滾的昂貴的應用程序邏輯畜挨。最后筒繁,這意味著當掛起的事務繼續(xù)執(zhí)行時,事務權限的評估可以繼續(xù)執(zhí)行巴元,而無需重新執(zhí)行毡咏。
這么設計考慮的主要原因,是因為權限驗證占據(jù)交易驗證的很大計算量比例务冕。使之成為一個只讀和可并行化的過程血当,可以顯著提高性能。
當區(qū)塊鏈消息被重放禀忆,來從消息日志中重新生成確定狀態(tài)時臊旭,并不需要再次評估權限。事務被包含在一個已知的狀態(tài)良好的區(qū)塊中的事實使其可以跳過這個步驟箩退。這極大地減少了重放之前的區(qū)塊鏈數(shù)據(jù)相關的計算量离熏。
有強制延遲的消息
時間是安全的關鍵組成部分。在大多數(shù)情況下戴涝,在私鑰被使用前不可能知道其是否已經(jīng)被盜用滋戳。基于時間的安全機制在人們使用一些特殊類型應用程序時更為關鍵啥刻,這些應用程序需要將密鑰保存在連接到互聯(lián)網(wǎng)的人們?nèi)粘J褂玫挠嬎銠C上奸鸯。EOS.IO軟件支持應用程序開發(fā)者指定某些消息在包含在區(qū)塊后,實際應用之前必須等待一段比較小的時間段可帽。在此期間娄涩,這些消息可以被取消。
當這類消息被廣播時映跟,用戶可以通過電子郵件或短信收到相應通知蓄拣。如果他們不授權該消息,那么他們可以登錄其帳戶來還原帳戶數(shù)據(jù)并撤回消息努隙。
所需的延遲取決于操作的重要程度球恤。支付一杯咖啡可以毫不拖延地在幾秒鐘內(nèi)確認,而買房子可能需要72小時清算周期荸镊。將整個帳戶轉移到新的控制者手上可能最多需要30天咽斧。具體延遲的選擇取決于應用程序開發(fā)者和用戶。
密鑰被盜后的恢復
EOS.IO軟件為用戶提供了一種在密鑰被盜時恢復其帳戶控制的方法躬存。
帳戶所有者可以使用在過去30天內(nèi)活動的任何其批準的帳戶恢復合作伙伴的密鑰收厨,在其帳戶恢復合作伙伴的允許后,重置其帳戶上的所有者密鑰优构。在沒有帳戶所有者的配合情況下,帳戶恢復合作伙伴無法重置其帳戶的控制權雁竞。
對于攻擊帳戶的黑客而言钦椭,由于其已經(jīng)“控制”該帳戶拧额,因此嘗試執(zhí)行恢復過程沒有任何收獲。此外彪腔,如果他們的確進行恢復的過程侥锦,那么恢復合作伙伴可能需要身份認證和多因素認證(如電話和電子郵件)。這或者會暴露黑客的身份德挣,或者黑客在恢復過程中毫無所得恭垦。
這個過程與簡單的多重簽名機制有極大的不同。通過多重簽名的交易格嗅,會有一個對象會執(zhí)行并參與每一個交易番挺;而通過恢復過程,恢復過程的操作者僅參與了恢復的過程屯掖,并沒有權力參與日常的交易玄柏。這極大降低了相關參與者的成本和法律責任。
區(qū)塊鏈共識取決于確定性(可重現(xiàn))行為贴铜。這意味著所有并行執(zhí)行都能不能使用互斥體或其他鎖的原語的情況下正常運行粪摘。沒有鎖,必須有一些方法來保證所有帳戶只能讀寫自己的私有數(shù)據(jù)庫绍坝。這也意味著每個帳戶會順序處理其消息徘意,并行性確定在帳戶級別。
使用EOS.IO軟件轩褐,區(qū)塊生成器的工作是將消息傳遞到獨立的線程中椎咧,以便它們可以并行地評估。每個帳戶的狀態(tài)只取決于傳遞給它的消息灾挨。調(diào)度表是區(qū)塊生成器的輸出邑退,并且將被確定性地執(zhí)行,但是生成調(diào)度的過程不必是確定性的劳澄。這意味著區(qū)塊生成器可以利用并行算法來調(diào)度事務地技。
并行執(zhí)行還意味著當腳本生成新消息時,它不會立即發(fā)送秒拔,而是在下一個周期中發(fā)送它莫矗。無法立即發(fā)送的原因是因為接收方可能會在另一個線程中主動修改自己的狀態(tài)。
通信延遲優(yōu)化
延遲時間是一個帳戶將消息發(fā)送到另一個帳戶并收到響應所需的時間砂缩。EOS.IO軟件的目標是使兩個帳戶能夠在單個區(qū)塊內(nèi)來回交換消息作谚,而不必在每個消息之間等待3秒。為了實現(xiàn)這一點庵芭,EOS.IO軟件將每個區(qū)塊分為周期(cycle)妹懒。每個周期分為線程(thread),每個線程包含事務列表双吆。每個事務包含一組要傳遞的消息眨唬。該結構可以被可視化為樹会前,其中各層依據(jù)其特性被順序或者并行地進行處理。
區(qū)塊Block
周期Cycles(順序)
線程Threads(并行)
交易Transactions(順序)
消息Messages(順序)
接收方和通知的帳戶Receiver and Notified Accounts(并行)
在一個周期中生成的交易可以在任何后續(xù)周期或區(qū)塊中傳送匾竿。區(qū)塊生成器將不斷把周期添加到區(qū)塊中瓦宜,直到最長的區(qū)塊時間間隔達到,或者沒有新的可傳送交易生成岭妖。
可以使用區(qū)塊的靜態(tài)分析來驗證在給定周期內(nèi)是否存在兩個線程包含修改同一個帳戶的事務临庇。只要這種靜態(tài)分析機制一直起作用,就可以通過并行運行所有線程來處理區(qū)塊昵慌。
只讀消息處理
部分賬戶可能會處理一些只需要決定通過與否的消息假夺,而不會改變自己內(nèi)在狀態(tài)。這種情形下废离,只需要有一個或多個進程包含這個特殊賬戶下的只讀消息處理器侄泽,這些處理就能并行進行。
多賬戶原子交易
有時蜻韭,我們希望確保消息被多個帳戶以原子方式交付和接受悼尾。在這種情況下,兩個消息被放置在一個交易中肖方,兩個帳戶將被分配相同的線程和消息按順序執(zhí)行闺魏。這種情況在性能上并不理想,并且當涉及到“付費”用戶的使用時俯画,他們將會被根據(jù)交易所涉及的特殊帳戶的數(shù)量來收費析桥。
出于性能和費用的考慮,最好將涉及兩個或更多帳戶的原子操作最小化
部分區(qū)塊鏈狀態(tài)評估
大規(guī)模區(qū)塊鏈技術組件應該是模塊化的艰垂。每個人都不應該運行所有東西泡仗,特別是如果他們只需要使用一小部分應用程序的時候。
出于將交易狀態(tài)顯示給用戶的目的猜憎,交易應用的開發(fā)者將維護一個完整的節(jié)點娩怎。這款交易應用不需要與其他社交媒體應用關聯(lián)狀態(tài)。EOS.IO系統(tǒng)允許任何完整的節(jié)點選擇性的運行任意應用子集胰柑。傳遞給其他應用的消息將被安全地忽略截亦,因為應用的狀態(tài)完全來自于傳遞給它的消息。
這對于多帳戶之間的通信有一些重要的影響柬讨。最重要的是崩瓤,不能假定另一個帳戶的狀態(tài)在同一臺機器上是可訪問的。它還意味著踩官,雖然允許一個帳戶同步調(diào)用另一個帳戶的“鎖”是一種誘人的設計模式却桶,但如果其他帳戶不在內(nèi)存中,這種設計模式將會崩潰蔗牡。
因此肾扰,所有帳戶間的狀態(tài)通信必須通過區(qū)塊鏈上的消息進行傳遞畴嘶。
自主最優(yōu)任務安排
EOS.IO系統(tǒng)不能強制阻止區(qū)塊生成者向其他帳戶發(fā)送的任何消息。每個區(qū)塊的生成者對處理交易的計算復雜度和時間復雜度都有自己的主觀度量集晚,無論這個交易是由用戶生成的還是由腳本自動生成的。
在網(wǎng)絡層面区匣,EOS.IO系統(tǒng)處理的每一筆交易都有固定的計算帶寬成本偷拔,不管它是耗費01ms還是10 ms來處理它。但是亏钩,使用該系統(tǒng)的每個單獨的區(qū)塊生成者會使用它們自己的算法和度量來衡量資源使用莲绰。當一個區(qū)塊生成者發(fā)現(xiàn)一個交易或帳戶已經(jīng)消耗了大量的計算能力時,他們會在生成自己的塊時拒絕該交易姑丑;但是蛤签,如果其他區(qū)塊生成者認為它是有效的,他們?nèi)匀粫幚碓摻灰住?/p>
一般來說栅哀,只要一個區(qū)塊生成者認為一個交易是有效的震肮,并且所消耗的資源是可控的,那么其他所有的區(qū)塊生成者也會接受它留拾,但可能要花費1分鐘才能使該交易傳播到這個區(qū)塊生成者處戳晌。
在某些情況下,區(qū)塊生成者可以創(chuàng)建一個區(qū)塊痴柔,其中包括在可接受范圍之外的交易沦偎。在這種情況下,下一個區(qū)塊生成者可能會選擇拒絕這個區(qū)塊咳蔚,而這條線路將會被第三個區(qū)塊生成者終結豪嚎。這與一個大區(qū)塊導致網(wǎng)絡傳播延遲所引發(fā)的情況沒有什么不同。社區(qū)會注意到這種異常模式谈火,并最終清理該流氓區(qū)塊生成者的選票侈询。
這種對計算、資源成本的主觀評估將使區(qū)塊鏈不必精確地去度量運行一個任務需要多長時間堆巧。有了這個設計妄荔,就不需要精確地數(shù)指令,這將極大地增加優(yōu)化的機會谍肤,而不會打破共識啦租。
所有的區(qū)塊鏈都是資源受限的,并且需要一個系統(tǒng)來防止濫用荒揣。在EOS.IO系統(tǒng)中篷角,有三大類資源被應用程序消耗:
1.帶寬和日志存儲(磁盤);
2.計算和計算積壓(CPU)系任;
3.狀態(tài)存儲器(RAM)恳蹲。
瞬時使用和長期使用的這兩類組件都會消耗帶寬和計算虐块。區(qū)塊鏈系統(tǒng)將維護所有消息的日志,這些日志將會被所有的完整節(jié)點下載和存儲嘉蕾。通過日志信息贺奠,可以重構所有應用程序的狀態(tài)。
可計債務是指通過對消息日志重新生成狀態(tài)的計算消耗错忱。如果可技債務增長太大儡率,就有必要對區(qū)塊鏈的當前狀態(tài)進行拍照,并拋棄區(qū)塊鏈的歷史狀態(tài)以清。如果計算債務增長過快儿普,區(qū)塊鏈將使用6個月的時間來重放1年的交易。因此掷倔,對可計債務進行精心管理是至關重要的眉孩。
區(qū)塊鏈存儲的狀態(tài)指那些可從應用程序邏輯訪問的信息。它包括諸如訂單和帳戶余額等信息勒葱。如果應用程序不讀取該狀態(tài)浪汪,則不應該存儲它。例如错森,博客文章的內(nèi)容和注釋不被應用程序邏輯讀取吟宦,因此它們不應該存儲在區(qū)塊鏈的狀態(tài)中。與此同時涩维,郵件或評論的索引殃姓、投票數(shù)和其他屬性將作為區(qū)塊鏈狀態(tài)的一部分被存儲起來。
區(qū)塊生成者可以發(fā)布它們可用的帶寬瓦阐、計算資源和狀態(tài)的容量蜗侈。EOS.IO系統(tǒng)允許每個帳戶在一個3天對賭合約中消耗一定比例的可用容量。例如睡蟋,假設一個基于EOS.IO系統(tǒng)的區(qū)塊鏈應用啟動踏幻,如果一個帳戶持有該區(qū)塊鏈提供的總令牌的1%,那么這個帳戶就有可利用該區(qū)塊鏈1%的狀態(tài)存儲容量戳杀。
使用EOS.IO系統(tǒng)该面,帶寬和計算能力將被分配到部分儲備基礎中,因為它們是短暫的(未使用的容量不能存儲下來為將來使用)信卡。EOS. IO系統(tǒng)將使用類似于Steem的算法來限制帶寬使用速率隔缀。
目標和主觀度量
正如前面所討論的,可度量計算的使用對性能和優(yōu)化有很大的影響傍菇;因此猾瘸,所有資源的使用限制最終都是主觀的,并且根據(jù)各自的算法和估計來執(zhí)行。
也就是說牵触,從客觀角度來說淮悼,有些事情是微不足道的。站在客觀的角度揽思,傳遞的消息數(shù)量和存儲在內(nèi)部數(shù)據(jù)庫中的數(shù)據(jù)的大小都是很便宜的袜腥。EOS.IO系統(tǒng)允許區(qū)塊生成者能夠在這些客觀度量上應用相同的算法,但是也可以在主觀度量上選擇更嚴格的主觀算法绰更。
接收方支付
傳統(tǒng)上瞧挤,它是用來支付辦公空間、計算電力以及運營業(yè)務所需的其他費用的業(yè)務儡湾。客戶從該業(yè)務中購買特定產(chǎn)品执俩,而這些產(chǎn)品的銷售收入將用于支付業(yè)務成本徐钠。同樣,沒有任何網(wǎng)站要求訪問者為維護服務器而支付小額費用役首。因此尝丐,分散的應用程序不應該強迫它的客戶直接為使用區(qū)塊鏈支付費用。
EOS.IO系統(tǒng)不要求用戶直接向區(qū)塊鏈支付衡奥,因此不限制或阻止企業(yè)確定其產(chǎn)品的貨幣化策略爹袁。
授權能力
如果一個區(qū)塊鏈是使用EOS.IO系統(tǒng)開發(fā)的,而其令牌是由一個持票人持有矮固,他可能不需要立即消耗全部或部分可用帶寬失息,這樣的持有者可以選擇將未消耗的帶寬給予或租給他人;使用EOS.IO 系統(tǒng)的區(qū)塊生成者將識別這樣的授權并直接分配相應的帶寬档址。
將交易成本與令牌價值分開
EOS.IO系統(tǒng)的主要優(yōu)點之一是盹兢,應用程序可用的帶寬完全獨立于任何令牌價格。如果應用程序所有者持有相應數(shù)量的令牌守伸,那么應用程序可以在固定的狀態(tài)和帶寬使用中持續(xù)運行绎秒。開發(fā)人員和用戶不會受到令牌市場價格波動的影響,因此不會依賴于價格尼摹。EOS.IO系統(tǒng)運行區(qū)塊生成者能夠自然地增加帶寬见芹、計算資源和每個令牌的可用性,這與令牌的價值無關蠢涝。
EOS.IO系統(tǒng)將獎勵那些生成了區(qū)塊的區(qū)塊生成者一定的令牌玄呛。令牌的值將影響一個區(qū)塊生成者能夠購買的帶寬、存儲和計算量惠赫;這個模型自然會利用上升的令牌價值來提高網(wǎng)絡性能把鉴。
狀態(tài)存儲成本
因為帶寬和計算資源可以被委托,因此應用程序狀態(tài)的存儲要求應用的開發(fā)者持有令牌直到該狀態(tài)被刪除。如果狀態(tài)不被刪除庭砍,那么令牌將被有效地從循環(huán)中刪除场晶。
每個用戶帳戶需要一定數(shù)量的存儲空間;因此怠缸,每個帳戶必須保持最低余額诗轻。隨著網(wǎng)絡存儲容量的增加,最低余額的要求將會下降揭北。
塊獎勵
每次生成一個塊時扳炬,EOS.IO系統(tǒng)都會獎勵該區(qū)塊生成者一個新的令牌。所創(chuàng)建的令牌數(shù)量由所有區(qū)塊生成者所公布的期望報酬的中位數(shù)決定搔体。EOS.IO系統(tǒng)可能被配置為限制區(qū)塊生成者所得獎勵上限恨樟,這樣,令牌供應的年總增長不超過5%疚俱。
社區(qū)福利應用
除了加入以EOS.IO系統(tǒng)為基礎的區(qū)塊生成者團隊劝术,用戶還可以選擇3個社區(qū)福利應用,也稱為智能合約呆奕。這3個應用程序最多能按配置的比例接收到每年的令牌配額減去已支付給區(qū)塊生成者的部分养晋。這些智能合約將根據(jù)每個應用程序從令牌持有者收到的選票比例來收取令牌。經(jīng)選舉的應用程序或智能合約可以由新當選的應用程序或令牌持有人的智能合約所替代梁钾。
治理是人們在主觀問題上達成共識的過程绳泉,而這些問題不可能完全被軟件算法所捕獲。EOS.IO系統(tǒng)實現(xiàn)了一個治理過程姆泻,有效地影響到現(xiàn)有的區(qū)塊生產(chǎn)商零酪。在被定義治理流程之外,之前的區(qū)塊鏈依賴于臨時的麦射、非正式的蛾娶、經(jīng)常有爭議的治理過程,從而導致不可預知的結果潜秋。
EOS.IO系統(tǒng)認識到蛔琅,治理權力源來自于將權力代理給區(qū)塊生成者的令牌持有者。區(qū)塊的生成者被給予有限的和被監(jiān)督的權限來凍結帳戶峻呛,更新有缺陷的應用程序罗售,并提出對底層協(xié)議的變更。
EOS.IO系統(tǒng)的一部分是區(qū)塊生成者的選舉钩述。在對區(qū)塊鏈進行任何更改之前寨躁,這些區(qū)塊生成者必須批準它。如果區(qū)塊生成者拒絕做出讓令牌持有人所期望的改變牙勘,那么他們可以被投票否決职恳。如果區(qū)塊生成者未經(jīng)令牌持有者允許進行更改所禀,那么所有其他非生產(chǎn)的全節(jié)點驗證器(交換器等)將拒絕更改。
凍結賬戶
有時放钦,智能合約的行為會發(fā)生異成牵或不可預知,無法按照預期執(zhí)行操禀;有時應用程序或帳戶可能發(fā)現(xiàn)一個漏洞褂策,使其消耗不合理的資源。當此類問題不可避免地發(fā)生時颓屑,區(qū)塊生成者應當有能力糾正這種情況斤寂。
所有區(qū)塊鏈的區(qū)塊生成者有權選擇哪些交易被包含在區(qū)塊中,從而使他們有凍結帳戶的能力揪惦。EOS.IO系統(tǒng)通過凍結一個帳戶到17 / 21活躍區(qū)塊生成者的投票結論中遍搞,使這一授權成為正式結論。如果生成者濫用權力器腋,他們可以被淘汰尾抑,賬戶將被解凍。
改變帳戶代碼
當其他一切都失敗了蒂培,而“不可阻擋的應用程序”以一種不可預知的方式運行時,EOS.IO系統(tǒng)允許區(qū)塊生成者在不需要硬分叉整個區(qū)塊鏈的情況下替換帳戶的代碼榜苫。與凍結帳戶的過程類似护戳,此代碼的替換需要17 / 21被選中的區(qū)塊生成者的投票。
憲法
EOS操作系統(tǒng)可以用區(qū)塊鏈技術在簽名用戶之間建立P2P服務協(xié)議或約束性合約垂睬,也就是所謂的“憲法”媳荒。憲法內(nèi)容定義了僅依靠代碼無法完全執(zhí)行的用戶間義務,同時結合相互間的公認規(guī)則驹饺,確立司法權和適用法律钳枕。每一個在網(wǎng)絡中簽名廣播的交易,其簽名信息中必須包含憲法的哈希值赏壹,以明確約束合約簽名者鱼炒。
憲法還定義了源代碼協(xié)議的人類可讀性intent(意圖)。當出現(xiàn)系統(tǒng)錯誤時蝌借,intent(意圖)可用來區(qū)分這個錯誤是bug還是系統(tǒng)特性昔瞧,并且判斷社區(qū)對此的修復措施是否正確。
升級協(xié)議和憲法
EOS操作系統(tǒng)使用源代碼定義憲法和協(xié)議菩佑,同時也定義了憲法及協(xié)議的更新方法自晰。對憲法或協(xié)議進行變更,需要完成以下步驟:
區(qū)塊生產(chǎn)者(譯注:miner/delegate/witness稍坯,因此沒有譯作礦工)提交一個憲法變更動議酬荞,并獲得17/21以上的贊成票;
區(qū)塊生產(chǎn)者將17/21以上的贊成票維持連續(xù)30天;
要求所有用戶都使用新憲法的哈希值確認交易混巧;
區(qū)塊生產(chǎn)者采用修改源代碼的方式反映憲法變更枪向,使用git提交的哈希值將變更提交到區(qū)塊鏈上;
區(qū)塊生產(chǎn)者繼續(xù)將17/21以上的贊成票維持連續(xù)30天牲剃;
變更的代碼7天后生效遣疯,源代碼修改通過后,將有1周的時間來對所有節(jié)點的進行升級凿傅;
所有沒有升級為新代碼的節(jié)點將自動關閉缠犀。
根據(jù)EOS操作系統(tǒng)的默認配置,更新區(qū)塊鏈來添加新功能這一進程需要2到3個月時間聪舒,而修復那些不需要更改憲法的非關鍵性漏洞需要1到2個月時間辨液。
緊急變更
面臨一個損害用戶利益的有害漏洞或安全漏洞時,區(qū)塊生產(chǎn)者可以加速憲法變更過程箱残。一般來說滔迈,加速新特性更新過程或修復無害漏洞,都是違反憲法的行為被辑。
EOS操作系統(tǒng)將首先作為一個傳遞賬戶間已認證信息的平臺燎悍。腳本語言和虛擬機的實現(xiàn)將獨立于EOS操作系統(tǒng)技術,任何開發(fā)語言或虛擬機盼理,只要有適當?shù)奶干健⑿阅茏銐虻纳诚洌伎梢酝ㄟ^API與EOS集成在一起宏怔。
模式定義的消息
在賬戶之間發(fā)送的所有消息都是由區(qū)塊鏈共識狀態(tài)的一個模式定義的奏路,該架構允許消息在二進制和JSON格式之間的無縫轉換。
模式定義的數(shù)據(jù)庫
數(shù)據(jù)庫狀態(tài)也使用類似的模式定義臊诊,這確保所有應用程序存儲的數(shù)據(jù)都以一種格式呈現(xiàn)鸽粉,同時具備JSON的人類可讀性,以及二進制格式的高效率存儲和易操作性抓艳。
將身份驗證與應用程序分離
為了最大化并行運算触机,同時將從程序日志中重新生成應用程序狀態(tài)的計算任務降至最低,EOS操作系統(tǒng)將驗證邏輯分為三個部分:
確認消息在內(nèi)部是一致的;
確認所有的前置條件都是有效的;
修改應用程序狀態(tài)壶硅。
驗證消息的內(nèi)部一致性是只讀的威兜,不需要訪問區(qū)塊鏈狀態(tài),這意味著它可以最大化并行運算來執(zhí)行庐椒。驗證前置條件(例如需求平衡)也是只讀的椒舵,因此也可以從并行運算中獲益。只有對應用程序狀態(tài)進行修改才需要寫訪問约谈,并且需要按順序對每個應用程序進行處理笔宿。
身份驗證是驗證消息是否可以應用的只讀過程犁钟,應用程序實際上就是在做這項工作。實時的計算都需要執(zhí)行泼橘,但交易一旦被包含在區(qū)塊鏈中涝动,就不再需要執(zhí)行身份驗證操作了。
虛擬機獨立架構
這是EOS操作系統(tǒng)軟件的目的是可以支持多種虛擬機炬灭,同時可以隨著時間推移持續(xù)按需求增加新的虛擬機醋粟。出于這個原因,本文不會討論任何特定語言或虛擬機的細節(jié)重归,但即便如此米愿,目前也已經(jīng)有三種虛擬機正在評估接入EOS系統(tǒng)。
Wren
Wren(http://wren.io)是一種小型的鼻吮、快速的育苟、基于類別的編程語言。Wren的開發(fā)人員將其描述為“就像是把小型tak文件裝進lua大小的軟件包椎木,再加上一點Erlang特性违柏,再包進一個熟悉的、現(xiàn)代的語法里面”香椎。之所以選擇Wren語言和虛擬機漱竖,是因為它的短小精悍、易于文檔記錄和理解的代碼庫畜伐。它還具有非常好的性能闲孤,并且可以很容易地嵌入C++應用程序中。
Web組件(WASM)
WASM是構建高性能Web應用程序的新興Web標準烤礁,通過少量適配就可以被明確定義和沙箱化。WASM的好處在于業(yè)界廣泛支持肥照,因此可以用熟悉的語言開發(fā)開發(fā)智能合約脚仔,例如C或C++哩簿。
以太發(fā)人員已經(jīng)開始適配WASM谎碍,以提供適當?shù)纳诚洳⑹褂靡蕴籛ASM定義(https://github.com/ewasm/design)。這種方法很容易改編后用于EOS系統(tǒng)軟件集成厨姚。
以太虛擬機(EVM)
這個虛擬機已經(jīng)被用于大多數(shù)現(xiàn)有的智能合約吕朵,并且可以在EOS系統(tǒng)區(qū)塊鏈上使用猎醇。可以想象努溃,在EOS操作系統(tǒng)區(qū)塊鏈上硫嘶,EVM合約可以在內(nèi)部沙箱中運行,只需要少量適配就可以與其他EOS應用程序交互梧税。
EOS操作系統(tǒng)旨在促進區(qū)塊鏈間的跨鏈交互沦疾,這是通過簡化消息存在證明和消息序列證明來實現(xiàn)的称近。這些證明與圍繞信息傳送的應用架構設計相結合,同時可以隱藏跨鏈交互和驗證的細節(jié)哮塞,避免向應用程序開發(fā)人員公開刨秆。
用于輕客戶端驗證的默克爾證明(LCV)
要更容易地與其他區(qū)塊鏈集成,對于客戶端而言最好是不需要處理全部的交易忆畅。畢竟衡未,一個交易所關心的不過只是入賬和出賬操作。更進一步而言家凯,一個更加理想的狀態(tài)是缓醋,對于交易所自身所維持的鏈來說,如果可以將輕量級的默克爾存款證明應用其中肆饶,那么就不必完全依賴全節(jié)點礦工改衩,全節(jié)點礦工同步時也能維持盡可能小的開銷。
LCV的目標是能產(chǎn)生相對輕量級的交易存在證明驯镊,并且該證明能被其他人通過跟蹤一個輕量級數(shù)據(jù)集進行驗證葫督。既然如此,目的就是證明一個特定的交易是被一個特定的區(qū)塊包含其中板惑,并且這個區(qū)塊是被包含在已經(jīng)驗證的特定區(qū)塊鏈歷史中橄镜。
比特幣的輕量級驗證方式是,假設所有節(jié)點都有讀取區(qū)塊頭數(shù)據(jù)完整記錄的能力冯乘。而區(qū)塊頭數(shù)據(jù)每年增長4MB洽胶, 假設每秒產(chǎn)生10筆交易,一個有效的證明需要512 bytes裆馒,這對于一個出塊時間為10分鐘的區(qū)塊鏈來說是可行的姊氓。但對于一個出塊時間為3秒的區(qū)塊鏈來說則遠遠不夠。
EOS操作系統(tǒng)的輕量級證明只需要驗證包含某個特定的不可逆交易之后的區(qū)塊頭數(shù)據(jù)喷好,使用哈希鏈表架構(如下圖)翔横,數(shù)據(jù)集可以保持在1024 bytes內(nèi),即可證明任何一個交易是否存在梗搅。這是基于驗證節(jié)點保留著前一天的所有區(qū)塊頭數(shù)據(jù)(2 MB大小)禾唁,然后證明這些交易只需要200 bytes大小的證明數(shù)據(jù)。
當生成區(qū)塊時候使用合適的哈希鏈表時无切,使用這種方法只會帶來很小的增量開銷荡短,這意味著沒有理由不以這種方式去生成區(qū)塊。
當與其他鏈驗證證明的時候哆键,時間掘托、空間和帶寬都有很大的優(yōu)化空間。跟蹤所有區(qū)塊頭數(shù)據(jù)(420 MB/年)可以使證明體積盡可能小籍嘹。只跟蹤最近的區(qū)塊頭可以使得在持久區(qū)塊頭數(shù)據(jù)保存體積以及證明體積之間獲得平衡烫映。同樣的一個區(qū)塊鏈可以“懶惰地”只記錄過去數(shù)據(jù)的哈希值作為之前數(shù)據(jù)的證據(jù)沼本,新證明只需要保留已知的sparse tree(稀疏樹)結構,具體的方法會視乎于外部區(qū)塊所占的默克爾證明所包含的交易比例锭沟。
在鏈與鏈之間經(jīng)過一定密度的相互關聯(lián)之后抽兆。他們將會變得越來越高效。一條鏈可能會包含另外一條鏈的全部歷史記錄族淮,那么就不再需要互相證明辫红。從性能的角度來說,這將極大地減少鏈間互相證明操作的頻率祝辣。
跨鏈通信延遲
與其他區(qū)塊鏈通信的時候贴妻,礦工必須等待其他區(qū)塊鏈不可逆地確認之后才會接受其為有效的輸入。使用EOS系統(tǒng)軟件蝙斜,憑借出塊時間為秒的委任權益證明以及21個礦工名惩,這大概只需要45秒的確認時間。如果某個鏈上的礦工不等到交易確認孕荠,就像一個交易所接受了一筆存款而后又撤銷這筆操作娩鹉,這會影響這條鏈共識的有效性。
完成證明
使用外部區(qū)塊鏈的默克爾證明時稚伍,知道所有已處理的交易是有效的和知道有沒有交易被忽略弯予,這兩者之間有巨大的不同。因為不可能證明所有最近交易是已知的个曙,但有可能證明歷史交易數(shù)據(jù)之間沒有缺失锈嫩。EOS操作系統(tǒng)通過分配一個順序的標識編號給每一筆到達賬戶的信息來完成這個功能,用戶可以使用這些標號來證明所有給這個賬號的消息已經(jīng)被處理并且是被按順序處理的垦搬。
EOS操作系統(tǒng)是基于經(jīng)過普遍證實呼寸、并通過長期實踐考驗的概念來設計的,代表著區(qū)塊鏈技術的根本性進步猴贰。它是可擴展的全球性區(qū)塊鏈社會的宏偉藍圖的一部分 等舔,分布式應用程序可以輕松地以此為環(huán)境開發(fā)和管理。