1.介紹
本文旨在對Aeternity區(qū)塊鏈的架構(gòu)和可能的應(yīng)用進行總覽纪他。未來我們將提供更細(xì)致的論文盖淡,尤其是針對共識和治理機制的。然而需要指出的是扰楼,我們的架構(gòu)是全盤的;所有的組件將以模塊的形式綁定在一起進行協(xié)同工作旅东。
本文余下的部分以4部分呈現(xiàn)灭抑。首先十艾,我們會介紹并討論這個架構(gòu)的本質(zhì)理論基礎(chǔ)抵代。然后,我們會討論必備的基礎(chǔ)性應(yīng)用忘嫉、其他可能的實用案例并就開發(fā)者如何使用本平臺提供參考荤牍。第三,我們會呈現(xiàn)現(xiàn)有的概念驗證實現(xiàn)庆冕,這個實現(xiàn)是用Erlang語言編寫的康吵。最后,我們會拋
磚引玉访递,討論未來的方向晦嵌,并與其它技術(shù)進行對比。
1.1前期工作
區(qū)塊鏈自比特幣始拷姿,展現(xiàn)出了在互聯(lián)網(wǎng)上建構(gòu)價值交換的新可能[1]惭载。許多前途光明的進展此后得到孕育:以太坊展現(xiàn)出了編寫區(qū)塊鏈架構(gòu)下圖靈完備智能合約的潛力[2];Truthcoin創(chuàng)建了在區(qū)塊鏈上部署預(yù)言機(oracles)的工具[3]响巢,而Gnosis和Augur則展現(xiàn)了如何讓它們變得更高效[4]描滔;CaseyDetrio展現(xiàn)了如何在區(qū)塊鏈上部署市場[5];Namecoin展現(xiàn)了如何將域名命名服務(wù)器以分布式部署[6]踪古;公證通則向人們展現(xiàn)了如何用區(qū)塊鏈存儲哈希的形式作為任意數(shù)據(jù)的存在證明[7]含长。
這些技術(shù)展現(xiàn)出極大的潛力券腔,能向任何人提供高級別的金融和法律服務(wù)。然而拘泞,截止目前纷纫,它們都沒能有效整合起來,將潛力變?yōu)楝F(xiàn)實陪腌。尤其是涛酗,目前所有的解決方案都缺失如下至少一項特性:治理機制、可擴容性偷厦、腳本安全和廉價接駁現(xiàn)實數(shù)據(jù)的能力[待引用]商叹。Aeternity將在這些方面開拓技術(shù)的前沿。
2.Aeternity區(qū)塊鏈
我們認(rèn)為只泼,所謂現(xiàn)有智能合約平臺“缺失可擴容性剖笙、腳本安全和廉價接駁現(xiàn)實數(shù)據(jù)數(shù)據(jù)的能力”,說到底是3個核心問題请唱。首先弥咪,目前流行的【有狀態(tài)】設(shè)計使得專為某個平臺編寫的智能合約難以分析①,而【有狀態(tài)】再加上順序交易排序使得可擴容性問題變得愈發(fā)復(fù)雜[待引用]十绑。第二聚至,將現(xiàn)實數(shù)據(jù)以去中心化、去信任且可靠的方式接駁到系統(tǒng)中的做法將使得許多前途光明的應(yīng)用的實現(xiàn)變得更困難本橙,甚至就是不可能[待引用]扳躬。第三,平臺自身難以實現(xiàn)自我升級甚亭,難以跟上技術(shù)知識或經(jīng)濟知識的進步贷币。我們相信,這3個問題都存在清晰的解決路徑亏狰,且應(yīng)當(dāng)?shù)玫教剿鳌?/p>
第二烘挫,如Augur這樣的應(yīng)用已經(jīng)嘗試過將現(xiàn)實數(shù)據(jù)以去中心化的方式接駁到區(qū)塊鏈上了——其流程本質(zhì)上是在智能合約內(nèi)部另行建構(gòu)一個共識機制[8],而非利用區(qū)塊鏈本身的共識機制柬甥。這意味著較低的效率饮六,卻不能增強安全性。我們可以自然而然地推論出苛蒲,我們應(yīng)該通用
化改造區(qū)塊鏈的共識機制卤橄,使之既可以提供下一個內(nèi)部的狀態(tài)信息,也能提供外部世界的狀態(tài)信息臂外。因此窟扑,我們可以認(rèn)為,區(qū)塊鏈的共識機制決定了運行何等復(fù)雜的理論的結(jié)果可以被稱作是一個預(yù)言機(oraclemachine):預(yù)言機是一種理論上比圖靈機更強大的東西寄月,它可以提供一些不一定可以被計算得出的答案辜膝,比如无牵,“誰贏得了足球比賽X的勝利漾肮?”[待引用]
第三,我們可以自然推導(dǎo)出茎毁,共識機制也可以被用來決定系統(tǒng)參數(shù)克懊。這使得它可以適應(yīng)不斷變化的外部條件,也可以隨時引入新的前沿研究成果七蜘。
本章節(jié)的余下部分將更詳細(xì)地介紹Aeternity區(qū)塊鏈谭溉,首先是簡單地總覽賬戶、代幣橡卤、命名系統(tǒng)和區(qū)塊結(jié)構(gòu)扮念。然后我們將解釋我們對于狀態(tài)通道和智能合約的選擇,再然后是對區(qū)塊鏈的共識機制如何可以被用來創(chuàng)建高效的預(yù)言機碧库、如何治理整個系統(tǒng)柜与。最后巧勤,我們將從多個角度探討可擴容性問題。
①在摧毀了“TheDAO”的再入(re-entrance)漏洞身上弄匕,我們可以一窺分析【有狀態(tài)】合約的難度颅悉。即便多位以太坊創(chuàng)始人和整個社區(qū)都已經(jīng)對其代碼進行過審計[待引用]。
2.1代幣迁匠,賬戶與區(qū)塊
即便從合約開發(fā)者的角度來看是“無狀態(tài)”的剩瓶,Aeternity區(qū)塊鏈仍追蹤數(shù)個預(yù)設(shè)置的狀態(tài)組件。我們現(xiàn)在對此城丧、以及每個區(qū)塊的內(nèi)容延曙,進行解釋。在2.5小節(jié)我們還描述了一些可能的優(yōu)化方案亡哄。
2.1.1訪問代幣Aeon
使用本區(qū)塊鏈當(dāng)然不是免費的搂鲫,用戶需要花費一種我們稱為“Aeon”(譯注:音同“伊恩”)的代幣。Aeon是消費任意平臺資源時的支付項磺平,也是構(gòu)筑在本平臺上的其它金融應(yīng)用的基礎(chǔ)魂仍。
創(chuàng)世區(qū)塊中Aeon的分配受控于一個存儲于以太坊上的智能合約。而此后的aeon創(chuàng)建和分配方式是挖礦拣挪。
所有的系統(tǒng)費用都將使用aeon支付擦酌,而所有的智能合約都將用aeon來結(jié)算。
2.1.2賬戶
每個賬戶都有一個地址和一個aeon余額菠劝,以及一個隨著每筆交易和最新一次更新的區(qū)塊高
2.1.3命名系統(tǒng)
在許多區(qū)塊鏈系統(tǒng)中寓调,對于用戶來說,地址是不可讀的锄码,這對這些系統(tǒng)而言是不利的夺英。鑒于AaronSwartz的工作和Namecoin的案例,Aeternity將展現(xiàn)一個既去中心化也很安全的命名系統(tǒng)滋捶,且支持對人類友好的名稱[9]痛悯。區(qū)塊鏈的狀態(tài)將包括[對人類友好的獨一無二的字符串]
與[固定大小字節(jié)數(shù)組]之間的配對圖。這些名稱將可以用來指定諸如Aeternity賬戶地址或Merkle樹這樣的哈希重窟。
2.1.4區(qū)塊內(nèi)容
每個區(qū)塊都將包含如下組件:
·前一區(qū)塊的哈希
·交易Merkle樹
·賬戶Merkle樹
·名稱Merkle樹
·開放通道的Merkle樹
·尚未解答各自問題的預(yù)言機的Merkle樹
·預(yù)言機答案的Merkle樹
·Merkle證明的Merkle樹
·隨機數(shù)產(chǎn)生器中载萌,現(xiàn)在的熵
前一區(qū)塊的哈希將用來維護區(qū)塊鏈的排序。交易樹包含這一區(qū)塊中的所有交易。除了共識投票樹扭仁,所有的樹都完全處于共識之下:如果從一個區(qū)塊到下一個區(qū)塊可缚,一樹有變動,這一變動必須在新區(qū)塊的交易樹中用一筆交易體現(xiàn)出來斋枢,而這一更新的Merkle證明需要加入這一區(qū)塊的Merkle證明樹中帘靡。余下三種樹的意義將在后面的章節(jié)中得到解釋。
2.2狀態(tài)通道
區(qū)塊鏈圈最近最為有趣的進展就是對狀態(tài)通道的研究瓤帚。它們的基準(zhǔn)原則是描姚,在大多數(shù)情況下,只有受到一筆交易影響的人需要知道這筆交易戈次。本質(zhì)上轩勘,交易各方在區(qū)塊上發(fā)起一些狀態(tài),如怯邪,一份以太坊合約或一個比特幣多方簽名绊寻。然后他們可以互相發(fā)送已經(jīng)簽署的更新到這個狀態(tài)上。關(guān)鍵在于悬秉,他們中任何一方都可以用其更新區(qū)塊鏈上的狀態(tài)澄步,但在大多數(shù)情況中,他們不會這么做和泌。這使得交易在信息傳輸并得到各方處理后立即發(fā)生村缸,而非讓各方等待,直到交易得到區(qū)塊鏈的共識機制的驗證——以及可能地武氓,得到最終確定梯皿。
在Aeternity上撒穷,只有aeon轉(zhuǎn)賬這樣的狀態(tài)更新需要在鏈上進行確定余赢,而能夠轉(zhuǎn)賬的aeon必須是交易各方已經(jīng)存入通道的aeon。這將使得所有通道各自獨立丰捷,顯而易見的好處是忠烛,任何涉及通道的交易都可以平行處理属提,顯著提升交易吞吐量。
區(qū)塊鏈僅僅用作確定最終結(jié)果况木,或是解決可能出現(xiàn)的爭議垒拢,可以勉強比作是一個司法系統(tǒng)。然而火惊,由于區(qū)塊鏈的行為是可預(yù)測的,對狀態(tài)通道的預(yù)計結(jié)果發(fā)起爭議是沒有什么收益的奔垦;惡意用戶有著正確行事的激勵屹耐,且只在區(qū)塊鏈上確定最終狀態(tài)。所有這些加在一起,將呈數(shù)量級提升交易速度惶岭、交易量和隱私性寿弱。
2.2.1智能合約
雖然只有aeon轉(zhuǎn)賬的狀態(tài)更新發(fā)生在鏈上,Aeternity仍然提供了一個可以運行“智能合約”的圖靈完備虛擬機按灶。Aeternity上的合約必須是根據(jù)某些規(guī)則分配資金的約定症革,這與以太坊上類似實體的合約截然相反。這里有兩個更顯著的實用性區(qū)別:按照默認(rèn)規(guī)則鸯旁,只有相關(guān)方知
道某一份合約噪矛,且只有有開放狀態(tài)通道的相關(guān)方可以創(chuàng)建一份有效的合約。如果各方就一份合約達成一致铺罢,他們可以簽署合約艇挨,然后將合約備份以備未來參考。只有在結(jié)果發(fā)生爭議的時候韭赘,合約將被提交到鏈上缩滨,此時代碼僅僅作為所提交的交易的一部分得到過儲存,而非其它任何情況泉瞻。如果事情到了這一步脉漏,區(qū)塊鏈將按照合約規(guī)定分配代幣,并關(guān)閉通道袖牙。
圖表1鸠删,一份簡易合約,內(nèi)容為黃金價格對賭贼陶。使用的語言是類似Forth的Chalang刃泡,詳見
4.1節(jié)。
圖表1的例子展示的是一份非常簡單的合約碉怔,其內(nèi)容是對賭某一時間的黃金價格烘贴。第1行中,宏Gold儲存了相關(guān)預(yù)言機的標(biāo)識符撮胧,如果在2016年12月1日黃金價格低于38美金每克桨踪,這個預(yù)言機將返回值true。第2-4行顯示了本合約的內(nèi)容:我們首先將金價預(yù)言機的標(biāo)識符
壓入到棧內(nèi)芹啥,并要求其使用預(yù)言機锻离,這將使得預(yù)言機的答案出現(xiàn)在棧頂。然后我們對其進行條件分歧:如果預(yù)言機的返回值是true墓怀,那么我們將0和1000壓入棧內(nèi)汽纠,指示的是0個aeon需要被毀掉,而通道的第一參與者得到1000個aeon傀履。否則虱朵,我們壓入0和0,第二個0指
示的是通道的另一參與者將得到通道內(nèi)的所有aeon。最后碴犬,我們壓入0絮宁,這將是這個通道的狀態(tài)的隨機數(shù)。在實際操作中服协,隨機數(shù)會在部署時就產(chǎn)生绍昂。
需要特別指出的是,Aeternity上的合約不會維持任何自身狀態(tài)偿荷。所有狀態(tài)都由交易相關(guān)方負(fù)責(zé)維護窘游,作為輸入項在執(zhí)行的時候提交。每個合約本質(zhì)上都是一個純函數(shù)遭顶,會得到一些輸入张峰,然后給出一個新的通道狀態(tài)作為輸出②。學(xué)術(shù)界和行業(yè)內(nèi)對于在軟件開發(fā)棒旗,特別是在金融
應(yīng)用的開發(fā)方面使用純函數(shù)的收益早已有著廣泛的論述[10][待引用]喘批。
②需要指出的是,既然合約可以讀取預(yù)言機的答案和某些環(huán)境參數(shù)铣揉,它們也就不完全是純函數(shù)饶深。然而,預(yù)言機的答案一旦產(chǎn)生
就永遠不會變動逛拱,因此這一點可以視作是預(yù)言機的計算富集度的結(jié)果敌厘,而非不純。環(huán)境參數(shù)可視作“必要的惡”朽合,且在理想情況下可以用高級語言進行合理分割俱两。
圖表2,一個簡單的哈希鎖曹步。
圖表3宪彩,使用哈希鎖以去信任的方式通過中間人發(fā)送代幣。
a)合約互動與多步驟合約
即便所有的合約都是無狀態(tài)的讲婚,且互相獨立地執(zhí)行尿孔,合約互動和有狀態(tài)性仍然可以通過哈希鎖來實現(xiàn)[待引用]。圖表2展示了一個簡單的哈希鎖筹麸。第1行中活合,我們定義一個被稱為“哈希鎖”的函數(shù),并預(yù)計棧內(nèi)會包含哈希h和秘密s物赶。第2行對兩者進行互換白指,旨在在調(diào)用第4
行的hash(v)和h相等運算符之前,哈希第3行的秘密块差。如果秘密是哈希的預(yù)映射侵续,則返回值true倔丈。此函數(shù)可以用作憨闰,使得(predicate)代碼分支在不同合約中的執(zhí)行基于同一秘密值的存在與否状蜗。
作為一個簡易的實用案例,哈希鎖使得并不共享狀態(tài)通道的用戶可以以去信任的方式互相發(fā)送aeon鹉动,只要他們之間存在一條通道路徑轧坎。舉例而言,如果Alice和Bob之間有一個通道泽示,而Bob和Carol之間有一個通道缸血,那么Alice和Carol可以通過Bob進行交易。他們通過創(chuàng)建
兩份圖表3所示的合約的備份來實現(xiàn)這一點械筛,每個通道得到一個備份捎泻。第1行的提交(Commitment)是Alice選擇的一個秘密的哈希。第3行我們將其壓入棧內(nèi)埋哟,并調(diào)用哈希鎖函數(shù)笆豁。if語句的哪一個分支會得到執(zhí)行取決于哈希鎖的返回值。一旦這些合約都得到所有相關(guān)方的簽署赤赊,Alice就會公布這個秘密闯狱,使得Bob和Carol可以用它來獲得他們各自應(yīng)得的aeon。
圖表4抛计,使用哈希鎖來進行通道間多方競賽的簡化示例哄孤。
哈希鎖也可以用來,比如吹截,進行通道間多方競賽瘦陈,見圖表4.所有人都與競賽管理員之間創(chuàng)建通道,管理員向每一個通道都公布同一份合約波俄。假設(shè)我們在競賽State32中晨逝,由函數(shù)State32定義,而我們希望以去信任的方式同時更新所有的通道到State33.當(dāng)競賽管理員公布秘密的時候弟断,所有通道都會同時更新咏花。
b)可測量的執(zhí)行
合約的執(zhí)行會按照類似以太坊“gas”的方式得到測量,但Aeternity使用兩種不同的資源來進行測量阀趴,一為時間昏翰,一為空間。這兩者的使用都由需求執(zhí)行的那一方用aeon付費刘急。
這看起來并不理想棚菊,因為有可能一開始是另一方導(dǎo)致需要用區(qū)塊鏈來解決爭議。然而叔汁,只要通道內(nèi)的資金并非全部是用來對賭的统求,那么這個問題就可以在合約代碼中變得無效化检碗,因為后者有能力將資金從一方完全再分配到另一方。實際上码邻,一般來說最好避免使用一個通道中的所有資金來交易折剃,因為這會負(fù)面激勵失敗方,令其在關(guān)閉通道的時候不予合作像屋。
2.2.2示例
讓我們將前述概念落地怕犁。在實際操作中,如果Alice和Bob希望使用Aeternity上的狀態(tài)通道進行交易己莺,他們會經(jīng)歷如下流程:
1)Alice和Bob簽署了一份交易奏甫,這筆交易明確了他們各自向通道內(nèi)存入了多少資金,并將其公布到鏈上凌受。
2)一旦區(qū)塊鏈開啟了通道阵子,他們倆都可以創(chuàng)建新的通道狀態(tài),將其互相發(fā)送并簽署胜蛉。通道狀態(tài)可以是通道內(nèi)資金的一次再分配挠进,或是一份決定再分配內(nèi)容的合約。每一個通道狀態(tài)都有不斷增加的隨機數(shù)腾么,并由雙方簽署奈梳,所以如果發(fā)生爭議,最后一個有效的狀態(tài)可以被提交到鏈上解虱,然后由區(qū)塊鏈來執(zhí)行攘须。
3)通道可以如下兩種方式之一關(guān)閉:
a)如果Alice和Bob決定,他們已經(jīng)交易完畢殴泰,且同意他們各自的最終余額于宙,他們可以簽署一筆交易,指明此事實悍汛,并將其提交到區(qū)塊鏈上捞魁,后者將關(guān)閉此通道,并相應(yīng)地再分配通道內(nèi)的資金离咐。
b)如果Alice拒絕簽署最終交易谱俭,無論原因是什么,Bob都可以提交兩者都簽署過的最新的一個狀態(tài)宵蛀,并提請通道按此狀態(tài)關(guān)閉昆著。這將開啟一個倒計時。如果Alice認(rèn)為Bob不誠實术陶,她有機會在倒計時完畢前凑懂,公布一個雙方都簽署過的、但隨機數(shù)值更高的狀態(tài)梧宫。否則接谨,通道
將在倒計時完畢時關(guān)閉摆碉。
2.3共識機制
既然大多數(shù)計算都發(fā)生在通道中,而非鏈上脓豪,我們將使用一個慢最終性的共識機制巷帝。這使得共識的取得在經(jīng)濟上更可承受。共識機制將使用少量工作量證明機制跑揉,因而可能的分叉事件發(fā)生的數(shù)量將會很低锅睛,且可以匹配所有人的存儲空間埠巨。使用哪個分叉的決策將極大地受到預(yù)測市場的結(jié)果影響历谍,預(yù)測市場將告訴我們什么決策是最好的。對我們的共識機制進行提議和分析已經(jīng)超出了本文的范疇辣垒,將在稍后發(fā)布的一篇補充性文章中完成望侈。
預(yù)覽:共識機制在Aeternity中的角色有些與眾不同。除了就新的區(qū)塊進行共識勋桶,共識機制還負(fù)責(zé)對預(yù)言機答案和系統(tǒng)參數(shù)的值達成共識脱衙。尤其是,共識機制可以自我改變例驹。然而捐韩,還需要指出的是,這并不是完美無缺的方案鹃锈。舉例而言荤胁,如果使用了一個簡易的工作量證明機制,對礦工行賄然后腐化預(yù)言機的行為將可以比較廉價地達成屎债。因此仅政,Aeternity將使用一種更新的權(quán)益證明算法,再加上一小部分工作量證明機制作為補充盆驹,并盡量權(quán)衡而取其二者的精華圆丹。除此之外,新的aeon代幣的發(fā)行也仰賴工作量證明機制躯喇。
2.3.1預(yù)言機
無論編寫為文本或代碼辫封,絕大部分合約最關(guān)鍵的功能就是根據(jù)環(huán)境來得出值,如不同商品的價格或是某一事件是否發(fā)生廉丽。一個缺乏此能力的智能合約系統(tǒng)本質(zhì)上是一個封閉的系統(tǒng)倦微,且可以被看作是沒有什么用處的。這是一個基本得到公認(rèn)的事實雅倒,且已經(jīng)有數(shù)個項目試圖將外部數(shù)據(jù)以去中心化的方式帶入?yún)^(qū)塊鏈[8]璃诀。然而,要決定一個被提供的事實是否是真相蔑匣,這本質(zhì)上需要在共識機制之上另行實現(xiàn)一種新的共識機制劣欢。
讓兩種共識機制互相重疊地運行棕诵,和獨立運行這兩種共識機制一樣地昂貴。此外凿将,這并不能增強安全性校套,因為安全性稍弱的那一個仍會遭到攻擊,并產(chǎn)生“錯誤”的值牧抵。因此笛匙,我們提出將兩種共識機制合二為一,本質(zhì)上對我們用來決定系統(tǒng)狀態(tài)的那個共識機制進行復(fù)用犀变,即妹孙,也用這個機制來決定外部世界的狀態(tài)。
這一切的運作方式如下:任何一個aeon持有人都可以通過提交一個[是/否]問題的答案來啟動一個預(yù)言機获枝。此時蠢正,他們還需要明確這個問題可以得到解答的時間表,這既可以是馬上回答省店,或是未來的某個時刻嚣崭。啟動預(yù)言機的用戶需要按照時間表的長度存入等比例的aeon,
只要用戶此后提供一個被接受為真相的答案懦傍,這些代幣將會退換雹舀,否則將會被毀。區(qū)塊鏈會為這個預(yù)言機產(chǎn)生一個獨一無二的標(biāo)識符粗俱,一旦答案準(zhǔn)備就緒说榆,這個標(biāo)識符也可以用來尋回答案。
到了提供問題答案的時候源梭,啟動預(yù)言機的用戶可以免費提供一個答案娱俺。一旦預(yù)言機的啟動者提供了答案,或超過了特定的時間废麻,任何用戶都可以提交與之相反的答案荠卷,當(dāng)然他們都需要存入同等數(shù)額的aeon。如果在時間表結(jié)束后沒有與之矛盾的答案提交烛愧,預(yù)言機啟動者提供的答案將被接受為真相油宜,而存款返還。如果任何矛盾答案被提交怜姿,那么用于新區(qū)塊的共識機制將會被用來回答預(yù)言機慎冤。后者這種情況更為昂貴,但我們知道我們可以拿走(銷毀)至少兩筆存款其中的一筆沧卢,這個做法就是經(jīng)濟上可行的蚁堤。
2.4治理
過去,區(qū)塊鏈系統(tǒng)的治理一直是一個老大難問題但狭。無論何時需要進行系統(tǒng)升級披诗,就必須硬分叉撬即,然后所有價值持有人都會進行大討論。如果在一個系統(tǒng)中呈队,用戶的經(jīng)濟激勵和決策者并不一致剥槐,或者沒有明確升級路徑,那么即便是修正源代碼中一個任意設(shè)置的變量這樣一個簡單的事情都很難實現(xiàn)宪摧,就像我們在比特幣的區(qū)塊大小辯論上看到的那樣粒竖。我們還曾見證和經(jīng)歷過更加復(fù)雜的治理決策,如修補TheDAO中的一個智能合約漏洞——這需要系統(tǒng)開發(fā)者快速進行干預(yù)几于。
這些系統(tǒng)的首要問題顯而易見——協(xié)議升級或變動的決策流程沒有得到清晰定義蕊苗,且缺乏透明度。Aeternity的治理系統(tǒng)是共識機制的一部分孩革。它將使用預(yù)測市場岁歉,以期盡可能地高效而透明。
此外膝蜈,共識機制本身會被一系列決定系統(tǒng)如何運行的變量進行定義,且隨著每個新的區(qū)塊發(fā)生輕微的升級——從交易或詢問預(yù)言機的操作花費幾何熔掺,到修改諸如區(qū)塊時間這樣的基礎(chǔ)參數(shù)值饱搏。
通過關(guān)于定義協(xié)議的變量的預(yù)測市場,用戶可以學(xué)習(xí)如何高效地改進協(xié)議置逻。通過關(guān)于潛在硬分叉的預(yù)測市場推沸,我們可以幫助整個社區(qū)就使用哪個版本的軟件達成共識。每個用戶都可以自行選擇希望優(yōu)化哪一個維度券坞,但一個簡單的默認(rèn)戰(zhàn)略基準(zhǔn)是:最大化其持有代幣的價值鬓催。
2.5可擴容性
2.5.1分片樹(ShardingTrees)
目前我們呈現(xiàn)的架構(gòu)是高度可擴容的。甚至有可能這樣運行區(qū)塊鏈:每個用戶只追蹤他們關(guān)心的那部分區(qū)塊鏈狀態(tài)恨锚,并無視其他人的數(shù)據(jù)宇驾。一個狀態(tài)至少需要一份備份才能讓一個新用戶確定他們關(guān)心的亞狀態(tài),但我們可以通過任意多個節(jié)點將這份數(shù)據(jù)分片(shard)猴伶,而每一個節(jié)點的負(fù)載可以任意小课舍。Merkle樹可以用來證明一個亞狀態(tài)是一個狀態(tài)的一部分[11]。我們因此可以想象一個場景他挎,特定節(jié)點專門追蹤樹筝尾,并因為插入和檢索而得到報酬。
2.5.2輕客戶端
輕客戶端不需要下載所有區(qū)塊办桨。首先筹淫,用戶從他們偏好的一個歷史分叉中向其客戶端提供一個哈希,這一方法也被稱為[弱主體性](weaksubjectivity)[12]呢撞。然后损姜,客戶端只會下載那些包含該哈希的區(qū)塊的分叉庵寞。客戶端只下載區(qū)塊頭薛匪。區(qū)塊頭比全區(qū)塊小得多捐川;只需要處理極少的交易。為了保持簡潔逸尖,我們在2.1.4節(jié)討論區(qū)塊結(jié)構(gòu)的時候沒有提到區(qū)塊頭古沥,但它們包含
如下內(nèi)容:
·前一區(qū)塊的哈希
·所有狀態(tài)樹的根哈希
2.5.3狀態(tài)通道與平行主義(parallelism)
狀態(tài)通道吞吐量極大,其中的絕大多數(shù)交易永遠不會在區(qū)塊鏈上執(zhí)行娇跟,甚至是記錄岩齿。此外,通道不會在鏈上寫入任何共享的狀態(tài)苞俘,所以所有確實在區(qū)塊鏈上記錄的交易可以得到平行處理盹沈。鑒于今天售賣的大多數(shù)消費級的硬件都至少有4個處理核心,我們可以得到一個立竿見影的效果吃谣,即乞封,交易吞吐量可以大致乘以4.
不止如此,由于永遠不會有任何復(fù)雜的同時進行的互動岗憋,將此區(qū)塊鏈架構(gòu)分片(sharding)將會是相對容易的肃晚。鑒于區(qū)塊鏈分片仍處在實驗階段,我們特意決定在Aeternity的初始設(shè)計中不追求任何分片技術(shù)仔戈。然而关串,如果未來情況發(fā)生變化,Aeternity將是最容易分片的區(qū)塊鏈
之一监徘。
2.5.4給定記憶要求下的TPS
定義協(xié)議的變量將通過共識機制不斷得到更新晋修。從最初始的默認(rèn)值開始,我們可以計算初始的默認(rèn)每秒交易量(TPS)凰盔。
如運行一個節(jié)點墓卦,我們需要保存取得自最終性達成以來的所有區(qū)塊的備份,且我們需要能記錄100倍于此的信息廊蜒,以防備攻擊趴拧。預(yù)計最終性為2天,那么自最終性以來就會有5760個區(qū)塊山叮。所以記憶要求為5760x1MBx100=576000MB=576GB.當(dāng)沒有攻擊發(fā)生的時候著榴,你只需要大約5.76GB的空間來存儲區(qū)塊。
3.應(yīng)用
Aeternity智能合約的無狀態(tài)特性使得它非常便于在Aeternity區(qū)塊鏈上建設(shè)如下應(yīng)用屁倔。它尤其適合高交易量的應(yīng)用場景脑又。
3.1區(qū)塊鏈基礎(chǔ)工具
區(qū)塊鏈基礎(chǔ)工具是指aeon、錢包、名稱和相關(guān)概念這樣的必需原生物问麸。他們將可復(fù)用的組件模塊化往衷,這些組件可以用作應(yīng)用的基礎(chǔ),且可以得到改進严卖。
3.1.1身份
每個賬戶都會有一個指定的席舍、獨一無二的ID.用戶可以注冊獨一無二的名稱,并將名稱與一個數(shù)據(jù)結(jié)構(gòu)的Merkle根相連哮笆。數(shù)據(jù)結(jié)構(gòu)可包含一個用戶的獨一ID和其它賬戶信息来颤。我們預(yù)計將使用Schema.org的JSON格式來代表諸如個人或公司這樣的實體[13]。
錢包是一個用來與Aeternity發(fā)生互動的軟件稠肘。錢包將掌管aeon私鑰福铅,并創(chuàng)建和簽署交易。用戶可以使用錢包來發(fā)送通道交易项阴,并使用通道網(wǎng)絡(luò)的app.
3.1.3存在證明
是一種可以用來公布任何數(shù)據(jù)的哈希的交易類別滑黔。系統(tǒng)參與者可以用其header來證明該數(shù)據(jù)在該時間點存在。
3.2狀態(tài)通道應(yīng)用
狀態(tài)通道中的智能合約可以完美契合web上需要高交易吞吐能力的小微服務(wù)环揽。
3.2.1收費API
今天的絕大多數(shù)API都是公開的略荡,任何人都可以調(diào)用,又或者調(diào)用某些API需要用戶名-密碼或特有訪問代幣薯演。支付通道使得一種新型API變得可能撞芍,人們可以為每一次的API調(diào)用付費,甚至是每一次HTTP請求跨扮。支付以訪問API還解決了DDoS問題,且使得建設(shè)高質(zhì)量的验毡、總是可用的API變得更便捷衡创。需要支付的API響應(yīng)是創(chuàng)建一些至今尚不可能的商業(yè)模型的基礎(chǔ)需求,可以在未來的去中心化經(jīng)濟中扮演非常重要的角色晶通。他們可以為信息的持有人提供經(jīng)濟激勵璃氢,讓他們將原本私有的數(shù)據(jù)變得公開可用。
3.2.2安全眾籌
我們可以使用優(yōu)先保障合約(dominantassurancecontracts)來部署安全的眾籌活動[待引用]狮辽。這種智能合約可以用來為公共利益項目籌資一也,如一座新的大橋、一所新的學(xué)泻聿保或市場椰苟。
優(yōu)先保障合約與kickstarter這樣的傳統(tǒng)保障性合約相比截然不同,因為前者使得參與策略優(yōu)先树叽。如果融資失敗舆蝴,所有參與者的aeon都可以返還,且附加上利息,所以這些參與者針對減少流動性而未獲得貨物的情況得到了保障洁仗。使用預(yù)言機层皱,我們可以確保貨物或服務(wù)的提供
者只有在貨物或服務(wù)真正提供給參與者之后才能得到支付。
3.2.3跨鏈原子級互換
跨鏈原子級互換可以讓aeon與比特幣之間實現(xiàn)去信任化交易[14]赠潦、[15]叫胖。它可以用哈希鎖來實現(xiàn),哈希鎖可以鎖定兩條區(qū)塊鏈上的同等價值她奥。
3.2.4穩(wěn)定價值資產(chǎn)與投資組合復(fù)制
我們可以用智能合約來讓自創(chuàng)資產(chǎn)與現(xiàn)實資產(chǎn)保持幾乎等值瓮增。舉例而言,我們可以創(chuàng)建一種錨定與黃金等值的資產(chǎn)方淤。自創(chuàng)衍生品也可以以對等或相反的對的形式創(chuàng)建钉赁。要讓一個用戶擁有一個隨黃金而動的資產(chǎn),另一個用戶需要擁有一個與黃金呈反向運動的資產(chǎn)携茂。比如你踩,Alice可以與Bob創(chuàng)建一份合約,其中Alice擁有一克黃金讳苦。合約中的貨幣——與一克黃金等值的aeon將流向Alice带膜,而余下的貨幣流向Bob.合約將有一個到期日,屆時黃金的價值將被測量鸳谜,而合約資金相應(yīng)地流向Alice和Bob.
3.2.5事件合約
事件合約在某一事件發(fā)生時支付膝藕,如果該事件沒有發(fā)生則不會有支付,這取決于預(yù)言機的答案咐扭。它們不僅本身就很有趣芭挽,數(shù)個不同的應(yīng)用也可以將其利用起來:
a)保險:我們可以用事件合約來部署保險。舉例而言蝗肪,昂貴的演唱會門票會在壞天氣下變得一文不值袜爪。然而,如果預(yù)言機的答案說演唱會當(dāng)天下雨了薛闪,而去現(xiàn)場的粉絲們可以因此獲得賠償辛馆,這筆投資因而得到了保護,而人們情感上也會更好接受豁延。更嚴(yán)肅的例子:農(nóng)民經(jīng)常對某一季的雨量總值非常感興趣昙篙。我們可以保障他們免受干旱導(dǎo)致的作物減產(chǎn)。
b)爆料:事件合約也可以用來作為揭露敏感信息者的經(jīng)濟激勵诱咏。比如苔可,我們可以就這一事件進行對賭——“A公司使用非法殺蟲劑的信息將于2017年1月24日前被披露”。任何對此信息有訪問權(quán)限的人都有著搶先對此下注胰苏,然后將其披露的經(jīng)濟激勵硕蛹。
3.2.6預(yù)測市場
預(yù)測市場主要是讓用戶就未來某個事件是否會發(fā)生進行對賭醇疼。從對賭金額我們可以預(yù)測未來的幾率[3]、[8]法焰、[16]秧荆。這是在給定金額下最為精確的測定未來的方法[待引用]。一旦事件發(fā)生埃仪,市場將使用預(yù)言機進行結(jié)算乙濒。
見2.4部分,比如卵蛉,我們可以使用預(yù)測市場來預(yù)測哪一個軟件升級將比較有益颁股,而哪一個有害。我們還可以用它來評估選舉中候選人的多少承諾可以實際完成傻丝,所以謊言和無根無據(jù)的空頭支票可以更輕松地被偵測出來甘有。
圖表5,多維預(yù)測市場
a)多維預(yù)測市場:多維預(yù)測市場允許人們預(yù)測未來可能事件之間的關(guān)聯(lián)葡缰。比如亏掀,一個人可以預(yù)測如果Alice被選為領(lǐng)導(dǎo)人,土豆價格會下降泛释,而如果Bob勝利滤愕,土豆會漲價。一個人可以得出結(jié)論怜校,如果Google在接下來的3個月使用A計劃间影,那么它會獲得更多營收,而如果它用B計劃茄茁,那營收可能會少一些魂贬。或者裙顽,如圖表5所示随橘,我們可以發(fā)現(xiàn),如果Alice被選為總統(tǒng)锦庸,那么土豆價格很可能會變低。
3.2.7特定定價的批量交易(batchtrading)市場
對于一個想要從某個市場劫走aeon的攻擊者而言蒲祈,他有兩個思路甘萧。他可以利用時間上的差異,或者是利用空間上的差異梆掸。
·如果市場有空間差異扬卷,攻擊者可以隨意行事。他同時在兩個市場上交易酸钦,他的風(fēng)險對沖掉了怪得,他獲得了利潤。
·如果市場有時間差異,攻擊者可以搶先于市場徒恋。他可以仔細(xì)研究涌入市場的交易蚕断,然后在
那之前或之后搶先買入或賣出。
為了讓市場在空間上統(tǒng)一入挣,所有人都應(yīng)該使用同一個做市商亿乳。為了讓市場在時間上統(tǒng)一,我們需要有特定定價的批量交易(batchtrading)功能径筏。做市商需要對所有人提供統(tǒng)一的價格葛假,如果有人從做市商那里發(fā)現(xiàn)了互相矛盾的價格,那么做市商所有的顧客都應(yīng)該能吸干他所有的通道滋恬。如果做市商提供公平的價格聊训,那么他可以將等量的買家和賣家匹配起來,如圖表6所示恢氯。否則带斑,他將遭遇圖表7的情況,并因此承擔(dān)極大的風(fēng)險酿雪。
圖表6遏暴,黑線為需求曲線,紅線為供應(yīng)曲線指黎。紅色的賣單和紅色的買單等量朋凉。垂直線是做市商選定的價格。所有人都愿意按照比那個價格更高的價格買入醋安,或者愿意以比那個價格更低的價格賣出杂彭。
圖表7,黑色區(qū)域比紅色區(qū)域大得多吓揪。做市商賣出的數(shù)量比買入的多得多亲怠,因此承擔(dān)著巨大的風(fēng)險。
4.實現(xiàn)
大部分關(guān)鍵概念已經(jīng)有基于Erlang語言的概念驗證實現(xiàn)了柠辞。這包括區(qū)塊鏈本身团秽、合約語言、虛擬機叭首、預(yù)言機习勤、治理機制以及一個老版本的共識機制。我們使用Erlang/OTP焙格,因為它非常適合編寫可以平行地響應(yīng)許多請求且不至于崩潰的代碼图毕。全世界在線時間最長的服務(wù)器都是
基于Erlang的。它已經(jīng)作為商業(yè)應(yīng)用存在了30年眷唉,足以證明它是一個可靠而穩(wěn)定的產(chǎn)品予颤。
4.1虛擬機與合約語言
我們的虛擬機是基于堆棧的囤官,類似Forth和比特幣腳本語言,盡管和后者相比蛤虐,它相對富集党饮。虛擬機支持函數(shù)而非goto,使得它的語義相對易于分析笆焰。在我們的Github③上可以找到一整個列表的虛擬機操作碼劫谅。
此外,還有一種叫做Chalang的嚷掠、類似Forth的更高級語言捏检,它可以為虛擬機編譯字節(jié)碼。它支持宏和變量名稱不皆,但仍維持基于堆棧的執(zhí)行模型[17]贯城。Chalang代碼的示例也可參考我
們的Github④頁面。
③https://github.com/aeternity/chalang/blob/master/opcodes.md
④https://github.com/aeternity/chalang/tree/master/examples
4.2通過web整合實現(xiàn)行業(yè)采納
web是最為流行的應(yīng)用平臺霹娄。我們會為Aeternity區(qū)塊鏈的核心功能提供便捷好用的web開發(fā)工具能犯,如JSlibrary和JSON的API.
4.3開源模塊
為了能更便捷地被復(fù)用于私有區(qū)塊鏈聯(lián)盟或其他場景,軟件將會被編寫為基于MIT牌照的模塊犬耻,如共識模塊踩晶,因此可以適應(yīng)特定需求。
4.4可用性與用戶體驗設(shè)計
無摩擦的人類互動是我們開發(fā)工作的重中之重枕磁。更具體地說渡蜻,我們會確保能清晰地設(shè)定誰來控制身份、秘鑰和交易计济。此外茸苇,通過web網(wǎng)關(guān)提供便捷的訪問會是我們未來開發(fā)的核心關(guān)注點。用戶參與預(yù)測市場的新常態(tài)將是類似Tinder(左沦寂、右滑動)的手機軟件界面和使用iframe整合進網(wǎng)站的簡潔的web錢包学密。
5.討論
我們已經(jīng)解釋了如何構(gòu)筑一個本質(zhì)上更高效的價值傳輸系統(tǒng)。前述系統(tǒng)實際上是一個全球預(yù)言機传藏,可以被用來提供全球范圍內(nèi)的決策服務(wù)腻暮。尤其是,所有在第3章節(jié)提出的應(yīng)用都可以輕松而高效地建構(gòu)在Aeternity上毯侦。
然而西壮,我們的做法本質(zhì)上是有限制的,且存在改善升級的路徑叫惊。如下文所示。
5.1限制與權(quán)衡
雖然我們確實相信做修,鑒于在其它方面得出的性能提升霍狰,我們的架構(gòu)設(shè)計所作出的權(quán)衡取舍是很有道理的抡草,但Aeternity并非是去中心化應(yīng)用的一攬子解決方案。它更應(yīng)該被視作是對現(xiàn)有技術(shù)的協(xié)同增效補充蔗坯。你需要特別注意如下幾個問題康震。
5.1.1鏈上狀態(tài)
盡管收益很多,但Aeternity缺乏可編程狀態(tài)的特性使得它不適合需要某一個定制狀態(tài)處于共識之下的應(yīng)用宾濒。比如腿短,這包括DAO(分布式自治組織),因為它們通常有定制的命名系統(tǒng)和不與底層資產(chǎn)的價值相關(guān)聯(lián)的子代幣绘梦。
5.1.2免費期權(quán)問題
如果Alice和Bob之間有一個通道橘忱,而Alice簽署了一份合約,當(dāng)她發(fā)送這份合約給Bob的時候卸奉,她實際上是給了Bob一個免費期權(quán):Bob可以選擇在未來的任意時間點簽署和返回這份合約(即钝诚,激活)。這一般來說可不是理想的情況榄棵。為了避免這個問題凝颇,通道合約并非立即全額激活。它們實際上按時間或空間被劃分為許多小碎片疹鳄。參與雙方會按照碎片化的小間隙來簽署這份合約拧略,因而沒有任何一方會向另一方陡然提供一大份免費期權(quán)。
舉例而言瘪弓,如果雙方想對賭100個aeon垫蛆,那么他們可以以1000個小步驟來簽署這份合約,每個步驟涉及0.1個aeon.這將意味著傳輸大約1000條信息杠茬,每個方向500條——這是很廉價可行的月褥,畢竟合約永遠不會提交到區(qū)塊鏈上。另一個例子是瓢喉,如果有人想創(chuàng)設(shè)一種金融資
產(chǎn)宁赤,該資產(chǎn)存在100天,那么他可以以2400個小步驟來簽署栓票,每小時一步决左。這意味著傳輸2400條信息,每個方向1200條走贪。
5.1.3流動性損失與狀態(tài)通道拓?fù)浣Y(jié)構(gòu)
當(dāng)使用2.2.1節(jié)展示的哈希鎖來組合通道的時候佛猛,任何中間人都需要鎖定高額的費用:至少兩倍于將要通過他們傳輸?shù)腶eon.比如,如果Alice和Carol希望通過Bob進行交易坠狡,Bob將會在與Alice互動的時候扮演Carol继找,同理反之亦然。
既然這對于Bob來說非常昂貴逃沿,他就很可能收取一筆費用作為補償婴渡。如果Alice和Carol希望在互相之間進行許多筆交易幻锁,他們就會希望繞過Bob.他們可以創(chuàng)建新的通道,并以去信任的方式使用哈希鎖將活躍合約轉(zhuǎn)移到新的通道中边臼。
不過哄尔,既然額外開放一條通道對一方的流動性會產(chǎn)生負(fù)面影響,那么通過中間人的形式很可能在許多場景中更為理想柠并,尤其是在交易相關(guān)方并不預(yù)計會在未來頻繁重復(fù)交易的情況下岭接。因此,我們可以預(yù)計會萌芽這樣的一個通道拓?fù)浣Y(jié)構(gòu):某些富有用戶通過去信任地傳輸其他用戶之間的交易來賺取利潤臼予。
需要指出的是鸣戴,這并不會產(chǎn)生所謂中心故障點代箭,因為我們完全不需要信任這些交易傳輸者树瞭。如果一個交易傳輸者在哈希鎖的秘密公布之前就離線了承桥,交易就不會成功虐唠。如果他在秘密公布之后再離線郑藏,唯一可能產(chǎn)生的“負(fù)面”效應(yīng)就是這位傳輸者無法拿到自己的aeon了绘证。
5.2未來的工作
目前的架構(gòu)存在數(shù)個可能的改善路徑仅炊。
5.2.1可實用的合約語言
一個可能的弄诲、合理的未來開發(fā)方向是:實驗?zāi)切└鼑?yán)格地遵循功能范例的高級語言寓涨。追蹤一個含蓄不言明的棧一般來說容易導(dǎo)致錯誤盯串,且顯然可以說不適合于高級的、面向開發(fā)者的語言戒良。這應(yīng)該不是很難体捏,畢竟程序已經(jīng)是純函數(shù)了(以某些環(huán)境變量為模),且可以極大地簡化開發(fā)工作和對合約的正式驗證糯崎。如果這得到完成几缭,那么似乎也應(yīng)該校訂虛擬機,使之更緊密地與新語言耦合沃呢,使得匯編不再那么容易出錯年栓、也更少地依賴對于開發(fā)者的信任。理想情況下薄霜,從表層語言到虛擬機代碼的編譯將簡單明了地是一次對經(jīng)過同行評議的研究的直接轉(zhuǎn)錄某抓,盡管可能需要作出一些實用性讓步。
5.2.2多方通道
目前惰瓜,Aeternity上的所有通道都只能是由兩方參與否副。雖然可以通過哈希鎖得到事實上的多方通道,但這是很昂貴的做法崎坊。因此备禀,我們計劃研究是否能通過一個n個m的結(jié)算機制來增加對n方通道的支持。
詞匯對照表
Blockchain區(qū)塊鏈:一種分布式的、防篡改的數(shù)據(jù)庫痹届,有著可測量的訪問權(quán)限控制呻待。數(shù)據(jù)庫由一個不斷增長的、通過哈希鏈接起來的區(qū)塊鏈條定義队腐,且可以有任意附加規(guī)則。
Aeon伊恩幣:一aeon代表一個賬戶單位和一份訪問使用Aeternity區(qū)塊鏈的權(quán)利奏篙。它可以被轉(zhuǎn)移柴淘。
Transaction交易:一條來自用戶,去到區(qū)塊鏈的信息秘通。這是用戶使用其代幣來訪問區(qū)塊鏈的方式为严。
StateChannel狀態(tài)通道:記錄于區(qū)塊鏈上的兩個用戶之間的一種關(guān)系。它使得用戶可以互相發(fā)送aeon肺稀、在互相之間創(chuàng)建去信任化的智能合約第股、且由區(qū)塊鏈來確保執(zhí)行和結(jié)算。
Hash哈希:哈希將任意大小的二進制數(shù)作為輸入话原。它給出一個固定大小的輸出夕吻。同一輸入總是哈希出同一輸出。給定一個輸出繁仁,其對應(yīng)的輸入?yún)s是無法計算的涉馅。
Hasklocking哈希鎖:這是我們溝通不同通道配對、創(chuàng)建涉及超過2用戶的智能合約的方法黄虱。一個秘密由其哈希索引稚矿。而當(dāng)秘密被公布的時候,哈希鎖可以同時更新多個通道捻浦。
Governance治理:一個充分定義的晤揣、為區(qū)塊鏈未來協(xié)議準(zhǔn)備的決策流程。
Oracle預(yù)言機:這是一種將現(xiàn)實世界事實告知區(qū)塊鏈的機制朱灿。使用預(yù)言機昧识,用戶可以預(yù)測區(qū)塊鏈系統(tǒng)以外事件的結(jié)果。
Value-Holder價值持有者:即持有aeon或其它系統(tǒng)內(nèi)金融衍生品的用戶母剥。
Validator驗證者:即參與共識機制的用戶滞诺。就Aeternity而言,所有價值持有者都可以參與共識機制环疼。