成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

以太坊源碼分析—賬戶的管理

WilsonLiu95 / 2001人閱讀

摘要:前言以太坊是一個(gè)巨大的狀態(tài)機(jī),在網(wǎng)絡(luò)中,每一個(gè)全節(jié)點(diǎn)都保存著以太坊狀態(tài)機(jī)的全部歷史,只要愿意,我們可以查詢到任何時(shí)刻的狀態(tài)黃皮書(shū)中,而賬戶狀態(tài)便是其中的狀態(tài),這部分功能由主要由代碼中的包提供基本概念賬戶地址在以太坊中,無(wú)論是外部賬戶還是合約

前言

以太坊是一個(gè)巨大的狀態(tài)機(jī),在網(wǎng)絡(luò)中,每一個(gè)全節(jié)點(diǎn)都保存著以太坊狀態(tài)機(jī)的全部歷史,只要愿意,我們可以查詢到任何時(shí)刻的狀態(tài)(黃皮書(shū)中World State),而賬戶狀態(tài)便是其中的狀態(tài),這部分功能由主要由代碼中的state包提供

基本概念 賬戶地址

在以太坊中,無(wú)論是外部賬戶還是合約賬戶,都以一個(gè)160bit的數(shù)組表示地址,它是由特定橢圓曲線上的一個(gè)點(diǎn)表示的公鑰經(jīng)過(guò)Keccak Hash算法截取而來(lái)

關(guān)于橢圓曲線,請(qǐng)點(diǎn)擊橢圓曲線
關(guān)于賬戶之間的區(qū)別,請(qǐng)點(diǎn)擊外部賬戶和合約賬戶的區(qū)別

賬戶內(nèi)容

以太坊中,一個(gè)賬戶用Account表示

type Account struct {
    Nonce      uint64
    Balance   *big.Int
    Root       common.Hash
    CodeHash   []byte
}

各個(gè)字段的意義如下:

Nonce:賬戶發(fā)起交易的次數(shù)

Balance:賬戶的余額

Root[合約]:代表存儲(chǔ)空間的一棵MPT樹(shù)的根節(jié)點(diǎn)的Hash,可以簡(jiǎn)單地理解為一片存儲(chǔ)空間,可以用它存儲(chǔ)一些數(shù)據(jù)到區(qū)塊鏈上,關(guān)于MPT,可以查看這篇博文。

CodeHash[合約]:合約代碼的Hash值

注:[合約]表示該項(xiàng)僅對(duì)合約賬戶有效

賬戶在區(qū)塊鏈中的位置


所有賬戶以MPT樹(shù)的形式組織起來(lái),根節(jié)點(diǎn)的Hash值存儲(chǔ)在區(qū)塊HeaderstateRoot字段

賬戶管理 stateDB & stateObject

在以太坊賬戶管理中,stateObject 表示一個(gè)賬戶的動(dòng)態(tài)變化,結(jié)構(gòu)中的關(guān)鍵字段如下

type stateObject struct {
    address common.Address
    data   Account
    db     *StateDB
    trie   Trie
    code  Code
    ......
}

address 為賬戶的160 bits 地址

data 為賬戶的信息,即前面提到的Account結(jié)構(gòu)

trie 合約賬戶的存儲(chǔ)空間的緩存,我們可以從由dataRoot從底層數(shù)據(jù)庫(kù)中讀取這棵樹(shù),但鑒于我們會(huì)經(jīng)常使用,所以把它緩存起來(lái)也不是一個(gè)壞主意

code 合約代碼的緩存,作用和trie類(lèi)似

stateDB 表示所有賬戶的動(dòng)態(tài)變化,它管理stateObject,結(jié)構(gòu)中的關(guān)鍵字段如下:

type stateDB struct {
    db    Database
    trie   Trie
    stateObjects  map[common.Address] * stateObject
    ......
}

db 以太坊底層數(shù)據(jù)庫(kù)接口,賬戶的信息都是從數(shù)據(jù)庫(kù)中讀取的

trie 所有賬戶組織而成的的MPT樹(shù)的實(shí)例,從它里面可以讀取以太坊所有賬戶

stateObjects 管理的所有需要修改stateObject

賬戶操作

在執(zhí)行區(qū)塊中的交易時(shí),我們可能需要修改某些賬戶的信息(比如增減余額,或者修改合約賬戶代碼) ,這時(shí)我們按以下步驟進(jìn)行操作

stateDB找到賬戶對(duì)應(yīng)的stateObject,若不存在,則從trie樹(shù)中,通過(guò)讀取底層數(shù)據(jù)庫(kù)構(gòu)建新的stateObject,訪問(wèn)過(guò)的stateObject會(huì)緩存起來(lái)

對(duì)stateObject賬戶進(jìn)行操作,可能會(huì)涉及對(duì)余額的操作,如AddBalance()調(diào)用,也有可能對(duì)存儲(chǔ)空間的操作,如SetState(),或者對(duì)合約代碼的操作如SetCode()

在區(qū)塊構(gòu)建完成時(shí),計(jì)算每個(gè)賬戶新的MPT樹(shù)的各個(gè)節(jié)點(diǎn)Hash,并存入數(shù)據(jù)庫(kù),完成修改。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/24381.html

相關(guān)文章

  • 以太源碼分析—交易執(zhí)行

    摘要:前言以太坊是一個(gè)運(yùn)行智能合約的平臺(tái),被稱(chēng)作可編程的區(qū)塊鏈,允許用戶將編寫(xiě)的智能合約部署在區(qū)塊鏈上運(yùn)行。交易執(zhí)行以太坊是一個(gè)基于交易的狀態(tài)機(jī),一筆交易可以使以太坊從一個(gè)狀態(tài)切換到另一個(gè)狀態(tài),即交易的執(zhí)行伴隨著狀態(tài)的改變。 前言 以太坊是一個(gè)運(yùn)行智能合約的平臺(tái),被稱(chēng)作可編程的區(qū)塊鏈,允許用戶將編寫(xiě)的智能合約部署在區(qū)塊鏈上運(yùn)行。而運(yùn)行合約的主體便是以太坊虛擬機(jī)(EVM) 區(qū)塊 交易 合約 ...

    Lowky 評(píng)論0 收藏0
  • 以太源碼分析—挖礦與共識(shí)

    摘要:下面來(lái)看看具體是怎么實(shí)現(xiàn)接口的可以看到,啟動(dòng)了多個(gè)線程調(diào)用函數(shù),當(dāng)有線程挖到時(shí),會(huì)通過(guò)傳入的通道傳出結(jié)果??梢钥吹皆谥饕h(huán)中,不斷遞增的值,調(diào)用函數(shù)計(jì)算上面公式中的左邊,而則是公式的右邊。 前言 挖礦(mine)是指礦工節(jié)點(diǎn)互相競(jìng)爭(zhēng)生成新區(qū)塊以寫(xiě)入整個(gè)區(qū)塊鏈獲得獎(jiǎng)勵(lì)的過(guò)程.共識(shí)(consensus)是指區(qū)塊鏈各個(gè)節(jié)點(diǎn)對(duì)下一個(gè)區(qū)塊的內(nèi)容形成一致的過(guò)程在以太坊中, miner包向外提供挖...

    walterrwu 評(píng)論0 收藏0
  • 以太智能合約開(kāi)發(fā)第二篇:理解以太相關(guān)概念

    摘要:原文發(fā)表于以太坊智能合約開(kāi)發(fā)第二篇理解以太坊相關(guān)概念很多人都說(shuō)比特幣是區(qū)塊鏈,以太坊是區(qū)塊鏈。它是以太坊智能合約的運(yùn)行環(huán)境。是由以太坊節(jié)點(diǎn)提供。以太坊社區(qū)把基于智能合約的應(yīng)用稱(chēng)為去中心化的應(yīng)用。 原文發(fā)表于:以太坊智能合約開(kāi)發(fā)第二篇:理解以太坊相關(guān)概念 很多人都說(shuō)比特幣是區(qū)塊鏈1.0,以太坊是區(qū)塊鏈2.0。在以太坊平臺(tái)上,可以開(kāi)發(fā)各種各樣的去中心化應(yīng)用,這些應(yīng)用構(gòu)成了以太坊的整個(gè)生態(tài)...

    yibinnn 評(píng)論0 收藏0
  • 理解以太DApp及開(kāi)發(fā)工具

    摘要:一理解以太坊工具以太坊有很多工具,隨著時(shí)間的推移有些會(huì)過(guò)時(shí),但早期的網(wǎng)絡(luò)文章會(huì)有介紹,從而與目前的工具造成時(shí)差上的迷惑,有些工具是隨著工程化的需要逐漸流行起來(lái)的。可視化的以太坊錢(qián)包,可以管理賬戶發(fā)布合約。 一、理解以太坊工具 以太坊有很多工具,隨著時(shí)間的推移有些會(huì)過(guò)時(shí),但早期的網(wǎng)絡(luò)文章會(huì)有介紹,從而與目前的工具造成時(shí)差上的迷惑,有些工具是隨著工程化的需要逐漸流行起來(lái)的。有必要梳理以下:...

    tinna 評(píng)論0 收藏0
  • 以太創(chuàng)世區(qū)塊與鏈配置載入分析

    摘要:本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接以太坊創(chuàng)世區(qū)塊與鏈配置載入分析,原文已更新,請(qǐng)讀者前往原文閱讀。以太坊允許通過(guò)創(chuàng)世配置文件來(lái)初始化創(chuàng)世區(qū)塊,也可使用選擇使用內(nèi)置的多個(gè)網(wǎng)絡(luò)環(huán)境的創(chuàng)世配置。再準(zhǔn)備兩個(gè)以太坊賬戶,以便在創(chuàng)世時(shí)存入資產(chǎn)。 本文首發(fā)于深入淺出區(qū)塊鏈社區(qū)原文鏈接:以太坊創(chuàng)世區(qū)塊與鏈配置載入分析,原文已更新,請(qǐng)讀者前往原文閱讀。 創(chuàng)世區(qū)塊作為第零個(gè)區(qū)塊,其他區(qū)塊直接或間接引用到...

    姘擱『 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<