簡述:領取完整版《以太坊白皮書.pdf》方法,請掃描下面二維碼關注微信公眾號:騰佑科技IDC,回復“以太坊”索要白皮書!騰佑科技IDC提供香港服務器、美國服務器等全球海外服務器租用托管,是區(qū)域鏈、直銷、流媒體、外貿、游戲等
以太坊白皮書的完整版本.pdf》請掃描以下二維碼,關注微信微信官方賬號:騰佑科技IDC,回復“以太坊”要白皮書!
騰佑科技IDC提供全球海外服務器租賃托管,如香港服務器和美國服務器。是區(qū)域鏈、直銷、流媒體、外貿、游戲等服務器解決方案的首選品牌。騰友科技為多家企業(yè)提供區(qū)塊鏈服務器租賃托管解決方案,支持其區(qū)塊鏈托管服務器!詳情請訪問在線客服?。‥thereum):下一代智能合同和分散應用平臺翻譯,少平
中文讀者可以到以太坊愛好者社區(qū)獲取最新的以太坊信息。
當本聰于2009年1月啟動比特幣區(qū)塊鏈時,他還向世界介紹了兩個未經測試的革命性新概念。第一種是比特幣(bitcoin),在沒有任何資產擔保、內在價值或中心發(fā)行人的情況下,分散的點對點在線貨幣保持了價值。到目前為止,比特幣已經引起了公眾的廣泛關注。在政治上,它是一種沒有央行的貨幣,價格波動劇烈。然而,中本聰的偉大實驗和比特幣一樣重要:基于工作量的區(qū)塊鏈概念使人們能夠就交易順序達成共識。比特幣作為應用可以描述為先申請(first-to-file)系統(tǒng)有人有50個系統(tǒng):BTC同時向A和B發(fā)送這50BTC,只有先確認的交易才會生效。沒有固有的方法來決定哪一筆交易是先到的,這阻礙了分散數字貨幣多年的發(fā)展。中本聰的區(qū)塊鏈是第一個可靠的分散解決方案。如今,開發(fā)者的注意力開始迅速轉向比特幣技術的第二部分,區(qū)塊鏈如何應用于貨幣以外的領域。
經常提到的應用程序包括使用鏈上的數字資產來代表定制貨幣和金融工具(彩色貨幣)、某些基本物理設備的所有權(智能資產)、域名等不可替代資產(域名貨幣)、分散交易所、金融衍生品、點對點賭博和鏈身份和信譽系統(tǒng)。另一個經常被詢問的重要領域是“智能合約”-自動轉移數字資產的系統(tǒng),按照事先制定的規(guī)則。例如,一個人可能有一份以存儲合同為形式的存儲合同“A每天最多可以提取X個幣,B每天最多Y個,A和B一起可以隨意提取,AB的提現權可以停止”。合同的邏輯擴展是分散的自治組織(DAOs)-智能合約長期包含組織資產,并編碼組織規(guī)則。以太坊的目標是提供內置成熟的圖靈完整語言區(qū)塊鏈,可以創(chuàng)建合同編碼任何狀態(tài)轉換功能,用戶只要幾行代碼實現邏輯,就可以創(chuàng)建上述所有系統(tǒng)和許多其他系統(tǒng)我們無法想象。
目錄歷史作為狀態(tài)轉換系統(tǒng)比特幣挖掘默克爾樹替代區(qū)塊鏈應用腳本以太坊以太坊賬戶信息和交易以太坊狀態(tài)轉換功能代碼執(zhí)行區(qū)塊鏈和挖掘應用令牌系統(tǒng)金融衍生品身份和信譽系統(tǒng)分散文件存儲分散自治組織進一步應用雜項和關注改進版幽靈協議實施成本計算和圖靈完整貨幣和發(fā)行挖掘集中擴展綜述:分散應用結論注釋和高級閱讀歷史分散的數字貨幣概念早在幾十年前就被提出,就像財產登記等替代應用一樣。1980年代和1990年代的匿名電子現金協議大多采用喬姆盲簽技術(Chaumianblinding)為基礎的。這些電子現金協議提供高度隱私的貨幣,但這些協議并不流行,因為它們都依賴于集中的中介機構。1998年,戴偉(WeiDai)的b-money它首次引入了通過解決計算問題和分散共識來創(chuàng)造貨幣的想法,但該建議并沒有給出如何實現分散共識的具體方法。2005年,芬尼(HalFinney)引入了“可重復使用的工作量證明機制”(reusableproofsofwork)同時使用概念b-money的思想和AdamBack哈希現金計算困難(Hashcash)創(chuàng)建密碼學貨幣的難題。然而,由于依靠可靠的計算作為后端,這一概念再次失去了理想化。
由于貨幣是第一個應用程序,交易順序非常重要,因此分散貨幣需要找到實現分散共識的方法。比特幣之前所有電子貨幣協議的主要障礙是,盡管拜占庭如何創(chuàng)造安全容錯(Byzantine-fault-tolerant)多方共識系統(tǒng)的研究已經持續(xù)了很多年,但上述協議只解決了問題的一半。假設系統(tǒng)的所有參與者都已知并產生這些協議“如果N方參與系統(tǒng),系統(tǒng)可以容忍N惡意參與者/4”這種形式的安全邊界。然而,這個假設的問題是,在匿名的情況下,系統(tǒng)設置的安全邊界很容易被女巫攻擊,因為攻擊者可以在服務器或僵尸網絡上創(chuàng)建成千上萬的節(jié)點,以確保單方面的大部分份額。
中本聰的創(chuàng)新引入了這樣一個概念:將基于節(jié)點的非常簡單的分散共識協議與工作量認證機制相結合。節(jié)點有權通過工作量證明機制參與系統(tǒng),每十分鐘包裝交易“區(qū)塊”從而創(chuàng)造出不斷增長的區(qū)塊鏈。計算能力大的節(jié)點影響更大,但比創(chuàng)建100萬個節(jié)點更難獲得比整個網絡更多的計算能力。雖然比特幣區(qū)塊鏈模型非常簡單,但實踐證明它足夠容易使用。在未來五年內,它將成為世界上200多種貨幣和協議的基石。
作為狀態(tài)轉換系統(tǒng)的比特幣從技術角度來看,比特幣賬本可以被視為狀態(tài)轉換系統(tǒng),包括所有現有的比特幣所有權狀態(tài)和“狀態(tài)轉換函數”。狀態(tài)轉換函數輸入當前狀態(tài)和交易,輸出新狀態(tài)。例如,在標準銀行系統(tǒng)中,狀態(tài)是資產負債表,從A賬戶向B賬戶轉賬X美元的請求是交易。狀態(tài)轉換函數將從A賬戶中減去X美元,并將X美元增加到B賬戶中。如果A賬戶余額小于X美元,狀態(tài)轉換函數將返回錯誤提示。因此,我們可以定義以下狀態(tài)轉換函數:
APPLY(S,TX)>S’orERROR
在上述銀行系統(tǒng)中,狀態(tài)轉換函數如下:
APPLY({Alice:$50,Bob:$50},"send$20fromAlicetoBob")={Alice:$30,Bob:$70}
但是:
APPLY({Alice:$50,Bob:$50},"send$70fromAlicetoBob")=ERROR
比特幣系統(tǒng)“狀態(tài)”所有挖掘出來的比特幣都沒有花費(技術上稱為“未花費的交易輸出,unspenttransactionoutputs或UTXO”)的集合。每個UTXO有一個面值和所有者(密碼學公鑰地址定義為[1],本質上是20個字節(jié)。一筆交易包括一個或多個輸入和一個或多個輸出。每個輸入包含一個對現有的UTXO由與所有者地址對應的私鑰創(chuàng)建的的密碼學簽名。每個輸出包含一個新的加入狀態(tài)UTXO。
狀態(tài)轉換函數在比特幣系統(tǒng)中APPLY(S,TX)->S’
一般可定義如下:
S
),返回錯誤提示如果簽名和UTXO如果所有者的簽名不一致,則返回錯誤提示UTXO輸入面值總額小于所有的UTXO輸出面值總額,返回錯誤提示返回新狀態(tài)S’
,新狀態(tài)S
移除所有輸入UTXO,增加所有輸出UTXO。第一步是防止發(fā)送者花費不存在的比特幣,第二步是防止發(fā)送者花費他人的比特幣。第二步是確保價值守恒。比特幣的支付協議如下。假設Alice想給Bob發(fā)送11.7BTC。事實上,Alice不可能只有11.7BTC。假設她能得到的最小比特幣數量是:6 4 2=12。因此,她可以創(chuàng)建一筆有三個輸入和兩個輸出的交易。第一個輸出面值為11.7BTC,所有者是Bob(Bob比特幣地址),第二個輸出面值為0.3BTC,所有者是Alice也就是找零。
挖礦一個塊,每個塊包含一個時間戳,一個隨機數量,一個引用上一個塊(即哈希)和上一個塊生成以來發(fā)生的所有交易列表。這樣,隨著時間的推移,創(chuàng)建了一個不斷增長的區(qū)塊鏈,它不斷更新,從而代表了比特幣賬本的最新狀態(tài)。
根據此范式,檢查塊是否有效的算法如下:
檢查塊引用的最后一個塊是否存在和有效。檢查塊的時間戳是否晚于以前的塊,并早于未來2小時[2]。檢查塊的工作量是否有效。將最后一個塊的最終狀態(tài)分配到S[0]
。假設TX是區(qū)塊交易列表,包括n筆交易。……n-1的所有i,狀態(tài)轉換S[i 1]=APPLY(S[i],TX[i])
。如果任何交易I在狀態(tài)轉換中出錯,退出程序并返回錯誤。返回正確,狀態(tài)S[n]
是這一區(qū)塊的最終狀態(tài)。區(qū)塊中的每一筆交易本質上都必須提供正確的狀態(tài)轉換,需要注意的是,“狀態(tài)”不是編碼到區(qū)塊的。它只是一個被驗證節(jié)點記住的抽象概念。對于任何塊都可以從創(chuàng)建狀態(tài)開始,每個塊的每一筆交易都可以按順序添加,并計算當前狀態(tài)。此外,礦工還應注意將交易納入區(qū)塊的順序。若有一個塊A、B兩筆交易,BA創(chuàng)是A創(chuàng)造的UTXO,如果A在B在過去,該塊是有效的,否則,該塊是無效的。
區(qū)塊驗證算法的有趣部分是“工作量證明”概念:每個塊SHA256哈希處理將獲得的哈希視為長度為256比特的值,必須小于不斷動態(tài)調整的目標值。本書的目標值約為2^190。工作量證明的目的是使區(qū)塊難以創(chuàng)建,防止女巫攻擊者惡意重生區(qū)塊鏈。因為SHA256是一個完全不可預測的偽隨機函數。創(chuàng)建有效區(qū)塊的唯一方法是不斷嘗試和錯誤,不斷增加隨機值,看看新的哈希值是否小于目標值。若當前目標值為2^192意味著平均需要嘗試2^生成有效塊需要64次。一般來說,比特幣網絡每2016塊重新設定目標值,確保平均每10分鐘生成一個塊。為了獎勵礦工的計算工作,每個成功生成區(qū)塊的礦工都有權在區(qū)塊中憑空發(fā)送25個BTC的交易。此外,如果交易的輸入大于輸出,則將差額視為“交易費用”付給礦工。順便說一句,對礦工的獎勵是比特幣發(fā)行的唯一機制,在創(chuàng)造狀態(tài)下沒有比特幣。
為了更好地理解挖掘的目的,讓我們分析惡意攻擊者在比特幣網絡中會發(fā)生什么。由于比特幣的密碼學基礎非常安全,攻擊者會選擇攻擊不受密碼學直接保護的部分:交易順序。攻擊者的策略非常簡單:
向賣家發(fā)送100BTC購買商品(尤其是不需要郵寄的電子商品)。等到商品發(fā)出。創(chuàng)建另一筆交易,將相同的100BTC發(fā)送給你自己的賬戶。讓比特幣網絡相信發(fā)送給自己賬戶的交易是第一個發(fā)送的。一旦步驟(1)發(fā)生,礦工將在幾分鐘后將交易打包到區(qū)塊,假設是第2.7萬個區(qū)塊。大約一個小時后,該區(qū)塊后面將有五個區(qū)塊,每個區(qū)塊間接指向該交易,以確認該交易。這時賣家收到貨款,并向買家發(fā)貨。因為我們假設這是數字商品,攻擊者可以立即收到貨物?,F在,攻擊者將創(chuàng)建相同的100筆交易BTC發(fā)送到自己的賬戶。如果攻擊者只向全網廣播這一消息,這筆交易將不予處理。礦工會運行狀態(tài)轉換函數APPLY(S,TX)
,發(fā)現這筆交易將不再處于狀態(tài)UTXO。因此,攻擊者會分叉區(qū)塊鏈,將第26999個區(qū)塊作為父區(qū)塊重生第2.7萬個區(qū)塊,用新的交易代替舊的交易。由于區(qū)塊數據不同,需要重新證明工作量。此外,由于攻擊者生成的新的2.7萬塊有不同的哈希,原來的2.7萬1到2.7萬5塊沒有指向它,所以原來的區(qū)塊鏈與攻擊者的新塊完全分離。當區(qū)塊鏈分叉發(fā)生時,區(qū)塊鏈的長分支被認為是一個誠實的區(qū)塊鏈。合法的礦工將沿著原來的270005塊挖掘,只有攻擊者在新的2.7萬塊后挖掘。為了使他的區(qū)塊鏈最長,攻擊者需要比他以外的整個網絡有更多的計算能力來追趕(即51%攻擊)。
左:只提供默克爾樹(Merkletree)上面的少量節(jié)點足以證明分支。
右:任何改變默克爾樹任何部分的嘗試最終都會導致鏈上某個地方的不一致。
比特幣系統(tǒng)的一個重要可擴展特性是它的塊存儲在多層次的數據結構中。一個塊的哈希實際上只是塊頭的哈希。塊頭是默克爾樹的根哈希的長度約為200字節(jié),包括時間戳、隨機數、最后一個塊哈希和存儲所有塊交易的默克爾樹。
由一組葉節(jié)點、一組中間節(jié)點和一個根節(jié)點組成的默克爾樹是一種二叉樹。下面大量的葉節(jié)點包含基本數據,每個中間節(jié)點都是它的兩個子節(jié)點哈希,它的兩個子節(jié)點哈希也代表了默克爾樹的頂部。默克爾樹的目的是允許塊的數據分散傳輸:節(jié)點可以從一個源下載塊,從另一個源下載與樹相關的其他部分,并確認所有數據都是正確的。這是因為哈希向上擴散:如果惡意用戶試圖在樹下添加偽造交易,變化會導致樹的上節(jié)點和上節(jié)點,最終導致根節(jié)點和區(qū)塊哈希變化,協議將記錄為完全不同的區(qū)塊(幾乎可以證明工作量不正確)。
默克爾樹協議對比特幣的長期可持續(xù)性至關重要。2014年4月,比特幣網絡中的一個全節(jié)點——存儲和處理所有塊的所有數據——需要占用15個GB內存空間,每月超過1GB速度增長。目前,這一存儲空間對臺式計算機來說尚可接受,但是手機已經負載不了如此巨大的數據了。未來,只有商業(yè)機構和愛好者才會充當完整的節(jié)點。簡化支付確認(SPV)該協議允許另一個節(jié)點存在,該節(jié)點已成為“輕節(jié)點”,它下載區(qū)塊頭,使用區(qū)塊頭確認工作量證明,然后只下載與其交易相關的默克爾樹“分支”。這使得輕節(jié)點能夠安全地確定任何比特幣交易的狀態(tài)和賬戶的當前余額,只需下載整個區(qū)塊鏈的一小部分。
其它區(qū)塊鏈應用將區(qū)塊鏈思想應用到其他領域的想法早已出現。尼克薩博于2005年提出“以所有權命名財產”本文描述了復制數據庫技術的發(fā)展,使基于區(qū)塊鏈的系統(tǒng)能夠應用于注冊土地所有權,并創(chuàng)建了詳細的框架,包括房地產權、非法占用和喬治亞州的土地稅。然而,不幸的是,當時沒有實用的復制數據庫系統(tǒng),因此該協議沒有付諸實踐。然而,自2009年比特幣系統(tǒng)分散共識成功開發(fā)以來,許多區(qū)塊鏈的其他應用開始迅速出現。
域名幣(namecoin)-名稱注冊數據庫成立于2010年,被稱為冊數據庫。Tor、Bitcoin和BitMessage這種分散的協議需要一些方法來確認賬戶,這樣其他人就可以與用戶互動。然而,所有現有解決方案中唯一可用的身份標志就像1LW79wp5ZBqaHW1jL5TciBCrhQYtHagUWy
這種偽隨機哈希。在理想情況下,人們希望有一個象“george”這樣名字的賬戶。然而,如果有人能創(chuàng)造,問題是“george”其他人也可以創(chuàng)建賬戶“george”假裝賬戶。唯一的解決辦法是先申請原則(first-to-file),只有第一個注冊人才能成功注冊,第二個不能再注冊同一個賬戶。比特幣的共識協議可以用于這個問題。域名幣是利用區(qū)塊鏈實現名稱注冊系統(tǒng)最早、最成功的系統(tǒng)。彩色幣(Coloredcoins)-彩色貨幣的目的是在比特幣區(qū)塊鏈上為人們創(chuàng)建自己的數字貨幣,或者更重要的一般貨幣–數字令牌提供服務。依照彩色幣協議,人們可以通過為某一特別的比特幣UTXO指定顏色,發(fā)行新貨幣。將其他協議遞歸協議UTXO定義為與交易輸入UTXO顏色相同。這允許用戶保持只包含顏色UTXO,發(fā)送這些UTXO就像發(fā)送普通比特幣一樣,通過追溯所有區(qū)塊鏈來判斷收到的UTXO顏色。元幣(Metacoins)-元幣的概念是在比特幣區(qū)塊鏈上創(chuàng)建新的協議,利用比特幣交易保存元幣交易,但使用不同的狀態(tài)轉換函數APPLY’。由于元幣協議不能阻止比特幣區(qū)塊鏈上無效的元幣交易,如果增加一個規(guī)則APPLY’(S,TX)該協議將默認返回錯誤APPLY’(S,TX)=S。這為比特幣系統(tǒng)中無法實現的任何先進的密碼貨幣協議提供了簡單的解決方案,開發(fā)成本非常低,因為比特幣協議已經處理了挖掘和網絡問題。因此,一般來說,建立共識協議有兩種方式:建立獨立網絡和在比特幣網絡上建立協議。雖然域名幣等應用程序的第一種方法已經成功,但由于每個應用程序都需要創(chuàng)建獨立的區(qū)塊鏈、建立和測試所有狀態(tài)轉換和網絡代碼,因此很難實施。此外,我們預測分散共識技術的應用將遵循冪律分布。大多數應用程序太小,無法確保自由區(qū)塊鏈的安全。我們還注意到,大量的分散應用程序,特別是分散自治組織,需要應用程序之間的互動。
另一方面,基于比特幣的方法存在缺點,可以簡化并確認支付(SPV)的特性。比特幣可以實現簡化確認支付,因為比特幣可以將區(qū)塊鏈深度作為有效性確認代理。在某種程度上,一旦一筆交易的祖先離現在足夠遠,他們就可以被視為合法狀態(tài)的一部分。相反,基于比特幣區(qū)塊鏈的元幣協議不能強迫區(qū)塊鏈不包括不符合元幣協議的交易。因此,為了確認某筆交易是否有效,需要掃描所有塊,直到區(qū)塊鏈的初始點。目前,所有基于比特幣的元幣協議“輕”實施依靠可靠的服務器提供數據,這只是消除信任所需的密碼貨幣的一個相當優(yōu)秀的結果。
腳本即使不擴大比特幣協議,也能在一定程度上實現”智能合約”。比特幣的UTXO它不僅可以被公鑰擁有,還可以被基于堆棧的編程語言編寫的更復雜的腳本所擁有。在這種模式下,花這樣的錢UTXO,必須提供滿足腳本的數據。事實上,基本的公鑰所有權機制也是通過腳本實現的:腳本將橢圓曲線簽名作為輸入來驗證交易和擁有UTXO如果驗證成功,返回1,否則返回0。更復雜的腳本用于其他不同的應用。例如,人們可以創(chuàng)建一個腳本(多重簽名),需要收集三個私鑰中的兩個進行交易確認,這對公司賬戶、儲蓄賬戶和一些商業(yè)代理非常有用。腳本也可以用來獎勵解決計算問題的用戶。人們甚至可以創(chuàng)建這樣的腳本“如果你能提供你已經向我發(fā)送了一定數量的狗幣的簡化支付證明,這個比特幣UTXO就是你的了”,本質上,比特幣系統(tǒng)允許不同的密碼貨幣進行分散兌換。
然而,比特幣系統(tǒng)的腳本語言有一些嚴重的限制:
缺乏圖靈的完整性–也就是說,雖然比特幣腳本語言可以支持多種計算,但它不能支持所有的計算。主要缺失是循環(huán)語句。不支持循環(huán)語句的目的是避免交易確認時的無限循環(huán)。理論上,這是腳本程序員可以克服的障礙,因為任何循環(huán)都可以重復多次if模擬句子的方式,但這將導致腳本空間利用效率低下。例如,實施替代橢圓曲線簽名算法可能需要256次重復乘法,每次都需要單獨編碼。價值盲(Value-blindness)。UTXO腳本不能精細控制賬戶的取款金額。例如,預言機合約(oraclecontract)對沖合同的強大應用,A30天后,腳本將價值1000美元的比特幣發(fā)送給A,剩余的比特幣發(fā)送給B。雖然實現對沖合同需要預測機(oracle)這種機制在減少信任和基礎設施方面取得了巨大進展,決定了一個比特幣值多少美元,但與目前完全集中的解決方案相比。然而,因為UTXO是不可分割的,為實現此合約,唯一的方法是非常低效地采用許多有不同面值的UTXO(例如,每個對應最大30k,有一個2^k的UTXO)并使預測器挑出正確的選擇UTXO發(fā)送給A和B。缺少狀態(tài)–UTXO它只能是一種消費或未消費的狀態(tài),這并沒有為需要任何其他內部狀態(tài)的多階段合同或腳本留出生存空間。這使得實現多階段期權合約、去中心化的交換要約或者兩階段加密承諾協議(對確保計算獎勵非常必要)非常困難。這也意味著UTXO只能用來建立簡單、一次性的合同,而不是具有更復雜狀態(tài)的合同,如分散組織,使元協議難以實現。二元狀態(tài)與價值盲結合,意味著另一個重要的應用——取款限額——不可能實現。區(qū)塊鏈盲(Blockchain-blindness)-UTXO沒有區(qū)塊鏈的數據,比如隨機數和上一個區(qū)塊的哈希。這一缺陷剝奪了基于隨機性的腳本語言的潛在價值,嚴重限制了賭博等其他領域的應用。我們考察了建立密碼貨幣高級應用的三種方法:建立新的區(qū)塊鏈,在比特幣區(qū)塊鏈上使用腳本,在比特幣區(qū)塊鏈上建立元貨幣協議。建立新區(qū)塊鏈的方法可以自由實現任何特征,成本是開發(fā)時間和培養(yǎng)努力。使用腳本的方法很容易實現和標準化,但其能力有限。雖然元幣協議很容易實現,但存在擴展性差的缺陷。在以太坊系統(tǒng)中,我們的目的是建立一個具有這三種模式所有優(yōu)勢的通用框架。
以太坊以太坊的目的是基于腳本、競爭幣和鏈上元協議(on-chainmeta-protocol)整合和完善概念,使開發(fā)者能夠創(chuàng)建任何基于共識、可擴展、標準化、完整、易于開發(fā)和協調的應用。以太坊通過建立最終抽象的基礎層——內置圖靈完整編程語言的區(qū)塊鏈,使任何人都能創(chuàng)建合同和分散應用程序,并建立自由定義的所有權規(guī)則、交易模式和狀態(tài)轉換函數。域名幣的主框架只需要兩行代碼,其他協議,如貨幣和信譽系統(tǒng),只需要不到20行代碼。智能合同——包含價值,只能滿足某些條件才能打開的加密箱——也可以在我們的平臺上創(chuàng)建,由于圖靈的完整性和價值知識(value-awareness)、區(qū)塊鏈知曉(blockchain-awareness)和多狀態(tài)所增加的力量而比比特幣腳本所能提供的智能合約強大得多。
以太坊賬戶在以太坊系統(tǒng)中,狀態(tài)被稱為“賬戶”(每個賬戶由一個20字節(jié)的地址)的對象和兩個賬戶之間的轉移價值和信息的狀態(tài)轉換組成。以太坊賬戶包括四個部分:
隨機數用于確定以太幣余額賬戶的當前合同代碼,每筆交易只能處理一次。如果有,存儲賬戶(默認為空)以太幣(Ether)以太坊內的主要加密燃料用于支付交易費用。一般而言,以太坊有兩種類型的賬戶:外部所有的賬戶(由私鑰控制的)和合約賬戶(由合約代碼控制)。所有外部賬戶都沒有代碼,人們可以通過創(chuàng)建和簽署交易從外部賬戶發(fā)送信息。每當合同賬戶收到消息時,合同內的代碼就會被激活,允許它讀取和寫入內部存儲,并發(fā)送其他消息或創(chuàng)建合同。
消息和交易以太坊的消息在某種程度上類似于比特幣的交易,但是兩者之間存在三點重要的不同。第一,以太坊的消息可以由外部實體或者合約創(chuàng)建,然而比特幣交易只能從外部創(chuàng)建。第二,以太坊新聞可以包含數據。第三,如果以太坊新聞的接受者是合同賬戶,可以選擇回應,這意味著以太坊新聞也包含函數概念。
以太坊中“交易”是指從外部賬戶存儲信息的簽名數據包。交易包括信息接收者、簽名確認發(fā)送者、以太幣賬戶余額、要發(fā)送的數據和兩個被稱為STARTGAS和GASPRICE的數值。為了防止代碼的指數爆炸和無限循環(huán),每筆交易都需要限制執(zhí)行代碼引起的計算步驟,包括初始信息和執(zhí)行中引起的所有信息。STARTGAS就是限制,GASPRICE礦工的費用需要在每個計算步驟中支付。若在執(zhí)行交易的過程中,“用完了瓦斯”,所有狀態(tài)都改變并恢復到原狀態(tài),但已支付的交易費用無法收回。如果交易中止時還剩下瓦斯,這些瓦斯將退還給發(fā)送者。創(chuàng)建合同有單獨的交易類型和相應的新聞類型;合同地址是基于隨機賬戶數量和交易數據的哈希計算的。
消息機制的一個重要后果是以太坊的“頭等公民”財產-合同擁有與外部賬戶相同的權利,包括發(fā)送信息和創(chuàng)建其他合同。這使得合同可以同時扮演多個不同的角色,例如,用戶可以使分散組織(合同)成員成為中介賬戶(另一個合同),偏執(zhí)的使用定制基于量子證明蘭波特簽名(第三合同)個人和自己使用五個私鑰確保安全賬戶(第四合同)共同簽名實體提供中介服務。以太坊平臺的強大之處在于,分散的組織和代理合同不需要關心合同中每個參與者的賬戶類型。
以太坊狀態(tài)轉換函數以太坊狀態(tài)轉換函數:APPLY(S,TX)->S’
,可定義如下:
fee=STARTGAS*GASPRICE
,并從簽名中確定發(fā)送人的地址。從發(fā)送人的賬戶中減去交易費用,增加發(fā)送人的隨機數量。如果賬戶余額不足,則返回錯誤。設置初始值GAS=STARTGAS
,并根據交易中的字節(jié)數減去一定量的瓦斯值。從發(fā)送人的賬戶轉移到接收人的賬戶。如果不存在接收賬戶,則創(chuàng)建此賬戶。如果接收行結束或瓦斯用完之前,如果接收賬戶是合同,則操作合同代碼。如果發(fā)送人賬戶沒有足夠的錢或代碼執(zhí)行耗盡,導致價值轉移失敗,恢復原狀態(tài),但仍需支付交易費用,交易費用增加到礦工賬戶。否則,將剩余的瓦斯全部歸還給發(fā)送者,消耗的瓦斯作為交易費用發(fā)送給礦工。假設合同代碼如下:if!self.storage[calldataload(0)]:self.storage[calldataload(0)]=calldataload(32)
需要注意的是,在現實中,合同代碼使用底層以太坊虛擬機(EVM)代碼編寫。上述合同是用我們的高級語言編寫的Serpent語言可以編譯成EVM代碼。假設合同存儲器一開始是空的,一個值10以太,瓦斯2000,瓦斯價格0.01以太和64字節(jié)數據,第一個32字節(jié)快速代表號碼2和第二個代表詞CHARLIE
。狀態(tài)轉換函數的處理過程如下:
以太坊合同的代碼是用基于堆棧字節(jié)碼的低級語言編寫的,稱為“以太坊虛擬機代碼”或者“EVM代碼”。代碼由一系列字節(jié)組成,每個字節(jié)代表一個操作。一般而言,代碼執(zhí)行是一個無限循環(huán),程序計數器每增加一次(初始值為零)就執(zhí)行一次操作,直到代碼執(zhí)行完成或出現錯誤,STOP
或者RETURN
指令。操作可訪問三個存儲數據的空間:
代碼可以訪問與訪問區(qū)塊頭數據相同的值,發(fā)送者和接收到的信息中的數據,代碼也可以返回節(jié)隊列作為輸出。
EVM代碼的正式執(zhí)行模型令人驚訝和簡單。當以太坊虛擬機運行時,元組可以使其完整的計算狀態(tài)(block_state,transaction,message,code,memory,stack,pc,gas)
來定義,這里block_state
它包含所有賬戶余額和存儲的整體狀態(tài)。在每一輪執(zhí)行中,通過調出代碼pc
(程序計數器)個字節(jié),當前指令被找到,每個指令都有定義自己如何影響元組。例如,ADD
把兩個元素從棧里出來,把它們和進棧里,gas
(瓦斯)一起減少pc
加一,SSTORE
將頂部的兩個元素出棧,將第二個元素插入由第一個元素定義的合同存儲位置,最多減少200gas值并將pc
加一,雖然通過即時編譯優(yōu)化以太坊的方法很多,但以太坊的基本實施可以用幾百行代碼來實現。
雖然存在一些差異,但以太坊區(qū)塊鏈在許多方面與比特幣區(qū)塊鏈相似。區(qū)塊鏈結構的區(qū)別在于,以太坊區(qū)塊不僅包括交易記錄和最新狀態(tài),還包括區(qū)塊序列號和難度值。以太坊區(qū)塊確認算法如下:
檢查塊中引用的最后一個塊是否存在和有效。檢查塊的時間戳是否大于引用的最后一個塊,并小于15分鐘。檢查塊的序列號、難度值、交易根、叔根和瓦斯限額(許多以太坊獨特的底部概念)是否有效。檢查塊的工作量是否有效。S[0]
賦值為上一塊STATE_ROOT
。將TX
賦值為區(qū)塊的交易列表共有n
交易0……n-1
的i
,狀態(tài)轉換S[i 1]=APPLY(S[i],TX[i])
。如果任何轉換錯誤,或者程序執(zhí)行到這里所花費的瓦斯(gas)超過了GASLIMIT
,返回錯誤S[n]
給S_FINAL
區(qū)塊獎勵支付給礦工。S-FINAL
是否與STATE_ROOT
同樣的。如果相同,塊是有效的。否則,塊是無效的。乍一看,這種確認方法似乎效率很低,因為它需要存儲每個塊的所有狀態(tài),但事實上,以太坊的確認效率可以與比特幣相比。原因是狀態(tài)儲存在樹結構中(treestructure),每增加一個塊只需要改變樹結構的一小部分。因此,一般來說,兩個相鄰區(qū)塊的大部分樹結構應該是相同的,因此可以使用指針(即子樹哈希)引用一次數據。一種被稱為“帕特里夏樹”(“PatriciaTree”)樹結構可以實現這一點,包括修改默克爾樹的概念,不僅可以改變節(jié)點,還可以插入和刪除節(jié)點。此外,由于所有的狀態(tài)信息都是最后一個塊的一部分,因此沒有必要存儲所有塊的歷史——如果該方法可以應用于比特幣系統(tǒng),它可以節(jié)省10-20倍的存儲空間。
應用一般來說,以太坊有三種應用。第一類是金融應用,為用戶提供更強大的資金管理和參與合同的方法。包括子貨幣、金融衍生品、對沖合同、儲蓄錢包、遺囑,甚至一些綜合雇傭合同。第二類是半金融應用。這里有錢,但也有很重的非金錢方面。一個完美的例子是解決計算問題的自我強制獎勵。最后,還有完整的非金融應用,如在線投票和分散治理。
令牌系統(tǒng)鏈上的令牌系統(tǒng)有很多應用,從代表美元或黃金等資產的子貨幣到公司股票,單個令牌代表智能資產,安全不可偽造的優(yōu)惠券,甚至與傳統(tǒng)價值完全無關的令牌系統(tǒng)。令牌系統(tǒng)在以太坊的實施令人驚訝。關鍵是要理解,所有的貨幣或令牌系統(tǒng)基本上都是一個具有以下操作的數據庫:從A中減去X單位并將X單位添加到B中,前提是(1)A至少X單位和(2)交易在交易前被A批準。實施令牌系統(tǒng)就是在合同中實現這樣的邏輯。
用Serpent語言執(zhí)行令牌系統(tǒng)的基本代碼如下:
defsend(to,value):ifself.storage[from]>=value:self.storage[from]=self.storage[from]valueself.storage[to]=self.storage[to] value
本質上,本文將進一步描述這一點“銀行系統(tǒng)”最小化狀態(tài)轉換功能。在初始和其他邊緣條件下,需要添加一些額外的代碼來分發(fā)貨幣。理想情況下,其他合同將添加一個函數來查詢地址余額。就足夠了。理論上,基于以太坊的子貨幣命令系統(tǒng)可能包括基于比特幣的鏈上元所缺乏的一個重要功能:直接用這種貨幣支付交易費用的能力。實現這種能力的方法是維護以太幣賬戶為發(fā)送人支付交易費,收集內部貨幣作為交易費用,并在持續(xù)拍賣中拍賣,合同繼續(xù)為以太幣賬戶注資。這樣,用戶需要使用以太幣“激活”他們的賬戶,但一旦賬戶中有以太幣,就會重復使用,因為每個合同都會給它充值。
金融衍生品和價值穩(wěn)定的貨幣金融衍生品是“智能合約”的最普遍的應用,也是最易于用代碼實現的之一。實現金融合約的主要挑戰(zhàn)是,其中大部分需要參考外部價格發(fā)布器;例如,一個需求量很大的應用程序是一個智能合約,用于對沖以太幣(或其他密碼貨幣)相對美元的價格波動,但該合約需要知道以太幣相對美元的價格。最簡單的方法是由特定的機構(如納斯達克)維護“數據提供“合同的設計使該機構能夠根據需要更新合同,并提供一個接口,使其他合同能夠通過向合同發(fā)送消息獲得包含價格信息的回復。
當這些關鍵要素齊全時,對沖合同看起來如下:
等待A輸入1000以太幣。.等待B輸入1000以太幣。以1000以太幣的美元價值通過查詢數據提供合同,例如,x記錄存儲美元器。30天后,允許A或B“重新激活“合同向A發(fā)送價值x美元的以太幣(重新查詢數據以獲得新價格并計算),并將剩余的以太幣發(fā)送給AB。這種合同在密碼業(yè)務中具有非凡的潛力。密碼貨幣經常受到批評的一個問題是價格的波動性;雖然大量用戶和企業(yè)可能需要密碼資產帶來的安全和便利,但他們不愿意面對一天資產價值下降23%的情況。到目前為止,最常見的推薦方案是發(fā)行人認可資產;思想是發(fā)行人創(chuàng)建一種子貨幣,他們有權發(fā)行和贖回這種子貨幣,并向一個單位(如黃金、美元)提供特定的相關資產。發(fā)行人承諾任何人返還單位密碼學資產。返還一個單位的相關資產。這種機制可以使任何非密碼學資產被使用“升級“如果發(fā)行人信任密碼學資產。然而,在實踐中,發(fā)行人并不總是值得信賴,在某些情況下,銀行系統(tǒng)過于脆弱或不誠實,使這些服務無法存在。金融衍生品提供了替代品。這里將不再有單獨的發(fā)行人提供儲備來支持一種資產,而是一個由賭博密碼資產價格上漲的投機者組成的分散市場。與發(fā)行人不同,投機者無權討價還價,因為對沖合同凍結了他們的儲備。請注意,這種方法并不是完全分散的,因為它仍然需要一個可靠的數據源來提供價格信息,盡管仍然有爭議,這仍然是一個巨大的進來減少基礎設施的需求(與發(fā)行人不同,價格發(fā)布器不需要許可證,似乎可以歸類為自由言論)和降低潛在的欺詐風險。身份和信用體系最早的替代幣和域名幣嘗試使用類比特幣塊鏈提供名稱注冊系統(tǒng),用戶可以在公共數據庫中注冊他們的名稱和其他數據。最常用的應用案例圖像“bitcoin.org“(或者在域名幣中,”bitcoin.bit“)同一域名和一個IP域名系統(tǒng)對應地址。其他應用案例包括電子郵件驗證系統(tǒng)和更先進的潛在信用系統(tǒng)。這是以太坊提供類似域名幣的名稱注冊系統(tǒng)的基本合同:
defregister(name,value):if!self.storage[name]:self.storage[name]=value
合同很簡單;是以太坊網絡中可以添加但不能修改或刪除的數據庫。任何人都可以把一個名字注冊為一個值,永遠不會改變。一復雜的名稱注冊合同將包括允許其他合同查詢的合同“功能條款“,讓一個名字和一個名字”擁有者“(即第一注冊人)修改數據或轉讓所有權的機制。它甚至可以添加信譽和信任網絡功能。
去中心化存儲在過去的幾年里,一些流行的在線文件存儲初創(chuàng)公司出現了。最突出的是Dropbox,它允許用戶上傳硬盤備份,提供備份存儲服務,并允許用戶訪問,以便每月向用戶收取費用。然而,文件存儲市場有時效率相對較低;對現有服務的粗略觀察表明,特別是“神秘谷“20-200GB在沒有免費空間或企業(yè)用戶折扣的情況下,主流文件存儲成本的月價意味著在一個月內支付整個硬盤。以太坊合同允許分散存儲生態(tài)系統(tǒng)的開發(fā),使用戶可以通過租用自己的硬盤或未使用的網絡空間獲得少量收入,從而降低文件存儲的成本。
這種設施的基本構件就是我們所說的“去中心化Dropbox合約“。本合同的工作原理如下。首先,有人將需要上傳的數據分成快速,加密每個數據以保護隱私,并構建默克爾樹。然后創(chuàng)建一個包含以下規(guī)則的合同,每N塊,合同將從默克爾樹中提取一個隨機索引(使用最后一塊可以訪問合同代碼提供隨機性),然后支持第一個實體X以太支持一個類似的簡化驗證支付(SPV)樹中特定索引處塊的所有權證明。當一個用戶想重新下載他的文件,他可以使用微支付通道協議(例如每32k字節(jié)支付1薩博)恢復文件;在成本方面,最有效的方法是支付者不發(fā)布交易,而是使用相同隨機數量的稍微更劃算的交易k后來,字節(jié)取代了原始交易。
該協議的一個重要特點是,雖然它似乎是一個人信任許多不準備丟失文件的隨機節(jié)點,但他可以通過秘密共享將文件分成許多小塊,然后通過監(jiān)控合同得知每個小塊仍然保存在某個節(jié)點。如果合同仍在支付,則提供證據表明某人仍在保存文件。
去中心化自治組織通常意義上“去中心化自治組織(DAO,decentralizedautonomousorganization)”概念是指有一定數量成員或股東的虛擬實體,依靠67%以上的成員來決定花錢和修改代碼。成員會決定組織如何分配資金。分配資金的方法可能是獎勵、工資或更有吸引力的機制,如內部貨幣獎勵。這只是利用密碼學塊鏈技術從根本上復制了傳統(tǒng)公司或非營利組織的法律意義,以實現強制執(zhí)行。至此許多圍繞DAO討論集中在股東和可交易股份周圍“去中心化自治公司(DAC,decentralizedautonomouscorporation)”的“資本家”模式;作為替代者,被描述為“去中心化自治社區(qū)(decentralizedautonomouscommunity)”實體將使所有成員在決策中擁有同等的權利,并要求67%以上的成員在增減成員時同意。每個人只能有一個成員資格,這一規(guī)則需要集團強制執(zhí)行。
以下是如何用代碼實現的DO的綱要。最簡單的設計是一個代碼,如果三分之二的成員同意,可以自我修改。雖然理論上代碼是不可改變的,但通過將代碼主干放在一個單獨的合同中,并將合同調用的地址指向一個可改變的存儲,仍然可以很容易地繞過障礙,使代碼可以修改DAO通過交易提供的數據來區(qū)分合同的簡單實現有三種交易類型:
[0,i,K,V]
注冊索引為i,存儲地址索引為K至v建議更改內容。[0,i]
對建議i進行注冊投票。[2,i]
如有足夠投票則確認建議i。然后合同對每一項都有具體的條款。它將維護所有開放存儲的更改記錄和誰投票的表格。還有所有成員的表格。當任何存儲內容的更改獲得了三分之二多數同意,一個最終的交易將執(zhí)行這項更改。一個更復雜的框架將增加內置的選舉功能,如發(fā)送交易、增加或減少成員,甚至提供民主投票代表(即任何人可以委托另一個人代表自己投票,這種委托關系可以傳遞,所以如果A委托B,然后B委托C,C將決定A的投票)。這種設計將使DAO作為一個分散的社區(qū),人們最終可以把選擇合適人選的任務交給專家。與目前的系統(tǒng)不同,隨著社區(qū)成員的不斷變化,他們的排隊很容易隨著時間的推移而出現和消失。替代模式是去中心化公司,任何賬戶都可以擁有0到更多的股份,決策需要三分之二以上的股份同意。一個完整的框架將包括資產管理功能——可以提交買賣股票的訂單和接受訂單的功能(如果合同中有訂單匹配機制)。代表仍然以委任制民主的方式存在,產生了“董事會”的概念。
未來可能會實現更先進的組織治理機制;現在是分散的組織(DO)可以從去中心化自治組織(DAO)開始描述。DO和DAO區(qū)別是模糊的。一般的分割線是治理是否可以通過類似的政治過程或一個“自動”實現過程,良好的直覺測試是“無通用語言”標準:如果兩個成員不說相同的語言組織能正常運行嗎?顯然,一個簡單的傳統(tǒng)持股公司會失敗,但像比特幣協議這樣的公司很可能會成功。·漢森的“futarchy”,通過預測市場實現組織治理的機制是一個真正的解釋“自治”什么樣的好例子可能是公式治理。注意一個人不假設一切DAO比所有DO優(yōu)越;自治只是在某些特定場景下有很大優(yōu)勢的范式,但在其他地方可能不可行,很多半DAO可能存在。
進一步應用儲蓄錢包Alice她想確保自己的資金安全,但她擔心丟失或被黑客偷走私鑰。她把以太幣放在和諧處Bob在簽訂的合同中,本合同為銀行:
Alice每天最多可提取1%的資金。Bob一個人每天最多可以提取1%的資金,但是Alice你可以用她的私鑰創(chuàng)建一取消Bob提現權限。Alice和Bob可隨意提取資金。一般來說,每天1%對Alice夠了,如果Alice想提現更多,可以聯系她Bob尋求幫助。如果Alice她可以立即發(fā)現私鑰被盜Bob將她的資金轉入新合同。如果她丟了她的私鑰,Bob可以慢慢提出錢。如果Bob表現出惡意,她可以關掉他的提現權。作物保險。一個人可以很容易地以天氣而不是任何價格指數作為數據輸入來創(chuàng)建一個金融衍生品合同。如果一個愛荷華的農民買了一個基于愛荷華降雨的金融衍生品,農民會自動收到賠償資金,如果有足夠的降雨,他會很高興,因為他的作物收獲會很好。
分散的數據發(fā)布器。事實上,基于差異的金融合約是通過的“謝林點”協議可以分散數據發(fā)布器。謝林點的工作原理如下:N將輸入值提供給系統(tǒng)(例如)ETH/USD價格),所有值都被排序,每個提供25%到75%值的節(jié)點都會得到獎勵。每個人都有激勵來提供別人會提供的答案。很明顯,默認情況下,大量玩家可以真正同意的答案是正確的答案,這構建了一個理論上可以提供很多價值的答案,包括ETH/USD價格,去中心化協議,柏林的溫度甚至特別難計算結果。
5.云計算。EVM該技術還可以用來創(chuàng)建一個可驗證的計算環(huán)境,允許用戶邀請他人進行計算,然后有選擇地要求在某些隨機選擇的檢查點上提供正確的證據。這使得任何用戶都何用戶都可以使用他們的臺式機、筆記本電腦或特殊服務器的云計算市場成為可能,現場檢查和安全存款可以用來確保系統(tǒng)值得信賴(即沒有節(jié)點可以通過欺騙獲利)。雖然這樣的系統(tǒng)可能不適用于所有任務;例如,在大節(jié)點云上完成需要高級進程間通信的任務并不容易。然而,其他一些任務很容易平行;SETI@home,folding@home在這樣的平臺上很容易進行基因算法等項目。
6.點對點賭博。任何數量的點對點賭博協議都可以的點對點賭博協議,例如FrankStajano和RichardClayton的Cyberdice。事實上,最簡單的賭博協議就是這樣一個簡單的合同,用來賭下一塊哈稀值和猜測值之間的差額,從而創(chuàng)建更復雜的賭博協議,實現近乎零成本、無欺騙的賭博服務。
7.預測市場。無論是神諭還是謝林幣,預測市場都很容易實現。謝林幣的預測市場可能被證明是第一個主流的分散組織管理協議“futarchy”應用。
8.以身份和信譽體系為基礎,鏈上去中心化市場。
注意改進版幽靈協議的實施“幽靈“協議("GreedyHeaviestObservedSubtree"(GHOST)protocol)是由YonatanSompolinsky和AvivZohar2013年12月引進的創(chuàng)新。幽靈協議提出的動機是目前快速確認的塊鏈由于塊的高浪費率而受到低安全性的困擾;因為塊需要一定的時間(設置為t)擴散到整個網絡。如果礦工A挖出一個塊,礦工B在A塊擴散到B之前碰巧挖出另一個塊,礦工B塊將無效且無效為網絡安全做出貢獻。此外,還有一個集中的問題:如果A是一個全網計算能力30%的礦池,B計算能力10%,A將面臨70%的時間產生作廢區(qū)塊的風險,而B在90%的時間內產生作廢區(qū)塊。因此,如果作廢率高,A簡單地說,由于計算能力份額較高,效率更高。結合這兩個因素,區(qū)塊生成速度快的塊鏈很可能導致礦池實際上有計算能力份額來控制采礦過程。
正如Sompolinsky和Zohar描述的是計算哪個鏈“最長”還包括廢區(qū)塊,幽靈協議解決了降低網絡安全性的第一個問題;也就是說,不僅是一個區(qū)塊的父區(qū)塊和更早的祖先區(qū)塊,以太坊術語的后代塊(以太坊術語稱為“叔區(qū)塊”)它還被添加來計算哪個塊有最大的工作量來支持它。我們超越了Sompolinsky和Zohar所描述的協議以解決第二個問題–以太坊支付集中傾向“叔區(qū)塊”87廢區(qū)塊的身份是新塊確認的貢獻.5%的獎勵包含在計算中“侄子區(qū)塊”獎勵12.5%,但交易費用不獎勵給叔叔區(qū)塊。以太坊實施了一個簡化版本的幽靈協議,只探索第五層。以太坊實施了一項簡化版本的幽靈協議,只探索第五層。其特點是廢區(qū)塊只能作為叔叔區(qū)塊的父母的第二代到第五代,而不是更遠的年輕區(qū)塊(如父母區(qū)塊的第六代年輕區(qū)塊,或祖父區(qū)塊的第三代年輕區(qū)塊)。這樣做有幾個原因。首先,無條件的幽靈協議會給計算給定區(qū)塊的叔叔區(qū)塊帶來太多的復雜性。其次,以太坊使用的無條件幽靈協議剝奪了礦工在主鏈而不是公開攻擊者鏈上挖掘的激勵。最后,計算表明,即使出塊時間為15,也有激勵的五層幽靈協議s在這種情況下,也達到了95%以上的效率,而計算能力25%的礦工從集中獲得的好處不到3%。
費用由于每次發(fā)布到區(qū)塊鏈的交易都占據了下載和驗證的成本,因此需要一個包括交易費用在內的標準機制來防止過度交易。比特幣使用的默認方法是純自愿交易成本,依靠礦工作為守門員,設定動態(tài)最低成本。因為這種方法是“基于市場的”,礦工和交易發(fā)送者可以根據供需來決定價格,因此這種方法在比特幣社區(qū)得到了很好的接受。然而,邏輯問題是交易處理不是一個市場;雖然根據直覺將交易處理解釋為礦工提供的服務非常有吸引力,但事實上,礦工包含的交易需要網絡中的每個節(jié)點,因此交易處理的最大成本由第三方而不是決定是否包含交易的礦工承擔。因此,公地悲劇很有可能發(fā)生。
然而,當給出一個特殊而不準確的簡化假設時,基于市場機制的漏洞神奇地消除了它的影響。示范如下。
交易帶來k步操作,并提供獎勵kRR由交易發(fā)布者設置,為任何收錄交易的礦工,k而R對礦工來說是事先(大致上)可見的。每個節(jié)點處理每一步的成本都是C(即所有節(jié)點的效率一致)。每個計算能力一致(即全網計算能力的1/N)。沒有不挖礦的全節(jié)點。當預期獎勵大于成本時,礦工愿意采礦。這是因為礦工有1/1N處理下一個塊的機會,所以預期收入是kR/N,礦工的處理成本簡單kC.這樣當kR/N>kC,即R>NC時。礦工愿意收錄交易。注意R是交易發(fā)送者提供的每一步費用,是礦工從處理交易中受益的下限。NC全網處理一個操作的成本。因此,礦工只有動機包括收入大于成本的交易。然而,這些假設與實際情況有幾個重要的偏差:
由于額外的驗證時間延遲了塊的廣播,增加了塊成為廢塊的機會,處理交易的礦工成本高于其他驗證節(jié)點。全節(jié)點不挖礦是存在的。在實踐中,計算能力分布最終可能是極其不平均的。政敵和瘋子確實存在以破壞網絡為己任的投機者,他們可以聰明地設置合同,使他們的成本遠低于其他驗證節(jié)點。上述第一點驅使礦工收錄更少的交易,第二點增加NC;因此,這兩點的影響至少相互抵消了.第三點和第四點是主要問題;作為解決方案,我們簡單地建立了浮動上限:沒有區(qū)塊可以包含比例BLK_LIMIT_FACTOR倍長期指數移動平均值更多。具體地:blk.oplimit=floor((blk.parent.oplimit*(EMAFACTOR-1) floor(parent.opcount*BLK_LIMIT_FACTOR))/EMA_FACTOR)
BLK_LIMIT_FACTOR和EMA_FACTOR暫時設為65536和1.經過更深入的分析,可以調整5的常數。
完整的計算和圖靈需要強調的是,以太坊虛擬機是圖靈完整的;這意味著EVM代碼可以實現任何可想象的計算,包括無限循環(huán)。EVM實現循環(huán)的方法有兩種。JUMP指令允許程序跳回代碼前面的某個地方whilex<27:x=x*2
條件句相同JUMPI條件跳轉是指令實現的。其次,合同可以通過遞歸調用其他合同來實現循環(huán)。這自然導致了一個問題:惡意用戶能否通過迫使礦工和整個節(jié)點進入無限循環(huán)而關機?這個問題是由于計算機科學中的一個停機問題:一般來說,沒有辦法知道給定的程序是否可以在有限的時間內完成。
正如狀態(tài)轉換章所述,我們的計劃通過為每筆交易設定最大的計算步驟來解決問題。如果超過,計算將恢復到原始狀態(tài),但仍需支付費用。消息也是如此。為了顯示該計劃背后的動機,請考慮以下示例:
攻擊者創(chuàng)建了一份運行無限循環(huán)的合同,然后向礦工發(fā)送了一份激活循環(huán)的交易。礦工將處理交易,運行無限循環(huán),直到瓦斯耗盡。即使瓦斯半途而廢,交易仍然正確(回到原處),礦工仍然從攻擊者那里賺取每一步計算的費用。攻擊者創(chuàng)造了一個非常長的無限循環(huán)意圖,迫使礦工長期計算,導致在計算結束前產生了幾個塊,因此礦工無法包括交易以賺取成本。然而,攻擊者需要發(fā)布一個STARTGAS值限制可執(zhí)行步數,因此礦工會提前知道計算步數會消耗太多。攻擊者看到一個包含,比如send(A,self.storage);self.storage=0格式合同,然后發(fā)送只能執(zhí)行第一步而不能執(zhí)行第二步的交易(即提現但不減少賬戶余額)。合同作者不必擔心類似的防御攻擊,因為如果中途停止,所有的變化都會得到回復。一個金融合同通過提取九個特殊數據發(fā)布器的中值來最大限度地降低風險,一個攻擊者接管了其中一個數據提供器,然后按下它DAO章節(jié)中提到的可變地址調用機制設計成可變數據提供器,轉換為運行無限循環(huán),以迫使任何金融合同從現在開始索要資金的嘗試都會因瓦斯耗盡而暫停。然而,金融合同可以在新聞中設置瓦斯限制,以防止此類問題。圖靈的完整替代是圖靈的不完整,這里JUMP和JUMPI指令不存在,每個合同只允許在給定時間的調用堆棧中存在一份副本。在這樣的系統(tǒng)中,可能不需要上述成本系統(tǒng)和圍繞我們方案效率的不確定性,因為執(zhí)行合同的成本將由其規(guī)模決定。此外,圖靈的不完整甚至不是一個很大的限制。到目前為止,只有一個合同需要循環(huán),即使這個循環(huán)可以被26個單行代碼段的重復所取代??紤]到圖靈完整帶來的嚴重麻煩和有限的好處,為什么不簡單地使用圖靈不完整的語言呢?事實上,圖靈的不完整不是一個簡單的解決方案。為什么?請考慮以下合同:C0:call(C1);call(C1);C1:call(C2);call(C2);C2:call(C3);call(C3);...C49:call(C50);call(C50);C50:(在合同中長期存儲圖靈機的步驟計算和記錄結果)
現在,發(fā)送這樣的交易A,這樣,在51筆交易中,我們有一筆需要花費2美元^對于50步計算的合同,礦工可以嘗試維護每個合同的最高可執(zhí)行步數,并計算遞歸調用其他合同的可執(zhí)行步數,以便提前檢測此類邏輯炸彈,但這將禁止礦工創(chuàng)建其他合同(因為上述26份合同的創(chuàng)建和執(zhí)行可以很容易地放入單獨的合同)。另外一個問題點是一個消息的地址字段是一個變量,所以通常來講可能甚至無法預先知道一個合約將要調用的另外一個合約是哪一個。另一個問題是,一個消息的地址字段是一個變量,所以一般來說,你甚至可能不知道一個合同要調用的另一個合同是哪個。因此,我們最終得出了一個驚人的結論:圖靈的完整管理令人驚訝地容易,而圖靈的不完整管理在缺乏相同控制時令人驚訝地困難——為什么不讓協議圖靈完整呢?
貨幣和發(fā)行以太坊網絡包含自己的內置貨幣以太幣。以太幣起著雙重作用,為各種數字資產交易提供了主要的流動性,更重要的是,它提供了一種支付交易費用的機制。為了方便和避免未來的爭議(見當前情況mBTC/uBTC/聰的爭論),提前設置不同面值的名稱:
1:偉10^12:薩博10^15:芬尼10^18:以太這應該被視為是“元”和“分”或者“比特幣”和“聰”在不久的將來,我們期待著概念的擴展版“以太”作為普通交易,“芬尼”用于微交易,“薩博”和“偉”用于討論費用和協議的實施。
發(fā)行方式如下:
以太幣將通過銷售活動以每次發(fā)售BTC1337-2000以太的價格發(fā)售,一個旨在為以太坊組織籌資并且為開發(fā)者支付報酬的機制已經在其它一些密碼學貨幣平臺上成功使用。早期買家會享受更大的折扣,銷售收入BTC將完全用于支付開發(fā)人員和研究人員的工資和獎勵,以及投資密碼貨幣生態(tài)系統(tǒng)的項目。0.099x(x分配給總銷售額BTC另一個0.099x長期研究項目將分配。從上線開始,每年都會有0.26x(x礦工為銷售總量挖出。發(fā)行分解永久性線性增長模型降低了比特幣中財富過于集中的風險,給了生活在當下和未來的人獲得貨幣的公平機會,并保持了獲得和持有以太幣的激勵,因為從長遠來看“貨幣供應增長率”趨于零。我們還推斷,隨著時間的推移,總會有粗心和死亡造成的貨幣損失。假設貨幣損失是每年貨幣供應量的固定比例,最終流通中的貨幣供應量將穩(wěn)定在等于年貨幣發(fā)行量除以損失率的值(例如,當損失率為1%時,當供應量達到30x時,每年有0.3x同時挖出0.3x失去,達到平衡)。
除了線性發(fā)行,以太幣的供應增長率和比特幣一樣長期趨于零。
集中開采比特幣挖掘算法基本上是讓礦工在某個節(jié)點最終改變版本之前輕微改變塊頭幾千次。哈希小于目標值(目前約2190)。然而,這種采礦算法很容易被兩種形式的集中攻擊。首先,采礦生態(tài)系統(tǒng)是專門設計的,因此在比特幣采礦的特殊任務中效率提高了數千倍ASICs(專用集成電路)和計算機芯片控制。這意味著比特幣挖掘不再是高度分散和追求平等主義,而是需要巨額資本的有效參與。第二,大多數比特幣礦工實際上不再在當地完成區(qū)塊驗證;而是依靠集中的礦池來提供區(qū)塊頭。這個問題可以說是非常嚴重的:在本文的寫作中,最大的兩個礦池間接控制了整個網絡約50%的計算能力,盡管當一個礦池或聯合體試圖攻擊51%時,礦工可以轉換為其他礦池,這減輕了問題的嚴重性。
以太坊目前的目的是使用基于每1000個隨機數隨機產生哈希函數的挖掘算法,并使用足夠寬的計算域來消除特殊硬件的優(yōu)點。當然,這種策略不會將集中收入減少到零,但也不需要。請注意,每個用戶幾乎可以通過使用自己的私人筆記本電腦或臺式電腦免費完成一定數量的采礦活動,但達到100%CPU在利用率之后,他們需要支付更多的電力和硬件。ASIC挖礦公司需要從第一個哈希開始就為電力和硬件支付成本。因此,如果集中收入能夠保持在(E H)/E下面,那就算了ASICs被制造出來普通礦工依然有生存空間。此外,我們計劃將挖掘算法設計為需要訪問整個區(qū)塊鏈的挖掘,迫使礦工存儲或至少驗證每筆交易。這消除了集中礦池的需求;雖然礦池仍然可以發(fā)揮平滑收入分配的隨機作用,但該功能可以不受集中控制P2P礦池完工地也一樣好。這樣,即使大多數普通用戶仍然傾向于選擇輕客戶端,增加網絡中的全節(jié)點數量也有助于抵御集中。
擴展性擴展性問題是以太坊經常受到關注的地方。和比特幣一樣,以太坊也遭受著每一筆交易都需要網絡中每一個節(jié)點來應對這一困境的折磨。目前比特幣的區(qū)塊鏈規(guī)模約為20GB,以每小時1MB速度增長。若比特幣網絡處理Visa級的2000tps每三秒1交易MB速度增長(1GB每小時,8TB每年)。以太坊也可能經歷類似甚至更糟的增長模式,因為在以太坊區(qū)塊鏈上有很多應用,而不是簡單的貨幣,但以太坊的整個節(jié)點只需要存儲狀態(tài),而不是完整的區(qū)塊鏈歷史,這改善了情況。
大區(qū)塊鏈的問題是集中風險。如果塊鏈大小增加,比如100TB,可能的場景是,只有非常小的大型企業(yè)才會運行整個節(jié)點,而常規(guī)用戶使用輕型節(jié)點SPV節(jié)點。這將增加對整個節(jié)點合伙欺詐的利潤例如,更改區(qū)塊獎勵,給自己BTC)擔心風險。輕節(jié)點無法立即檢測到這種欺詐。當然,至少可能有一個誠實的全節(jié)點,幾個小時后欺詐信息將通過Reddit這樣的渠道泄露,但現在已經太晚了:無論普通用戶如何努力廢除已經產生的塊,他們都會遇到巨大而不可行的協調問題,與成功的51%攻擊相同。在比特幣這里,現在這是一個問題,但PeterTodd建議的改變可以緩解這個問題。
最近,以太坊將使用兩種額外的策略來處理這個問題。首先,由于基于區(qū)塊鏈的采礦算法,至少每個礦工都會被迫成為一個全節(jié)點,這確保了一定數量的全節(jié)點。其次,更重要的是,在處理完每筆交易后,我們將在區(qū)塊鏈中包含一棵中間狀態(tài)樹的根。即使區(qū)塊驗證是集中的,只要存在誠實的驗證節(jié)點,也可以通過驗證協議避免集中的問題。如果礦工發(fā)布了一個不正確的區(qū)塊,該區(qū)塊要么格式錯誤,要么處于狀態(tài)S[n]是錯的。因為S[0]是正確的,必須有第一個錯誤的狀態(tài)S[i]但S[i-1]是正確的,驗證節(jié)點將提供索引i,一起提供處理APPLY(S[i-1],TX[i])->S[i]帕特里夏樹節(jié)點所需的子集。這些節(jié)點將被命令計算這部分,以查看生成S[i]是否與之前提供的值一致。
此外,更復雜的是,惡意礦工發(fā)布不完整的塊進行攻擊,導致沒有足夠的信息來確定塊是否正確。解決方案是質疑-響應協議:驗證節(jié)點質疑目標交易索引,在另一名礦工或驗證人提供帕特里夏節(jié)點集作為正確證據之前,接受質疑信息的輕節(jié)點將取消對相應塊的信任。
綜述:分散應用上述合同機制允許任何人在虛擬機上建立一個通過全網絡共識運行命令行的應用程序(從根本上說),它可以改變全網絡可訪問的狀態(tài)“硬盤”。然而,對大多數人來說,缺乏足夠的用戶友好性使分散化成為一種有吸引力的替代方案。最后,一個完整的“分散應用”應包括底層的商業(yè)邏輯組件使用以太坊和其他系統(tǒng)組合,無論是否在以太坊完全實施(如一個)P2P新聞層,其中一個計劃放入以太坊客戶端)或只有其他系統(tǒng)的方式】和上層圖形用戶接口組件。以太坊客戶端被設計成網絡瀏覽器,但包括對“eth”JavascriptAPI客戶端可以看到的特定網頁支持與以太坊區(qū)塊鏈互動。從“傳統(tǒng)”從網頁的角度來看,這些網頁是完全靜態(tài)的,因為區(qū)塊鏈和其他分散協議將完全取代服務器來處理用戶的請求。最后,分散協議希望以太坊以某種方式存儲網頁。
結論以太坊協議最初構思了升級版的密碼學貨幣,如鏈上合同、現金提取限制、金融合同、賭博市場等高級功能。以太坊協議將不直接“支持”任何應用程序,但圖靈完整編程語言的存在意味著理論上任何合同都可以為任何交易類型和應用程序創(chuàng)建。然而,以太坊更有趣的是,以太坊協議遠遠超過簡單的貨幣,圍繞分散存儲、分散計算和分散預測市場以及幾十個類似的協議和分散應用概念,有潛力從根本上提高計算行業(yè)的效率,并首次將經濟層添加到其他領域P2P協議提供強有力的支持,最終也會出現大量與金錢無關的應用。
以太坊協議實現的任何狀態(tài)轉換概念提供了一個具有獨特潛力的平臺;與數據存儲、賭博或金融等單一目的的封閉協議不同,以太坊在設計上是開放的,我們相信它非常適合大量的金融和非金融協議作為基礎服務。
注釋和高級閱讀 注解1.一位經驗豐富的讀者會注意到,比特幣地址實際上是橢圓曲線公鑰,而不是公鑰本身。然而,從密碼學術語的角度來看,將公鑰稱為公鑰是完全合理的。這是因為比特幣密碼學被認為是一種定制的數字簽名算法。公鑰由橢圓曲線公鑰的哈希組成,簽名由橢圓曲線簽名連接的橢圓曲線公鑰組成。驗證算法包括用作公鑰的橢圓曲線公鑰哈希檢查橢圓曲線公鑰,然后用橢圓曲線公鑰驗證橢圓曲線簽名。
2.從技術上講,前11中值。
3.內部,2和“CHARLIE”都是數字,后者有巨大的base256編碼格式,數字可以從0到2^256-1。
進階閱讀Intrinsicvalue:https://tinyurl.com/BitcoinMag-IntrinsicValue
Smartproperty:https://en.bitcoin.it/wiki/Smart_Property
Smartcontracts:https://en.bitcoin.it/wiki/Contracts
B-money:http://mubashirfilms.com/bmoney.txt
Reusableproofsofwork:http://mubashirfilms.com/coloredcoin-whitepaper
Mastercoinwhitepaper:https://github.com/mastercoin-MSC/spec
Decentralizedautonomouscorporations,BitcoinMagazine:https://tinyurl.com/Bootstrapping-DACs
Simplifiedpaymentverification:https://en.bitcoin.it/wiki/Scalability#Simplifiedpaymentverification
Merkletrees:http://en.wikipedia.org/wiki/Merkle_tree
Patriciatrees:http://en.wikipedia.org/wiki/Patricia_tree
GHOST:http://mubashirfilms.comousAgents,JeffGarzik:https://tinyurl.com/storj-agents
MikeHearnonSmartPropertyatTuringFestival:http://mubashirfilms.com/watch?v=Pu4PAMFPo5Y
EthereumRLP:https://github.com/ethereum/wiki/wiki/[English]-RLP
EthereumMerklePatriciatrees:https://github.com/ethereum/wiki/wiki/[English]-Patricia-Tree
PeterToddonMerklesumtrees:http://sourceforge.net/p/bitcoin/mailman/message/31709140/
騰佑科技(mubashirfilms.com)成立于2009年,總部位于河南鄭州,是一家集互聯網基礎設施及軟硬件于一體化的高新技術企業(yè),具有IDC/ISP/ICP/云牌照、雙軟等資質,并擁有多個國家版權局認證。公司自成立以來,一直致力于發(fā)展互聯網IDC數據中心DataCenter、云計算Cloud、大數據BigDate、人工智能AI、內容加速CDN、互聯網安全、軟件定制開發(fā)等產品服務及行業(yè)客戶技術一體化智能解決方案;2018年成為百度智能云AI河南服務中心。
售前咨詢熱線:400-996-8756
備案提交:0371-89913068
售后客服:0371-89913000
搜索詞
熱門產品推薦