在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 大數(shù)據(jù)/ 區(qū)塊鏈技術(shù)(五):以太坊核心概念(一)
區(qū)塊鏈技術(shù)(十):以太坊去中心化淘寶智能合約案例
區(qū)塊鏈技術(shù)(八):以太坊公開拍賣智能合約案例
區(qū)塊鏈技術(shù)(九):以太坊非公開拍賣智能合約案例
區(qū)塊鏈技術(shù)(五):以太坊核心概念(一)
區(qū)塊鏈技術(shù)(一):Truffle開發(fā)入門
區(qū)塊鏈技術(shù)(七):以太坊投票智能合約案例
區(qū)塊鏈技術(shù)(四):區(qū)塊鏈?zhǔn)鞘裁矗?/span>
區(qū)塊鏈技術(shù)(三):智能合約入門
區(qū)塊鏈技術(shù)(二):以太坊編程語言Solidity安裝
區(qū)塊鏈技術(shù)(六):以太坊核心概念(二)

區(qū)塊鏈技術(shù)(五):以太坊核心概念(一)

以太坊虛擬機(EVM)

以太坊虛擬機(EVM)是以太坊中智能合約的運行環(huán)境。它不僅被沙箱封裝起來,事實上它被完全隔離,也就是說運行在EVM內(nèi)部的代碼不能接觸到網(wǎng)絡(luò)、文件系統(tǒng)或者其它進(jìn)程。甚至智能合約之間也只有有限的調(diào)用。

賬戶(Accounts)

以太坊中有兩類賬戶,它們共用同一個地址空間。外部賬戶,該類賬戶被公鑰-私鑰對控制。合約賬戶,該類賬戶被存儲在賬戶中的代碼控制。 外部賬戶的地址是由公鑰決定的,合約賬戶的地址是在創(chuàng)建合約時確定的(這個地址由合約創(chuàng)建者的地址和該地址發(fā)出過的交易數(shù)量計算得到,地址發(fā)出過的交易數(shù)量也被稱作"nonce")

兩類賬戶唯一的區(qū)別是:合約賬戶存儲了代碼,外部賬戶則沒有。

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

另外,每個賬戶都有一個以太幣余額(單位是"Wei"),該賬戶余額可以通過向它發(fā)送帶有以太幣的交易來改變。

交易(Transactions)

一筆交易是一條消息,從一個賬戶發(fā)送到另一個賬戶。交易可以包含二進(jìn)制數(shù)據(jù)(payload)和以太幣。

如果目標(biāo)賬戶包含代碼,該代碼和輸入數(shù)據(jù)會被執(zhí)行。

如果目標(biāo)賬戶是零賬戶(賬戶地址是0),交易將創(chuàng)建一個新合約。正如上文所講,這個合約地址不是零地址,而是由合約創(chuàng)建者的地址和該地址發(fā)出過的交易數(shù)量計算得到。創(chuàng)建合約交易的payload被當(dāng)作EVM字節(jié)碼執(zhí)行。執(zhí)行的輸出做為合約代碼被永久存儲。這意味著,為了創(chuàng)建一個合約,你不需要向合約發(fā)送真正的合約代碼,而是發(fā)送能夠返回真正代碼的代碼。

Gas

以太坊上的每筆交易都會被收取一定數(shù)量的gas,gas的目的是限制執(zhí)行交易所需的工作量,同時為執(zhí)行支付費用。當(dāng)EVM執(zhí)行交易時,gas將按照特定規(guī)則被逐漸消耗。

gas price(gas價格,以太幣計)是由交易創(chuàng)建者設(shè)置的,發(fā)送賬戶需要預(yù)付的交易費用 = gas price * gas amount。 如果執(zhí)行結(jié)束還有g(shù)as剩余,這些gas將被返還給發(fā)送賬戶。

無論執(zhí)行到什么位置,一旦gas被耗盡(比如降為負(fù)值),將會觸發(fā)一個out-of-gas異常。當(dāng)前調(diào)用幀所做的所有狀態(tài)修改都將被回滾。

存儲,主存和棧(Storage, Memory and the Stack)

每個賬戶有一塊持久化內(nèi)存區(qū)域被稱為存儲。其形式為key-value,key和value的長度均為256比特。在合約里,不能遍歷賬戶的存儲。相對于另外兩種,存儲的讀操作相對來說開銷較大,修改存儲更甚。一個合約只能對它自己的存儲進(jìn)行讀寫。

第二個內(nèi)存區(qū)被稱為主存。合約執(zhí)行每次消息調(diào)用時,都有一塊新的,被清除過的主存。主存可以以字節(jié)粒度尋址,但是讀寫粒度為32字節(jié)(256比特)。操作主存的開銷隨著其增長而變大(平方級別)。

EVM不是基于寄存器,而是基于棧的虛擬機。因此所有的計算都在一個被稱為棧的區(qū)域執(zhí)行。棧最大有1024個元素,每個元素256比特。對棧的訪問只限于其頂端,方式為:允許拷貝最頂端的16個元素中的一個到棧頂,或者是交換棧頂元素和下面16個元素中的一個。所有其他操作都只能取最頂?shù)膬蓚€(或一個,或更多,取決于具體的操作)元素,并把結(jié)果壓在棧頂。當(dāng)然可以把棧上的元素放到存儲或者主存中。但是無法只訪問棧上指定深度的那個元素,在那之前必須要把指定深度之上的所有元素都從棧中移除才行。

下一篇文章將繼續(xù)介紹以太坊核心概念。

本文并非本人原創(chuàng),文章來自于@rink1969, @jan, @shaoping的翻譯和校對,系統(tǒng)的介紹以太坊繞不開這些概念,因此轉(zhuǎn)載過來,特此感謝。

原文:http://wangxiaoming.com/blog/2016/05/07/blockchain-tech-ethereum-concept/