以太坊核心概念(一)

2021-09-16 23:32:54 字數 1415 閱讀 4760

以太坊虛擬機器(evm)是以太坊中智慧型合約的執行環境。它不僅被沙箱封裝起來,事實上它被完全隔離,也就是說執行在evm內部的**不能接觸到網路、檔案系統或者其它程序。甚至智慧型合約之間也只有有限的呼叫。

以太坊中有兩類賬戶,它們共用同乙個位址空間。外部賬戶,該類賬戶被公鑰-私鑰對控制。合約賬戶,該類賬戶被儲存在賬戶中的**控制。 外部賬戶的位址是由公鑰決定的,合約賬戶的位址是在建立合約時確定的(這個位址由合約建立者的位址和該位址發出過的交易數量計算得到,位址發出過的交易數量也被稱作」nonce」)

兩類賬戶唯一的區別是:合約賬戶儲存了**,外部賬戶則沒有。

每個賬戶有乙個key-value形式的持久化儲存。key,value的長度都是256bit。

另外,每個賬戶都有乙個以太幣餘額(單位是「wei」),該賬戶餘額可以通過向它傳送帶有以太幣的交易來改變。

一筆交易是一條訊息,從乙個賬戶傳送到另乙個賬戶。交易可以包含二進位制資料(payload)和以太幣。

如果目標賬戶包含**,該**和輸入資料會被執行。

如果目標賬戶是零賬戶(賬戶位址是0),交易將建立乙個新合約。正如上文所講,這個合約位址不是零位址,而是由合約建立者的位址和該位址發出過的交易數量計算得到。建立合約交易的payload被當作evm位元組碼執行。執行的輸出做為合約**被永久儲存。這意味著,為了建立乙個合約,你不需要向合約傳送真正的合約**,而是傳送能夠返回真正**的**。

以太坊上的每筆交易都會被收取一定數量的gas,gas的目的是限制執行交易所需的工作量,同時為執行支付費用。當evm執行交易時,gas將按照特定規則被逐漸消耗。

gas price(gas**,以太幣計)是由交易建立者設定的,傳送賬戶需要預付的交易費用 = gas price * gas amount。 如果執行結束還有gas剩餘,這些gas將被返還給傳送賬戶。

無論執行到什麼位置,一旦gas被耗盡(比如降為負值),將會觸發乙個out-of-gas異常。當前呼叫幀所做的所有狀態修改都將被回滾。

每個賬戶有一塊持久化記憶體區域被稱為儲存。其形式為key-value,key和value的長度均為256位元。在合約裡,不能遍歷賬戶的儲存。相對於另外兩種,儲存的讀操作相對來說開銷較大,修改儲存更甚。乙個合約只能對它自己的儲存進行讀寫。

第二個記憶體區被稱為主存。合約執行每次訊息呼叫時,都有一塊新的,被清除過的主存。主存可以以位元組粒度定址,但是讀寫粒度為32位元組(256位元)。操作主存的開銷隨著其增長而變大(平方級別)。

evm不是基於暫存器,而是基於棧的虛擬機器。因此所有的計算都在乙個被稱為棧的區域執行。棧最大有1024個元素,每個元素256位元。對棧的訪問只限於其頂端,方式為:允許拷貝最頂端的16個元素中的乙個到棧頂,或者是交換棧頂元素和下面16個元素中的乙個。所有其他操作都只能取最頂的兩個(或乙個,或更多,取決於具體的操作)元素,並把結果壓在棧頂。當然可以把棧上的元素放到儲存或者主存中。但是無法只訪問棧上指定深度的那個元素,在那之前必須要把指定深度之上的所有元素都從棧中移除才行。

以太坊核心概念

是以太坊中智慧型合約的執行環境 以太坊中有兩類賬戶 外部賬戶 合約賬戶。兩類賬戶唯一的區別是 合約賬戶儲存了 外部賬戶則沒有 一筆交易是一條訊息,從乙個賬戶傳送到另乙個賬戶 以太坊上的每筆交易都會被收取一定數量的gas,gas的目的是限制執行交易所需的工作量,同時為執行支付費用 每個賬戶有一塊持久化...

3 3 以太坊 以太坊核心詞彙詳解

以太坊虛擬機器 以太坊中智慧型合約的執行環境。賬戶外部賬戶 被公鑰 私鑰對控制 合約賬戶 合約賬戶被儲存在賬戶中的 控制 外部賬戶與合約賬戶區別 內部結構 訊息 類似於位元幣上的交易與位元幣交易的不同點 以太坊的訊息可以由外部實體或者合約建立,位元幣的交易只能外部建立 以太坊的訊息可以包含資料 如果...

3 1 以太坊 以太坊背景與概念概述

以太坊產生的背景 現象 以太坊創始人看到了位元幣區塊鏈技術上的缺陷,希望能夠讓區塊鏈技術可以應用在加密貨幣之外的領域。願景 以太坊希望成為像tcp ip協議這樣的標準,能讓以太坊區塊鏈協議內建程式語言,相容各種區塊鏈的應用,不用像以前那樣各自為政分別定義自己的區塊鏈協議 什麼是以太坊 以太坊 eth...