以太坊白皮書(中文譯)(2

寫在前面:這是以太坊白皮書第二部分,由於整個白皮書太長,我分成了三部分。翻譯水平有限,如有不當歡迎指正。

以太坊

以太坊意在創建另外一套協議,以便構建去中心化應用,提供一組不同的折中的方案,我們相信這將對一大類去中心化應用非常有用,這類應用特別強調快速開發,安全性(對很小的並且很少使用的應用來說),以及不同應用程序之間高效交互的能力,這都很重要。以太坊通過建立終極的抽象基礎層:內置圖靈完備的編程語言的區塊鏈,允許任何人創建智能合約和去中心化應用,並在這裡創建自定義的所有權規則,交易格式和狀態轉移函數。名字幣的框架用兩行代碼就可以搞定,其他協議如貨幣和信用系統需20行代碼。智能合約,是一個加密盒子,它包含價值並且只有當某種條件滿足的時候才能打開,也能在這個平臺上創建,而且比比特幣腳本提供的功能強大的多,因為這個平臺增加了圖靈完備性,價值感知,區塊鏈感知和狀態。

哲學

以太坊背後的設計理念遵循以下原則:

1. 簡單:以太坊的協議要儘可能的簡單,即使要犧牲一些數據存儲和時間效率(註解3)。為了實現加密貨幣帶來的前所未有的民主化潛力,這是向所有人都開放的以太坊協議的進一步的願景,一個普通程序員應該就能夠遵循和實現整個規範(註解4)。任何增加複雜度的優化都不應該加入進來,除非這個優化能帶來實質性的好處。

2. 通用性:一個以太坊設計哲學的基礎部分是以太坊沒有"特徵" (註解5)。以太坊提供一個內部的圖靈完備的腳本語言,程序員可以用來構建任何可以在數學上定義的智能合約或交易類型。想發明你自己的金融衍生品嗎?用以太坊,你可以。想發行你自己的貨幣嗎?設置一個以太坊合約。想建立一個徹底的守護進程或天網嗎?你可能需要幾千個相互密切聯繫的合約,並且一定要不吝嗇的滿足它們,要做到這一點,用手邊的以太坊來搞,沒什麼能阻止你。

3. 模塊化:以太坊協議的各個部分設計應該儘可能的模塊化和可分離的。在發展過程中,我們的目標是:創建一個程序,如果某人對協議的某個地方進行一個小的修改,應用程序無需修改可以繼續正常運行。創新如Ethash(參考黃皮書的附錄或維基文章)修改了Patricia樹和RLP,應該作為獨立的完整的庫來實現。這樣,即使它們在以太坊裡使用,即使以太坊不需要其中的某些功能,這些功能也可以在其它協議中使用。以太坊開發要最大限度的進行,以利於整個加密貨幣生態系統,而不僅僅是以太坊本身。

4. 靈活性:以太坊的協議不是一層不變的。儘管我們將會非常明智的對頂層架構進行修改,比如分片路線圖,抽象執行,僅僅把數據可用性放進共識。後面開發過程中的計算測試會讓我們發現某些修改(比如對協議架構的修改,或對虛擬機的修改)將大大提供擴展性和安全性。如果我發現這樣的機會,我們將會毫不猶豫的引入。

5. 不歧視和不審查:協議不應該企圖積極的限制或防止特定類別的應用。 協議中的所有監管機制都是設計來直接監管危害的,而不是試圖反對特定的不受歡迎的應用。一個程序員甚至可以在以太坊上運行一個無限循環的腳本,只要他們願意為每一步計算付交易手續費。

以太坊賬戶

在以太坊裡,狀態是由賬戶組成,每個賬戶有一個20字節長的地址,並且狀態轉移直接是在賬戶之間轉移價值或信息。一個以太坊賬戶包含四個字段:

--- 一個計數,保證每個交易只能處理一次

--- 賬戶當前餘額

--- 如果有的話,賬戶的合約代碼

--- 賬戶的存儲(默認空)

以太幣是以太坊內部主要的加密燃料,是用於支付交易手續費的。一般有兩種賬戶:外部擁有賬戶,由私鑰控制,和合約賬戶,由合約代碼控制。一個外部擁有賬戶沒有代碼,並且一個人可以通過創建和簽名交易從外部擁有賬戶發送消息。在合約賬戶裡,每次收到信息的時候,代碼就會激活一次,允許它讀取或寫入內部存儲,並且依次發送信息或創建合約。

注意以太坊裡的合約不應該被看成一些被實現的或編譯過的東西,它更像自治代理,生活在以太坊的執行環境裡,當一個消息或交易"捅"它時,它就會執行一段代碼,並且直接控制它們的以太幣餘額和鍵/值存儲,這個鍵/值存儲是為了跟蹤永久變量而設的。

消息和交易

用在以太坊裡的術語"交易",指的是簽名的數據包,它存儲了一條從一個外部擁有賬戶發出的消息。交易包括:

--- 消息的收件人

--- 用來識別發送者的簽名

--- 發送者發送到收件人的以太幣的數量

--- 一個可選的數據字段

--- 一個STARTGAS值,表示交易執行時,允許的最大計算步驟數量

--- 一個GASPRICE值,表示發送者對每個計算步驟支付的費用

前三個字段是任何一個加密貨幣都需要的標準字段。數據字段默認沒有功能,不過虛擬機有一個操作碼,合約利用這個操作碼可以訪問這個數據。作為一個例子場景,如果一個合約的功能是提供區塊鏈上域名註冊服務,那麼它可能希望把傳給它的數據解釋成兩個字段,第一個字段是要註冊的域名,第二個字段是要註冊到這個域名上的IP地址。這個合約將從消息數據字段中讀取這些值,適當的放在存儲中。

STARTGAS和GASPRICE字段是以太坊抵抗拒絕服務攻擊的關鍵。為了防止代碼中的意外或惡意的無限循環或其它計算浪費,每筆交易需要設定限制代碼執行的步驟數量。計算的基礎單位是"gas"。通常,一個計算步驟消耗1 gas,但是一些操作花費更多數量的gas,因為它們在計算上更貴,或者增加了必須作為狀態存儲的數據量。還有一個費用是交易中的數據每個字節5 gas。費用制度的意圖是讓攻擊者對消耗的資源(包含計算,帶寬和存儲)支付相應比例的費用。因此,任何消耗更多資源的交易必須支付相應比例的gas。

消息

合約可以給其他合約發送消息。消息是虛擬的對象,從不被序列化,僅在以太坊的執行環境中存在。消息包含:

--- 消息發送者(隱含)

--- 消息收件人

--- 隨消息傳送的以太幣數量

--- 可選的數據字段

--- STARTGAS值

基本上,消息和交易很像,只是消息由合約賬戶產生而非外部參與者。當正在執行的合約代碼調用CALL操作時,一條消息就產生了。這個CALL操作就是為了產生和執行一條消息。如同一個交易,一條消息使得收件人賬戶執行它的代碼。所以,合約可以像外部參與者幾乎一樣的方式與其他合約產生聯繫。

注意交易或合約分配的gas允許數量是對這個交易和所有子執行來說的。比如,如果外部參與者A提供1000 gas發送一個交易給B,B在發送消息給C之前消耗600 gas,C內部執行在返回前消耗300 gas,那麼B還能再支付100 gas,不然就沒有gas了。

以太坊狀態轉移函數

以太坊白皮書(中文譯)(2/3)

以太坊狀態轉移函數,APPLY(S,TX) -> S'可以按如下定義:

1. 檢查交易是否格式良好(比如,有正確的數值),簽名是否有效,nonce是否和發送者賬戶的nonce匹配。如果不是,返回錯誤。

2. 計算交易費,用STARTGAS * GASPRICE,並且從簽名中確定發送者地址。從發送者賬戶餘額中減去交易費,增加發送者的nonce。如果餘額不足,返回錯誤。

3. 初始化 GAS=STARTGAS,開始執行,並按每個字節一定數量的gas為交易中的字節支付。

4. 把交易數值從發送者賬戶轉移到接收者賬戶。如果接收者賬戶不存在,創建它。如果接受賬戶是一個合約,執行合約代碼,完成它或直到消耗完所有提供的gas。

5. 如果因為發送者沒有足夠的餘額導致轉移失敗,或者gas消耗盡了,恢復所有狀態,除了支付的手續費,並且把這些手續費給礦工的賬戶。

6. 否則,退還所有的剩餘gas的費用給發送者,消耗gas的費用發給礦工。

例如,假設合約代碼是:

if !self.storage[calldataload(0)]: 
 self.storage[calldataload(0)] = calldataload(32)

注意實際的合約代碼是用低級的虛擬機代碼寫的。這個例子是用Serpent寫的,這是我們的其中一個高級語言,可以被編譯虛擬機代碼。假設合約存儲開始的時候是空的,一個交易被髮送,這個交易具體數據是:10 eth,2000 gas,GASPRICE是0.001 eth,64字節數據,0~31字節表示數字2,32~63字節表示字符串 CHARLE(註解6)。對於這個場景,狀態轉移函數過程是:

1. 檢查交易是否有效並且格式良好

2. 檢查發送者是否有至少2000*0.01=2 eth。如果有,從發送者賬戶上減去2 eth

3. 初始化 gas = 2000,假設交易是170字節,並且每個字節費是5 gas,減去850,還剩1150 gas。

4. 再從發送者賬戶減去10 eth,加到合約賬戶上。

5. 運行代碼。這個例子,很簡單:它檢查合約在索引2的位置是否使用了,注意這裡是取反,如果沒使用的話,它將設置索引2的存儲為值CHARLE。假設這消耗了187 gas,所以剩餘的gas總數是 1150-187=963

6. 把963*0.001=0.963退還給發送者賬戶,返回這個結果狀態。

如果不是合約接收交易,交易費的總數就可以簡單等於GASPRICE乘以交易的字節長度,並且和隨交易發送的數據無關。

注意在恢復的時候消息和交易操作一樣:如果一個消息耗盡gas,那麼這個消息的執行,包括其它所有的被這個消息觸發的執行,都要恢復,但是父執行不需要恢復。這意味著一個合約調用另一個合約是安全的,如果A調用B提供G gas,那麼A的執行最多消耗G gas。最後注意有一個操作碼,CREATE,是創建合約的,它的執行機制和CALL一般是一樣的,不同的是,執行的結果是創建新合約的代碼。

代碼執行

以太坊的合約代碼是用一種低級的,基於堆棧的字節碼語言,也就是EVM碼。代碼包含一系列的字節碼,每個字節表示一個操作。一般的,代碼執行是一個無限循環,這包含不斷的執行在當前的程序計數(0開始)的操作,然後對程序計數加一,直到代碼的最後或出現錯誤或出現了STOP或RETURN指令。操作訪問三種類型的空間來存儲數據:

--- 棧,一個後進先出的容器,這裡值可以被推入和彈出

--- 內存,無限擴展的字節數組

--- 合約的長期存儲,一個鍵/值存儲。不像棧和內存,計算結束後會被重置,而這個存儲是永久存在。

合約代碼可以訪問一些值,比如發送者和發來消息的數據字段,還有區塊頭數據,並且可以返回一個字節數組的數據作為輸出。

EVM代碼正式的執行模型是令人吃驚的簡單。EVM運行的時候,它的全計算狀態可以定義成元組,(block_state,transaction,message,code,memory,stack,pc,gas),block_state是全局狀態包含所有賬戶包括餘額和存儲。每一輪執行開始的時候,當前的指令是通過pc找到,就是代碼裡的第pc個字節(第0個,如果pc大於等於代碼長度的話),每個指令怎麼作用在元組上有自己的定義。比如,ADD從棧中彈出兩個條目,推入它們的和,減少1 gas,並且pc加1,SSTORE從棧中彈出兩個條目,把第二個條目插入到合約存儲的某個索引位置,這個索引由第一個條目定義。儘管有很多方法通過即時編譯優化EVM的執行,但是以太坊的基本實現可以用幾百行代碼完成。

區塊鏈和挖礦

以太坊白皮書(中文譯)(2/3)

以太坊的區塊鏈很多工作方式都和比特幣的區塊鏈是一樣的,但是確實有一些區別。以太坊和比特幣在區塊鏈架構上主要的區別是,不像比特幣,以太坊的區塊包含交易列表和最近的狀態。除此之外,另外兩個值,區塊號和難度,也存在區塊內。以太坊基本的區塊驗證算法如下:

1. 檢查上一個區塊是否存在和有效

2. 檢查當前的區塊是否比引用的上一個區塊的時間戳大,並且小於未來15分鐘。

3. 檢查區塊號,難度,交易根,叔根和gas限制(各種低級的區塊鏈定義的概念)是否有效

4. 檢查區塊的工作量證明是否有效

5. 設S[0]是上一個區塊產生後的狀態

6. 設TX是區塊內交易列表,包含n個交易,對所有的i,i等於0…n-1,設S[i+1]=APPLY(S[i],TX[i])。如果任意一步返回錯誤,或者gas耗盡,返回錯誤

7. 設S_FINAL是S[n],但是增加了礦工的區塊獎勵

8. 檢查狀態S_FINAL的默克爾根是否和區塊頭中最後狀態的根相等。如果相等的話,則區塊有效,反之無效

這個方法第一眼看起來很低效,因為它需要保存每個區塊的整個狀態,但是和比特幣相比這實際上應該很高效了。原因是狀態存儲在樹結構中,在每個區塊後僅樹的一小部分需要改變。因此,一般情況下,對於兩個連接的區塊來說,樹的絕大部分是一樣的,所以數據可以只存一次,用指針引用兩次(比如,子哈希樹)。一個專門的樹稱為Patricia樹用於完成這項工作,它包含一個對默克爾樹概念的修改,它允許節點可以高效的插入和刪除,而不僅僅是改變。另外,因為所有的狀態信息是最後一個區塊的一部分,所以不需要存儲整個區塊鏈的歷史 – 這種策略如果能應用於比特幣,可以計算出將節省5到20倍的空間。

一個經常被問到的問題是合約是在哪裡執行的,就物理硬件而說。這有一個簡單的答案:合約代碼執行的過程是狀態轉移函數定義的一部分,也是區塊驗證算法的一部分,所以如果一個交易加到區塊B,該交易spawn代碼執行,而且將被每一個節點執行,不管是現在還是將來的節點都會下載和驗證區塊B。

應用

一般情況下,在以太坊上有三種應用。第一類是金融類應用,給用戶提供更有力的方式,用他們的貨幣管理和進入合約。這包括子貨幣,金融衍生品,對沖合約,錢包,遺囑,最後甚至是一些完全的僱傭合約。第二類是半金融應用,雖然有涉及錢的地方,但是也有大量非金錢方面的地方。一個完美的例子是為計算問題的解決方案提供自動獎勵。最後,還有像在線投票和去中心化管理等諸如此類的非金融應用。

通證系統

區塊鏈上的通證系統有很多應用,從代表財產如美元或黃金的子貨幣到公司股票,個人通證代表智能財產,安全優惠券,甚至是和傳統價值一點聯繫都沒有的通證系統,用作一個積分獎勵系統。通證系統在以太坊上實現是令人吃驚的簡單。關鍵是要理解貨幣或通證系統基本上是隻包含一個操作的數據庫:從A減去X,把X給B,條件是(1)交易前A至少有X和(2)A同意交易。實現通證系統需要的全部就是把這個邏輯用合約實現。

實現通證系統基本代碼,用Serpent語言實現如下:

def send(to, value):
 if self.storage[msg.sender] >= value:
 self.storage[msg.sender] = self.storage[msg.sender] - value
 self.storage[to] = self.storage[to] + value

這實際上是銀行系統狀態轉換函數的示意實現。需要添加幾行代碼,實現開始時候的貨幣分發,和其它的邊界情況,理想情況下還應該添加一個函數可以讓其它合約查詢某個地址的餘額。但這就是它的全部。理論上,基於以太坊的子幣通證系統可以包含另外一個重要的特性,這是基於比特幣的鏈上元幣缺少的:能直接用這個幣支付交易手續費。將會用這種方式實現,合約上有一些以太幣餘額,它可以退還給發送者使用的費用,它也可以通過拍賣內部貨幣重新補充餘額。因此用戶將需要用一定量的以太幣激活他們的賬戶,但是一旦以太幣到位,就可以重複利用了,因為合約每次都會退款。

金融衍生品和穩定價值貨幣

金融衍生品是最常見的智能合約應用,也是最簡單的代碼實現。實現金融合約最大的挑戰是他們的大部分需要參考外部的價格表;比如,一個非常流行的智能合約應用程序對沖以太幣(或其它加密貨幣)的波動,相對於美元來說,但是想要做到的話,需要合約知道ETH/USD的值。最簡單的辦法是通過一個喂價合約,由一個專門的機構(比如NASDAQ)維護,這樣設計可以讓該機構根據需要更新合約,並且提供一個接口,允許其它合約發送消息給該合約,該合約會返回價格。

上面給了關鍵因素,那麼對沖合約如下:

1. A轉入1000 eth

2. B轉入1000 eth

3. 記錄1000 eth的美元值,通過查詢喂價合約計算得到,在存儲中,記做x美元

4. 30天后,為了發送價值x美元的以太幣(再次查詢喂價合約得到最新的價格)給A,剩下的發給B,允許A或B重新激活合約。

這樣的合約在加密商業中有很大的潛力。加密貨幣其中一個主要的問題是波動;但是很多用戶和商戶在處理數字資產是希望安全和便利的,他們不希望面對一天就損失23%價值的局面。直到現在,最常用的解決方案還是發行人控制的財產;這個方案是這樣的,發行人創建一個子貨幣,他們有權發行和撤銷,這個貨幣和線下的相關資產(比如黃金和美元)是一對一的,也就是如果有人提供一個單位的線下相關資產,發行人就發給他一個單位的加密貨幣,發行者承諾如果一個人發送一個單位的加密資產,發行人就會提供一個單位的線下資產。這個機制使得非加密資產被推上加密資產的平臺,只要發行人是可信的。

然而在實踐中,發行人並不總是可信的,在某些情況下,銀行基礎設施太弱,或過於敵對,以至於這樣的服務無法提供。金融衍生品提供了替代方案。這裡,一個投機商的去中心化市場而非個人提供資金為一個資產背書,這個投機商賭參考的加密資產(比如以太幣)價格會上漲。與發行人不同,投機商沒有選擇違約的權利,因為對沖合約託管了他們的資金。注意這個方法不是完全的去中心化,因為仍然需要一個可信任的源提供價格表,可以說它仍然在減少基礎設施需求方面有了巨大改進。

身份和信用系統

最早的替代加密貨幣,名字幣,試圖用像比特幣這樣的區塊鏈提供一個名字註冊系統,這個系統讓用戶可以在一個公共數據庫裡註冊他們的名字,跟其它數據一起。主要的場景是DNS系統,映射域名(像bitcoin.org,以名字幣為例,bitcoin.bit)到一個IP地址。其它場景包含郵件認證,潛在的更高級的信用系統。這裡有一個基本的合約,在以太坊上提供像名字幣一樣的名字註冊系統:

def register(name, value):
 if !self.storage[name]:
 self.storage[name] = value 

這個合約非常簡單;這是一個以太坊網絡裡的一個數據庫,可以添加,不能刪除或修改。任何人都可以註冊一個有價值的名字,一經註冊永遠存在。一個更復雜的名字註冊合約還有一個功能條款,允許其他合約來查詢它,還有一個機制使名字的所有者(比如,第一個註冊者)可以修改數據和轉移所有權。甚至可以在上面添加信用和信任網功能。

分佈式文件存儲

在過去的幾年裡,出現了一些流行的在線存儲的初創公司,最突出的是Dropbox,試圖允許用戶上傳他們的硬盤備份,並有服務存儲這個備份,允許用戶訪問它,不過每月要繳納一定的費用。然而,在這點上,文件存儲市場有時比較低效;粗略的看一下現有各種解決方案,特別是在20~200GB的恐怖谷水平上,既沒有免費的,也沒有企業級的折扣,主流存儲每月支付的費用超過了整個硬盤的費用。以太坊合約允許開發一個去中心化文件存儲生態系統,這裡個人可以通過出租他們的硬盤獲得一點收入,未用的空間可以用來進一步降低文件存儲的成本。

這種設備的關鍵支撐組件我們稱之為Dropbox合約。這個合約工作過程如下。第一,將所需數據分割成塊,對每塊加密來保護隱私,並且從中建立一個默克爾樹。然後製作一個合約規則是,每N個區塊,合約將從默克爾樹中取一個隨機的索引(使用上一個區塊哈希,合約代碼可以訪問到,作為隨機源),拿X以太幣給第一個實體,提供一個交易,交易裡有一個簡化支付驗證-像區塊的所有權的證據,這個區塊在一個樹的一個特性索引上。當用戶想重新下載他們的文件,他們可以用微支付通道協議(比如支付1 szbao每個32kB)來恢復他們的文件;對付款者最省錢的辦法是等到最後才公佈交易,每32kB後,將交易替換成一個稍微豐厚點的,使用同樣的nonce。

這個協議的一個重要的特性是,儘管看起來是相信很多隨機的節點,而不是決定忘記文件,通過秘密分享將文件切割成很多小塊,可以將風險降低到0,並且通過觀察合約可以看到每一小塊仍然被某個節點存儲。如果一個合約仍在支付錢,那就為有人仍在存儲文件提供了一個加密的證據。

去中心化自治組織

去中心化自治組織的一般概念是:它是一個虛擬的實體,有一些成員或股東,可能是佔67%,有權利花費這個實體的資金和修改它的代碼。這些成員將共同決定組織應該如何分配資金。分配DAO的資金的方法從獎勵,工資到更奇特的機制,比如用內部貨幣支付工作報酬。這本質上覆制了一個傳統公司或非營利性組織的合法外殼,但是用加密的區塊鏈技術來實施。目前為止,大部分圍繞DAOs的話題都圍繞著一個去中心化公司(DAC)的資本模型,這個DAC都有股利分配股東和流通股;另一種選擇,可能被描述為去中心化自治社區,所有成員都有平等的決定權,添加或開除成員需要67%的現有成員同意才行。一個人只能有一個會員資格這樣的需求由集體強制執行。

對於如何編寫DAO代碼的大綱如下。最簡單的設計僅僅是一段可以自己修改的代碼,只有三分之二的人都同意才能修改。雖然代碼在理論上是不可變的,人們很容易繞過這一點,將事實上的易變性的代碼單獨放進一個合約,這個合約地址放在可以修改的存儲。這樣的DAO合約的一個簡單的實現裡,將會有三種交易類型,由交易中提供的數據來區分:

---[0,i,K,V]用索引i註冊一個提議,存儲中索引K中的地址改成V

---[0,i]給索引i的提議投票

---[0,i]結束索引i的提議,如果投票足夠的話

合約將會有這些條款。對於所有開放存儲的修改將維護一個記錄,連同投票的名單。還有所有成員的列表。當任何存儲的修改得到了超過三分之二的投票後,一個最終的交易將執行這個變化。一個更復雜的框架將為一些特性(如發送一個交易,添加成員和刪除成員)內置投票能力,甚至可以提供液態民主式的投票代表團(比如,每個人可以將投票權轉讓,轉讓是傳遞的,所以如果A轉讓給B,B轉讓給C,那麼C決定A的投票)。這個設計將允許DAO作為一個去中心化社區有機生長,允許人們最終把篩選成員的任務授權給專家,儘管不同於當前的系統,隨著個體社區成員的改變路線,專家們很容易的隨著時間的推移而出現和消失。

一個去中心化公司的替代模型,任何賬戶可以有0或更多的股票,並且需要三分之二的股票做決策。一個完整的框架將包含資產管理功能,要約收購和出售股份的能力,接受要約的能力(合約中最好有訂單匹配機制)。代表團還將存在液態民主風格,它概括了董事會概念。

更多的應用

1. 儲蓄錢包 假設愛麗絲想保持她資金的安全,但是她擔心私鑰會丟失或被人盜走。她把以太幣放在了一個和鮑勃一起的合約裡,一個銀行,如下:

---愛麗絲自己每天最多取出1%的資金

---鮑勃自己每天最多取出1%的資金,但是愛麗絲有權用她的密鑰發起一個交易關掉這個能力。

---愛麗絲和鮑勃一起可以取走一切

正常情況下,一天1%對愛麗絲足夠,並且如果愛麗絲如果想取出更多的話,她可以像鮑勃求助。如果愛麗絲的密鑰被盜,她跑到鮑勃那裡把資金轉移到一個新的合約。如果她丟掉了密鑰,鮑勃最終會把錢取出來的。如果鮑勃被證明是惡意用戶,那麼愛麗絲關掉他取錢的能力。

2. 農作物保險 一個人很容易製作一個金融衍生品合約,喂天氣數據而不是喂價。如果一個愛荷華的農民購買一個金融衍生品,這個衍生品根據降水量反向支付,那麼如果幹旱,農民自動收到錢,如果雨水足夠,農民非常開心因為農產品產量良好。這可以擴展到一般的自然災害保險。

3. 去中心化的數據饋送 金融差價合約,通過一個叫謝林幣的協議實現去中心化的數據饋送是很有可能的。謝林幣基本工作過程如下:N個機構都將給定的基準值(比如,ETH/USD價格)輸入到系統,基準值進行排序,並且第25到第75百分位的每個人都會得到一個代幣獎勵。每個人都有動力提供其他人將會提供的答案,大多數參與者能夠正真同意的唯一值是很明顯的默認值:真相。這創建了一個去中心化的協議,可以從理論上提供任何值,包含ETH/USD價格,柏林的溫度,甚至是特別難的計算的結果。

4. 智能多籤的託管 比特幣允許多籤交易合約,例如五個中的三個密鑰可以花費資金。以太坊允許有更多的粒度;比如,五個中的四個可以花費任何東西,五個中的三個最多能一天花費10%,五個中的兩個最多一天花費0.5%。另外,以太坊多籤是異步的-兩個機構可以在不同的時間在區塊鏈上記錄他們的簽名,並且最後的簽名自動發送交易。

5. 雲計算 EVM技術也可以用於創建一個可驗證的計算環境,允許用戶可以要求其他人進行計算,然後可以要求在某些隨機選擇檢查點上進行正確計算的證據。這允許創建一個雲計算市場,任何人都可以用他們的臺式機,筆記本或專門的服務器加入,可以使用現場檢查和安全存款來確保系統可靠(也就是節點不能靠欺騙盈利)。儘管這樣的系統可能不適用於所有任務;比如,任務需要高級別的進程間通信,不能在一個單獨大的雲節點上輕鬆的完成。不過,其他任務更容易並行化;一些項目,像SETI@home,Folding@home和基因算法可以在這個平臺上輕易實現。

6. 點對點賭博 任意一個點對點的賭博協議,如CyberDice,可以在以太坊上實現。最簡單的賭博協議實際上是一個簡單的下一個區塊哈希差額的合約,也可以建立更先進的協議,創造幾乎沒有手續費的賭博服務,沒有能力欺騙。

7. 市場預測 提供了預言機或謝林幣,預測市場也容易實現,並且預測市場和謝林幣被證明是futarchy的第一個主流應用,作為一個去中心化組織的管理協議。


分享到:


相關文章: