以太坊核心概念開發如何用數字貨幣引領區塊鏈

2021-08-08 23:30:57 字數 1527 閱讀 3110

以太坊虛擬機器(evm)

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

賬戶(accounts)

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

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

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

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

交易(transactions)

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

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

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

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

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

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

儲存,主存和棧(storage, memory and the stack)

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

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

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

以太坊核心概念

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

以太坊核心概念(一)

以太坊虛擬機器 evm 是以太坊中智慧型合約的執行環境。它不僅被沙箱封裝起來,事實上它被完全隔離,也就是說執行在evm內部的 不能接觸到網路 檔案系統或者其它程序。甚至智慧型合約之間也只有有限的呼叫。以太坊中有兩類賬戶,它們共用同乙個位址空間。外部賬戶,該類賬戶被公鑰 私鑰對控制。合約賬戶,該類賬戶...

如何使用Meteor開發以太坊Dapp

meteor非常適合的5個理由 如果還沒有安裝meteor curl sh 接下來新增web3包 meteor add ethereum web3我還建議新增以下包 ethereum tools 這個包為ethtools物件提供了一組格式轉換函式和ether的模板助手。ethereum elemen...