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

買賣虛擬貨幣

儲存也需要費用。

gas不僅用於支付計算步驟,也用於支付儲存費用。儲存所需的總體費用跟使用32位元組的最小倍數成正比。

儲存的費用有一些細微差別。比如,既然不斷增加的儲存增大了所有節點的以太坊狀態資料庫的大小,那麼有動機來保持小的資料儲存量。因此,如果交易具有可以清除儲存中的條目的步驟,則免除執行該操作的費用,並且為了釋放儲存空間還可以退還費用。

費用有什麼目的?

以太坊執行的一個重要方面是網路執行的每個操作都同時受到每個全節點的影響。然而,在以太坊虛擬機器上的計算步驟是非常昂貴的。

因此,以太坊智慧合約最適用於簡單任務,例如執行簡單的商業邏輯或驗證簽名和其他加密物件,而不是更加複雜的用途,如檔案儲存、郵件、機器學習等,這些會給網路帶來壓力。徵收費用可以防止使用者過度使用網路。

以太坊是圖靈完備的語言。簡言之,圖靈機是能夠模擬任何計算機演算法的機器。這允許迴圈,並使以太坊容易受到停頓問題的影響,這個問題讓你無法確定程式是否會無限執行下去。如果沒有費用,惡意行為者能夠輕易嘗試破壞網路,方式是透過在交易中執行無限迴圈卻不用擔心成本。因此,費用可以保護網路免受惡意攻擊。你可能會想,“為什麼我們還需要為儲存付費?” 好吧,就像計算一樣,以太坊網路上的儲存也有成本,整個網路不得不為此承受負擔。

交易和訊息

我們注意到以太坊是基於交易的狀態機。換言之,發生在不同賬戶之間的交易推動著以太坊的全球狀態從一個狀態轉換到另外一個狀態。

在最基本的意義上,交易是加密簽名的指令,它由外部賬戶生成,並序列化,然後提交到區塊鏈上。有兩類交易:訊息呼叫和合約建立(即建立新的以太坊合約的交易)。

所有交易包含如下部分,無論其型別如何:

  • Nonce(隨機數):交易傳送人傳送的交易數量的計數。(藍狐筆記譯註:跟比特幣的Nonce概念不同。)

  • Gasprice:交易傳送人願意為執行交易所需的每單位gas支付的Wei的數量。

  • Gaslimit:交易傳送人願意為執行交易支付的最大gas數量。數量是設定並預付的,在任何計算完成之前確定。

  • To:接收人的地址。如是建立合約的交易,合約賬戶地址還不存在,所以使用的是空值。

  • Value:從傳送人轉移到接收人的Wei總量。在建立合約的交易中,這個值作為新建立合約賬戶的初始餘額。

  • V,r,s:用於生成簽名,該簽名可以標識交易的傳送人。

  • Init:僅用於建立合約的交易。它是EVM程式碼片段,可用來初始化新的合約賬戶。Init只允許一次,然後被拋棄。首次執行init時,它會返回賬戶程式碼的正文,這段程式碼與合約賬戶產生永久關聯關係。

  • 資料:僅用於訊息呼叫的可選欄位。它是指訊息呼叫的輸入資料(即引數)。比如,如果智慧合約充當域名註冊的服務,對合約的呼叫可能需要輸入欄位如域名或IP地址。

在賬戶的章節,我們瞭解到交易,如訊息呼叫或建立合約的交易,這些交易總是由外部賬戶啟動並提交到區塊鏈。另外一個思考的方式是,正是這些交易在外部世界和內部以太坊之間起到橋樑作用。

但這不意味著這些合約不能跟其他合約溝通。存在於以太坊狀態範圍內的合約能夠與其他同樣範圍內的合約進行對話。它們溝通的方式是透過“訊息”或“內部交易”。我們可以將訊息或內部交易看作與交易類似,主要區別在於它們不是由外部賬戶生成。相反,它們由合約生成。它們是虛擬物件,與交易不同,它們不會序列化並且只存在於以太坊執行環境中。

當一個合約傳送內部交易到另外一個合約,接收人合約賬戶的關聯程式碼就會執行。

需要注意的是,內部交易或訊息並不包含gaslimit。因為gaslimit是由原始合約的外部建立者來確定的,即是一些外部賬戶。外部賬戶設定的gaslimit必須足夠高,以執行交易,這些交易包括了任何子執行,子執行也是由交易導致的。比如,合約到合約的訊息。

如果,在交易和訊息的鏈中,特定的訊息執行耗盡了gas,訊息的執行會還原,同時還原的還包括任何由執行觸發的後續訊息。然而,父執行無需還原。


--未完待續---


------

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

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

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

免責聲明:

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

推荐阅读

;