以太坊是如何運作的?(七)

買賣虛擬貨幣

區塊難度

區塊的“難度”用於實現一致性,它可以讓驗證區塊所花費時間基本一致。創世區塊難度是131,072,此後用特別公式來計算每個區塊的挖礦難度。如果某個區塊的驗證速度快於之前的區塊,以太坊協議會增加出塊難度。

出塊難度影響nonce,這是一個雜湊值,礦工必須在挖區塊時使用PoW演算法計算出來。區塊難度和nonce的聯絡在數學上可以形式化為:


其中Hd是難度。

找到滿足難度閥值的nonce的唯一方法是使用PoW演算法來窮盡所有可能性。找到解的期望時間跟難度成正比——難度越高,找到nonce的就越難,驗證區塊越難,這會導致驗證新區塊花費更長時間。所以,透過調整區塊的難度,協議可以控制驗證區塊需要耗費的時間。

另外一方面,如果驗證時間變長,協議就會降低難度。透過這種方式,驗證時間自我調整,以此保持一個恆定速率——平均每15秒出一個區塊。

交易執行

我們來到以太坊協議中最複雜的部分之一:交易的執行。假定你傳送一個交易到以太坊網路進行處理,將以太坊的狀態轉換為包含你的交易會發生什麼?

首先,所有交易必須滿足一組初始的設定要求才能執行。這些包括:

  • 交易必須是格式正確的RLP。“RLP”代表“遞迴長度字首”,是一種資料格式,它用於編碼二進位制資料的巢狀陣列。RLP是以太坊用於序列化物件的格式。

  • 有效的交易簽名

  • 有效交易nonce。回想一下,一個賬戶的nonce是從該賬戶傳送過來交易計數。為了有效,交易nonce必須等於傳送者賬戶的nonce。

  • 交易的gas limit必須等於或大於交易使用的固有gas。固有gas包括:

1.為執行交易預先定義的成本21,000的gas

2.與交易一起傳送的資料的gas費用(每位元組資料或程式碼相當於零時則是4gas的費用,每非零位元組的資料或程式碼是68gas費用)

3.如果交易是建立合約的交易,則額外增加32,000gas

  • 傳送人的賬戶餘額必須有足夠的Ether覆蓋“預定”gas成本,這是傳送人必須支付的。“預定”gas成本的計算是簡單的:首先,交易的gas limit 乘以交易的gas 價格,可以得出最大的gas成本。其次,最大的成本被加入到總值中,總值是指從傳送者轉移到接收者的總價值。

如果交易滿足所有以上的有效性要求,我們繼續下一步。

首先,我們從傳送人的餘額中扣除預定的執行成本,並將傳送人的賬戶的nonce增加1以計入當前的交易。此時,我們可以算出剩餘的gas,它們作為交易的總gas limit減去使用過的固有gas。

接下來,交易開始執行。在交易的執行過程中,以太坊跟蹤“子狀態”。該子狀態是記錄交易過程中產生的資訊的方法,這些資訊在交易完成後被立即需要。具體來說,它包括:

  • 自毀集:在交易完成後被拋棄的一組賬戶(如果有)

  • 日誌系列:虛擬機器程式碼執行的歸檔及可索引的檢查點。

  • 退還餘額:交易後退還給傳送人賬戶的金額。還記得我們提到的以太坊儲存需要花費,並且傳送人會為清理儲存而退款?以太坊會使用退款計數器來跟蹤此事。退款計數器從零開始,每次合約清除儲存時會遞增。

接下來,處理交易要求的各種計算。

一旦交易要求的所有步驟都被處理完畢,假定沒有無效狀態,則透過確定要退還給傳送人的未使用的gas金額來實現最終狀態。除了未使用的gas,傳送人還可以從上面提到的“退款餘額”中獲得一些補貼。

一旦傳送人獲得退款:

  • gas的Ether已經給到礦工

  • 交易使用的gas被新增到區塊gas計數器(它跟蹤區塊中所有交易使用的總gas,並在驗證區塊時有用處)

  • 在自毀集中的所有賬戶都將被刪除(如果有的話)


最後,我們留下新的狀態和一組交易建立的日誌。現在我們已經介紹了交易執行的基礎知識,讓我們來看建立合約的交易和訊息呼叫之間的一些區別。


--未完待續---


------

風險警示:藍狐筆記所有文章都不構成投資推薦投資有風險,投資應該考慮個人風險承受能力,建議對專案進行深入考察,慎重做好自己的投資決策。

通往區塊鏈的新世界:關注“藍狐筆記”區塊鏈公眾號:lanhubiji 

或加入藍狐筆記的知識星球:https://t.zsxq.com/iaQNnIq

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;