摘要:前言以太坊是一個巨大的狀態機,在網絡中,每一個全節點都保存著以太坊狀態機的全部歷史,只要愿意,我們可以查詢到任何時刻的狀態黃皮書中,而賬戶狀態便是其中的狀態,這部分功能由主要由代碼中的包提供基本概念賬戶地址在以太坊中,無論是外部賬戶還是合約
前言
以太坊是一個巨大的狀態機,在網絡中,每一個全節點都保存著以太坊狀態機的全部歷史,只要愿意,我們可以查詢到任何時刻的狀態(黃皮書中World State),而賬戶狀態便是其中的狀態,這部分功能由主要由代碼中的state包提供
基本概念 賬戶地址在以太坊中,無論是外部賬戶還是合約賬戶,都以一個160bit的數組表示地址,它是由特定橢圓曲線上的一個點表示的公鑰經過Keccak Hash算法截取而來
關于橢圓曲線,請點擊橢圓曲線
關于賬戶之間的區別,請點擊外部賬戶和合約賬戶的區別
以太坊中,一個賬戶用Account表示
type Account struct { Nonce uint64 Balance *big.Int Root common.Hash CodeHash []byte }
各個字段的意義如下:
Nonce:賬戶發起交易的次數
Balance:賬戶的余額
Root[合約]:代表存儲空間的一棵MPT樹的根節點的Hash,可以簡單地理解為一片存儲空間,可以用它存儲一些數據到區塊鏈上,關于MPT,可以查看這篇博文。
CodeHash[合約]:合約代碼的Hash值
注:[合約]表示該項僅對合約賬戶有效
賬戶在區塊鏈中的位置
所有賬戶以MPT樹的形式組織起來,根節點的Hash值存儲在區塊Header的stateRoot字段
在以太坊賬戶管理中,stateObject 表示一個賬戶的動態變化,結構中的關鍵字段如下
type stateObject struct { address common.Address data Account db *StateDB trie Trie code Code ...... }
address 為賬戶的160 bits 地址
data 為賬戶的信息,即前面提到的Account結構
trie 合約賬戶的存儲空間的緩存,我們可以從由data的Root從底層數據庫中讀取這棵樹,但鑒于我們會經常使用,所以把它緩存起來也不是一個壞主意
code 合約代碼的緩存,作用和trie類似
stateDB 表示所有賬戶的動態變化,它管理stateObject,結構中的關鍵字段如下:
type stateDB struct { db Database trie Trie stateObjects map[common.Address] * stateObject ...... }
db 以太坊底層數據庫接口,賬戶的信息都是從數據庫中讀取的
trie 所有賬戶組織而成的的MPT樹的實例,從它里面可以讀取以太坊所有賬戶
stateObjects 管理的所有需要修改的stateObject
賬戶操作在執行區塊中的交易時,我們可能需要修改某些賬戶的信息(比如增減余額,或者修改合約賬戶代碼) ,這時我們按以下步驟進行操作
從stateDB找到賬戶對應的stateObject,若不存在,則從trie樹中,通過讀取底層數據庫構建新的stateObject,訪問過的stateObject會緩存起來
對stateObject賬戶進行操作,可能會涉及對余額的操作,如AddBalance()調用,也有可能對存儲空間的操作,如SetState(),或者對合約代碼的操作如SetCode()
在區塊構建完成時,計算每個賬戶新的MPT樹的各個節點Hash,并存入數據庫,完成修改。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/24381.html
摘要:前言以太坊是一個運行智能合約的平臺,被稱作可編程的區塊鏈,允許用戶將編寫的智能合約部署在區塊鏈上運行。交易執行以太坊是一個基于交易的狀態機,一筆交易可以使以太坊從一個狀態切換到另一個狀態,即交易的執行伴隨著狀態的改變。 前言 以太坊是一個運行智能合約的平臺,被稱作可編程的區塊鏈,允許用戶將編寫的智能合約部署在區塊鏈上運行。而運行合約的主體便是以太坊虛擬機(EVM) 區塊 交易 合約 ...
摘要:下面來看看具體是怎么實現接口的可以看到,啟動了多個線程調用函數,當有線程挖到時,會通過傳入的通道傳出結果。可以看到在主要循環中,不斷遞增的值,調用函數計算上面公式中的左邊,而則是公式的右邊。 前言 挖礦(mine)是指礦工節點互相競爭生成新區塊以寫入整個區塊鏈獲得獎勵的過程.共識(consensus)是指區塊鏈各個節點對下一個區塊的內容形成一致的過程在以太坊中, miner包向外提供挖...
摘要:原文發表于以太坊智能合約開發第二篇理解以太坊相關概念很多人都說比特幣是區塊鏈,以太坊是區塊鏈。它是以太坊智能合約的運行環境。是由以太坊節點提供。以太坊社區把基于智能合約的應用稱為去中心化的應用。 原文發表于:以太坊智能合約開發第二篇:理解以太坊相關概念 很多人都說比特幣是區塊鏈1.0,以太坊是區塊鏈2.0。在以太坊平臺上,可以開發各種各樣的去中心化應用,這些應用構成了以太坊的整個生態...
摘要:一理解以太坊工具以太坊有很多工具,隨著時間的推移有些會過時,但早期的網絡文章會有介紹,從而與目前的工具造成時差上的迷惑,有些工具是隨著工程化的需要逐漸流行起來的。可視化的以太坊錢包,可以管理賬戶發布合約。 一、理解以太坊工具 以太坊有很多工具,隨著時間的推移有些會過時,但早期的網絡文章會有介紹,從而與目前的工具造成時差上的迷惑,有些工具是隨著工程化的需要逐漸流行起來的。有必要梳理以下:...
摘要:本文首發于深入淺出區塊鏈社區原文鏈接以太坊創世區塊與鏈配置載入分析,原文已更新,請讀者前往原文閱讀。以太坊允許通過創世配置文件來初始化創世區塊,也可使用選擇使用內置的多個網絡環境的創世配置。再準備兩個以太坊賬戶,以便在創世時存入資產。 本文首發于深入淺出區塊鏈社區原文鏈接:以太坊創世區塊與鏈配置載入分析,原文已更新,請讀者前往原文閱讀。 創世區塊作為第零個區塊,其他區塊直接或間接引用到...
閱讀 3380·2023-04-26 01:40
閱讀 3089·2021-11-24 09:39
閱讀 1400·2021-10-27 14:19
閱讀 2643·2021-10-12 10:11
閱讀 1304·2021-09-26 09:47
閱讀 1846·2021-09-22 15:21
閱讀 2704·2021-09-06 15:00
閱讀 890·2021-08-10 09:44