前言:本文主要闡述當前以太坊的具體運作原理,有助于我們理解以太坊背后的各種概念和操作,適合初學者閱讀。未來ETH2.0將會發生非常大的變化,具體可以看之前的文章《ETH2.0:它會是什么?》和《ETH2.0:它會是什么?》。接上一篇《以太坊是如何運作的》、《以太坊是如何運作的》。合約創建
回顧一下,以太坊有兩種類型賬戶:合約賬戶和外部賬戶。當我們說交易是“創建合約”時,我們的意思是說交易的目的是創建一個新的合約賬戶。為了創建新的合約賬戶,我們首先使用特殊公式聲明新賬戶地址,然后我們通過如下方式初始化新賬戶:把nonce設置為零。如果發送人用交易發送一定量的Ether作為價值,則設置該價值為賬戶余額。從發送人的余額中扣除發送給新賬戶的價值。把存儲設置為空。把合約的codeHash設置為空字符串的哈希。一旦我們初始化賬戶,使用跟隨交易發送的init代碼實際上能夠創建賬戶。在執行這個初始化代碼時會產生多樣的變化。根據合約的構造函數,它可能會升級賬戶的存儲、創建其他合約賬戶、進行其他消息調用等。當執行初始化合約的代碼時,它使用gas。交易不允許使用比剩余gas更多的gas。如果存在這樣的情況,執行遇到gas不足的異常,然后退出。如果交易因為gas不足異常而退出,那么,狀態會立刻復原到交易之前到那個點。發送人不會收到gas退款,該gas已在之前執行中用完。但是,如果發送人用交易發送任何Ether價值,即使合約創建失敗,Ether價值也會被退回。如果初始化代碼執行成功,會支付最終的成功創建合約的成本。這是存儲成本,支付費用跟所創建合約代碼的大小成正比,這里也沒有免費午餐。如果沒有足夠的剩余gas來支付最終的成本,交易再次出現gas不足的異常,并中止。如果一切都順利,我們目前為止沒有異常,則剩余的未使用的gas會退還給交易的最初發送人,由此被改變的狀態也允許持續存在。消息調用
以太坊未確認交易為121,258筆:金色財經消息,據OKLink數據顯示,以太坊未確認交易121,258筆,當前全網算力為398.43TH/s,全網難度為5.30P,當前持幣地址為55,756,797個,同比增加167,740個,24h鏈上交易量為3,002,129.54ETH,當前平均出塊時間為13s。[2021/3/3 18:12:23]
消息調用的執行跟合約創建的執行類似,不過存在一些差異。消息調用執行并不包括任何init代碼,因為沒有創建新的賬戶,但是,如果數據由交易發送人提供,則它可以包含輸入數據。一旦執行,消息調用還有額外的組件,組件包含了輸出數據,如果接下來的執行需要該數據,它會被使用。跟合約創建一樣,如果因為gas不足或交易無效,消息調用退出,那么,所使用的gas不會退還給最初的調用者。相反,所有剩余的未使用的gas被消耗,并且狀態會復原到余額轉移之前的點。直到以太坊的最新升級之前,如果沒有系統消耗你提供的所有gas,那就無法停止或恢復交易的執行。例如,假設當調用者沒有被授權執行某些交易,你授權的合約拋出錯誤。在之前版本的以太坊,剩余的gas依然會被消耗,且沒有任何gas會被退還給發送人。但在拜占庭升級中,它包括了新的“恢復”代碼,允許合約停止執行并恢復狀態更改,而不是消耗剩余的gas,同時還能返回交易失敗的原因。如果因為還原而退出交易,則會把未使用的gas退還給發送人。執行模式
數據:以太坊沖入全球資產市值百強:據全球資產市值排行網站companiesmarketcap最新數據顯示,比特幣以6431.5億美元的市值暫列第十一位,以太坊以1277.5億美元的市值沖進前100名,目前暫列第99位。[2021/1/6 16:34:30]
到目前為止,我們已經了解到一個交易從開始到結束必須經歷的系列步驟。現在,我們來看看交易實際上是如何在VM上執行的。實際處理交易流程的部分協議是以太坊自己的虛擬機,也就是所謂的EVM。EVM是圖靈完備的虛擬機。跟其他圖靈完備的機器相比,EVM唯一的限制是它跟gas是內在綁定的。也就是說,它的計算量是受gas量內在約束的。
資料來源:CMU此外,EVM有基于堆棧的架構。堆棧計算機使用后進先出堆棧來保存臨時值。EVM中每個堆棧項的大小是256位,堆棧最大的大小為1024。EVM有內存,其中的item存儲為字尋址字節數組。內存不穩定,意味著它不是持久的。EVM還有存儲空間。跟內存不同,存儲是穩定的,同時它作為系統狀態的一部分進行維持。EVM在虛擬ROM中分別存儲程序代碼,這些代碼只能通過特別指令訪問。通過這種方式,EVM跟經典的馮·諾依曼架構不同,其中的程序代碼存儲在內存或存儲器中。
EVM也有它自己的語言:“EVM字節代碼”。當一個程序員編寫以太坊智能合約時,一般來說,會使用高階語言如Solidity。之后,我們可以將其編譯為EVM可以理解的EVM字節代碼。那么,現在開始執行。在執行特定的計算之前,處理器會確保以下的信息可用且有效:系統狀態計算用的剩余gas擁有正在執行的代碼的賬戶地址發起該執行的交易發送人的地址導致代碼執行的賬戶地址產生該執行的交易的gas價格輸入該執行的數據作為當前執行的一部分,發送價值給此賬戶要執行的機器代碼當前區塊的區塊頭當前消息調用或合約創建堆棧的深度開始執行時,內存和堆棧為空,且程序計數器為零。PC:0STACK:MEM:,STORAGE:{}之后,EVM遞歸執行交易,計算系統狀態以及每個循環的機器狀態。系統狀態只是以太坊的全球狀態。機器狀態包括:可用的gas程序計數器記憶內容內存中的活躍詞數堆棧內容從系列的最左側部分添加或刪除堆棧項。在每個循環中,從剩余gas中減少適當的gas量,并且程序計數器遞增。在每個循環結束時,有三種可能:1.機器達到異常狀態,因此必須暫停,任何更改都將被丟棄。2.序列繼續處理進入下一個循環3.機器達到受控停止假設執行并沒有達到異常狀態,也沒有達到“受控”或正常停止,則機器會生成結果狀態、執行后的剩余gas、累計子狀態以及結果輸出。我們了解了以太坊最復雜的部分之一。即使你不能完全明白,也沒關系。除非你要從事非常深層次的工作,否則你無須理解非常細節的部分。區塊如何最終確定
以太坊JavaScript團隊發布EthereumJS虛擬機v5版本:11月26日,以太坊官方博客發文宣布,JavaScript團隊已正式發布EthereumJS VM v5版本。[2020/11/27 22:19:12]
最后,我們來看看包含眾多交易的區塊如何最終確定。當我們說“最終確定”時,它可以意味著兩種不同的東西,這取決于區塊是新的還是已有的。如果它是新區塊,我們指的是挖掘區塊要求的過程。如果它是已有區塊,那么,我們是指驗證區塊的過程。在任何一種情況下,有四個要求來實現區塊“最終性”。1)驗證ommers區塊頭中的每個ommer區塊必須是有效的區塊頭,并且在當前區塊的第六代內。2)驗證交易區塊上的使用過的gas數必須等于累積的gas,該gas被區塊中列出的交易使用過。。3)申請獎勵受益人地址被授予5Ether用于區塊挖礦。。此外,對于每個ommer,當前區塊的受益人將獲得當前區塊獎勵的額外1/32。最后,ommer區塊的受益人也會獲得特定數量的獎勵4)驗證狀態和nonce確保所有的交易和結果狀態改變得到應用,然后,在所有區塊獎勵已經被應用到最終的交易結果狀態后,定義新區塊作為狀態。通過針對存儲在區塊頭的狀態trie來檢查該最終狀態,以此進行驗證。PoW挖礦
“區塊”章節部分簡要介紹了區塊難度的概念。賦予區塊難度意義的算法叫PoW。以太坊的PoW算法稱為“Ethash”。算法正式定義如下:
動態 | 伊斯蘭金融和伊斯蘭教咨詢公司Amanie Advisors支持以太坊遵守伊斯蘭金融法:近日,伊斯蘭金融和伊斯蘭教咨詢公司Amanie Advisors在其網站發布的博客文章中宣布,該公司已與以太坊基金會合作,建立了該平臺對伊斯蘭教法的遵守。作為合作的結果,該公司發布了一篇論文,主要目的是說明以太坊遵守伊斯蘭法律,承認伊斯蘭教法支持該項目和代幣。(Cointelegraph)[2019/9/1]
其中的m是mixHash,n是nonce,Hn是新區塊頭,Hn是區塊頭的nonce,并且d是DAG,它是大的數據集。在“區塊”章節部分,我們提過區塊頭存在的各種item。其中兩個組件叫做mixHash和nonce。你可能還記得:mixHash是一個哈希值,當它跟nonce結合使用時,證明該區塊已經執行足夠的計算。nonce是一個哈希值,當它跟mixHash結合時,證明該區塊已經執行足夠的計算。PoW功能用于評估以上兩個item。使用PoW函數來計算mixHash和nonce有些復雜,我們可以用單獨文章來深入研究。但在更高的層面上,它是這樣工作的:“為每個區塊計算“種子”。該種子對于每個“epoch”都是不同的,其中每個epoch都是30,000區塊長度。對于第一個epoch,種子是一系列32字節的零的哈希。對于后續的epoch,它是之前種子哈希的哈希。這樣,使用該種子,節點可以計算偽隨機的“緩存”。”這個緩存非常有用,因為這讓“輕節點”的概念變得可行。輕節點的目的是可以讓特定的節點有能力驗證交易,但與此同時無需存儲整個區塊鏈的數據集。輕節點可以驗證交易的有效性,它只是基于這個緩存,因為緩存可以重新生成它要驗證的特定區塊。使用緩存,節點能夠生成DAG“數據集”,其中數據集中每個item依賴于來自緩存的一小部分偽隨機選擇的item。為了成為礦工,你必須生成這個全數據集;所有全數據客戶端和礦工存儲這個數據集,并且這個數據集隨著時間線性增長。礦工可以獲取隨機數據集切片,并把它們用數學函數進行一起哈希,變成“mixHash”。礦工將重復生成mixHash直到輸出低于所需的目標nonce。當輸出滿足需求,nonce被認定為有效,同時區塊被添加到鏈上。挖礦是一種安全機制總體來說,PoW的目的是用加密安全的方式證明一定量的計算已經消耗在生成某個輸出上。這是因為沒有更好的方法來找到一個隨機數,這個隨機數低于所需的閥值,而不是枚舉所有的可能性。重復應用哈希函數的輸出具有均勻分布,所以,我們可以肯定,平均來說,找到這樣一個隨機數所需的時間取決于困難閥值。難度越高,找到nonce的時間就越長。通過這種方式,PoW算法為難度概念賦予了意義,它用于確保區塊鏈的安全。區塊鏈的安全是什么意思?很簡單:我們希望的創建一個人人都可信任的區塊鏈。我們之前也提過,如果多于一條鏈存在,用戶會失去信任,因為他們不能合理地確定哪條鏈是“有效”的區塊鏈。為了讓一群用戶接受存儲在區塊鏈上的底層狀態,我們需要單一規范的區塊鏈,而這條區塊鏈人人都相信它。這就是PoW算法的作用:它確保特定區塊鏈將一直保持規范,讓它很難被攻擊者攻擊,攻擊者很難創建新的區塊來重寫交易的歷史或維持分叉。為了讓他們的區塊首先被驗證,攻擊者需要持續地在網絡中比其他人更快地算出隨機數,也因此,網絡才會相信他們的鏈是最長的鏈。這將是不可能的,除非攻擊者擁有超過一半以上的算力,也就是所謂的51%攻擊場景。
行情 | 以太坊未確認交易筆數為42487筆:根據公開數據顯示,目前以太坊的網絡未確認交易筆數為42487筆,網絡較為擁堵。[2018/7/3]
挖礦作為財富分配機制除了提供安全的區塊鏈之外,PoW也為那些耗費算力提供安全的人提供財富分配的方式。回顧一下,礦工從挖礦中獲得獎勵,包括:獲勝區塊會獲得5Ether的靜態區塊獎勵區塊中交易的gas成本包含ommers作為區塊一部分的額外獎勵PoW算法機制是安全和財富分配的方法,為了確保它是長期可持續的,以太坊努力地灌輸這兩個屬性:讓盡可能多的人可以訪問它。換句話說,人們不需要特制的或不常見的硬件來運行算法。它的目的在于讓財富分配模型盡可能開放,以讓任何人都可以通過提供一定的算力來獲得Ether的獎勵。減少任何單一節點獲取不成比例收益的可能性。任何節點如果可以獲取不成比例的收益,這也意味著該節點會擁有決定規范區塊鏈的巨大影響力。這是很麻煩的,因為它降低了網絡的安全性。在比特幣區塊鏈網絡中,與上述兩個屬性相關的一個問題是PoW算法是SHA256哈希函數。這種類型函數的弱點是使用特定的硬件會更有效率,眾所周知的是ASICs。為了減輕這個問題,以太坊選擇了的PoW算法是Ethhash,它的算法讓序列記憶很難。這意味著以太坊的算法設計讓計算隨機數需要很多內存和帶寬。對于計算機來說,大內存需求讓它很難使用內存進行平行計算來同時發現多個隨機數,同時,更高的帶寬要求讓它很難同時發現多個隨機數,即使是超高速的計算機也是如此。這就降低了中心化的風險,并為驗證節點們創建了一個更加公平的競爭環境。有一點需要注意的是,以太坊正在從一個PoW共識機制轉變為所謂的“PoS”證明。這個問題很豐富,也許在未來可以單獨文章探討。結語
這篇文章有很多內容需要消化。如果需要閱讀幾次才能理解,也是可以的,我希望以上的闡述對你有所幫助。
“ETH到了不改就活不了的絕境。”張瑋這么說的時候,幣價的下跌和ICO的失敗正給以太坊的前路蒙上一層陰影。張瑋是以太坊上的開發者,他認為這次分叉“是以太坊應對下跌的一次調整”.
1900/1/1 0:00:00頭條 世界黃金協會報告:比特幣不足以成為黃金替代品,加密貨幣不適合作為避險資產近日,世界黃金協會發布了一份報告,調查了2018年所有主要市場的情況,其中包括黃金和加密貨幣.
1900/1/1 0:00:00最近,在杭州一個建筑工地揚塵治理專項監督活動中,杭州市西湖區檢察院的檢察官們用上了“檢察區塊鏈取證設備”,只要是它拍下的東西,做任何改動都會被記錄在鏈,哪怕是旋轉一下圖片.
1900/1/1 0:00:00北京時間1月12日中午,根據Gate.io監測發現,更多的被盜資金返還其他平臺,至于具體金額,Gate.io并未透露.
1900/1/1 0:00:00這是一個不會出現在幣圈大佬盤點行列中的人物,但是當每一位想要盤點區塊鏈或者以太坊歷史時都不能繞過他.
1900/1/1 0:00:00編者按:本文來自bitcoin.com,作者:JamieRedman,譯者:星球日報茶涼,編輯:郝方舟3月7日,據bitcoin.com報道,目前東京四家最火的夜店將接受BCH支付.
1900/1/1 0:00:00