一分鐘瞭解以太坊(系列三):賬戶與燃料的那些概念上的小事

買賣虛擬貨幣
以太坊是一個與比特幣網路類似的分散式狀態機。在這個狀態機中,所有在網路上構建、交易或製作的東西都必須對網路狀態達成一致。整個過程由經過修改的Merkle Patricia Tree(簡稱為“MPT”)資料管理方法完成。Merkle Patricia Tree(又稱為Merkle Patricia Trie)是一種經過改良的、融合了默克爾樹和字首樹兩種樹結構優點的資料結構,是以太坊中用來組織管理賬戶資料、生成交易集合雜湊的重要資料結構。

它是Patricia Tree和Merkle Tree的組合,以太坊規範使用此方法來儲存狀態中發生的任何更改行為。Merkle Tree是一種資料結構,其中每個非葉節點(雜湊0和雜湊1)是其各自子節點(雜湊0-0、雜湊0-1)的雜湊。葉節點L1、L2、L3和L4是儲存實際資料的最底層節點。從下圖中可看到,頂部雜湊實際上是其子雜湊的組合。

Merkle Tree(Merkle Trie)允許以簡潔方式表示大量資料,這一點非常適合區塊鏈的各項應用。該過程接受任意數量的雜湊,並將其它們表示為單個雜湊,其中頂部雜湊用作整個資料集的狀態展示。

而Patricia Tree(Patricia Trie)是一種資料結構,它允許共享相同字首的節點以鍵為路徑來共享相同路徑。它的節點在樹中的位置是由其鍵的內容所決定的,即其key值被編碼在根節點到該節點的路徑中。如下所示,t分支下面的所有內容都指向to或te;而te節點可以進一步分解為tea或 ted或ten。此外,特定路徑中的組合鍵將建立地址。例如,非葉節點inn的鍵值為1159。

Merkle Patricia Tree以一種簡化的方式將金鑰和雜湊結合在一起。如下圖所示,從上到下,給每個向左的路徑加一個0,給每個向右的路徑加一個1。也就是說,深藍色的圓點對應鍵010,而淡藍色的圓點對應11。由此可見,最上面的雜湊實際上是下面所有雜湊的總的表現形式。如果要驗證深藍色圓點,就必須合併其所有父節點的雜湊,直到頂部雜湊得到有效更新為止。

每個線段對應16個可以新增到鍵上的可能結果,並用十六進位制表示。為了避免出現太多未使用的節點,MPT引入了特殊的節點型別。如果某些線段擁有公共的對應鍵,就用特殊節點來表示。

總而言之,以太坊的管理結構允許帳戶輕鬆驗證它們是否具有與狀態根本身相同的狀態。當執行任務時,狀態根將被更新,此時挖礦器或驗證器必須驗證它們的雜湊在頂部是否相同。其中需要注意兩種型別的帳戶:合約帳戶和外部帳戶。

合約賬戶

合約賬戶(contract accounts),由智慧合約的程式碼控制。每個合約帳戶都有四個可以修改以太坊網路狀態的屬性:

1. 一個隨機數:顯示從該帳戶傳送的交易數量
2. 資產負債表:用於顯示賬戶餘額等。
3. 程式碼:寫在以太坊虛擬機器上的位元組碼
4. 儲存:最多可攜帶256位值

前面的文章說過,智慧合約其實是允許使用者根據一組預先確定的規則進行交易的程式,因此不需要第三方參與執行。

因此,智慧合約的所有權完全在合約程式碼中體現,因此需要合約建立者實施操作(如:銷燬合約,取出所有以太幣,阻止別人撤資等等)

若智慧合約的安全性無法得到確保,則很容易被惡意攻擊甚至完全失去合約控制權。

外部賬戶

外部合約包括公鑰和私鑰。這些賬戶有兩個主要屬性:臨時賬戶和餘額賬戶。因為這些合約帳戶由私鑰控制,沒有關聯的程式碼,所以程式碼和儲存為空。

以太坊的加密方法與比特幣類似,金鑰透過橢圓曲線數字簽名演算法建立,私鑰可以派生公鑰,但公鑰不能派生私鑰。公鑰就好比是銀行帳號,私鑰為密碼,登入上帳戶才能驗證賬戶的所有者。

同時,外部賬戶可以轉移或觸發合約賬戶,或與其他外部賬戶直接進行交易。合約帳戶也可以呼叫不同的函式,也就是跟蹤函式。“跟蹤”是指執行事務的一個步驟。

從理論上講,透過使用跟蹤函式,一個合約可以呼叫許多其他合約,但是過程中的計算量非常大。在一個共享和分散的平臺上,使用者如何能夠在呼叫其他合約的同時保持資源的平衡?為什麼不能寫一個無限迴圈函式來摧毀整個系統?

答案就是:燃料。

燃料

Gas字面中譯是:瓦斯、汽油,是一種燃料。智慧合約中的每個操作碼(也稱為EVM和機器可讀的指令)都有一個燃料價格(gasprice)。以太坊有獨立的虛擬機器處理交易,虛擬機器執行是根據交易中確定的一個一個的操作指令進行逐個處理,而每個操作指令都有明文規定的Gas消耗量。以gwei定價的燃料用於分配以太坊虛擬機器(EVM)的資源,以便諸如合約帳戶之類的分散應用程式能夠自主操作。使用單獨的燃料單元可以區分事務的實際值和函式執行所需的計算成本。

為了避免合約中的錯誤引起不可預計的燃料消耗,使用者需要在傳送交易時設定允許消耗的燃料上限,即gasLimit。“gasLimit”指的是你願意為某一筆交易支付的最高燃料金額。雖然有些操作對燃料的要求很少,比如push、swap和dupe,但也有一些操作需要大量的計算能力和大量的儲存空間,因而價格更高。一般來說,更高的燃料限制意味著執行事務中步驟更多,這就導致了函式的開銷很大。

舉個例子,如果貓王想把100元轉給比爾蓋茨,他必須支付5元的手續費。雖然100元是轉移的實際價值,但5元是執行交易的成本。那麼,如果貓王把50個以太幣轉給比爾蓋茨,燃料價格(以gwei計算)可能是1/100,000個以太幣(等價)。

燃料的作用比單純使用計算能發揮的作用更大,還能獲取更多的儲存空間。

這創造了一個真正的自由市場,因為釋出者和礦工能夠自行設定服務價格以及要不要提供服務。

這種價格設定當然是雙向的:如果網上的礦工只接受高價的操作,就會導致沒有人再使用網路。而如果礦工接受所有交易,則會因使用者太多而導致網路超載。

因此,傳送方不僅可以設定一般燃料限制,還有塊的燃料限制。塊的燃料限制設定了區塊鏈控制代碼計算吞吐量的絕對上限。有了燃料,網路使用者就不用再擔心出現駭客無限迴圈合約和破壞網路的行為。

總體來說,以太坊是一個區塊鏈(也稱為分散式狀態機),它包含儲存在Merkle Patricia Tree中不同型別的帳戶,其中一些賬戶是由操作碼構成的合約。網路上的使用者用燃料支付操作碼所需金額,這個步驟是傳送交易的必需條件。

免責聲明:

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

推荐阅读

;