收藏本页
返回顶部

币海首页> 要闻资讯 > 文章

每日科普:解读以太坊黄皮书(中)

来源:以太坊爱好者    Aries 2019-10-14 15:00 星期一 1,184
币海网微博
微信扫一扫

账户状态

以太坊中有两种账户类型:外部所有账户(Externally Owned Accounts 简称 EOA)以及合约账户。我们用来互相收发以太币、部署智能合约的账户就是 EOA 账户,而部署智能合约时自动生成的账户则是合约账户。每一个智能合约都有其独一无二的以太坊账户。

账户状态反映了一个以太坊账户的各项信息。例如,它存储了当前账户以太币的余额信息、当前账户发送过的交易数量…每一个账户都有账户状态。

下面就来看看账户状态中都包括什么:

nonce

从此地址发送出去的交易数量(如果当前为 EOA 账户)或者此账号产生的合约创建操作(现在先别管合约创建操作是什么)。

balance

此账号所拥有的以太币数量(以 Wei 计量)。

storageRoot

账户存储树的根节点哈希值(稍后介绍账户存储是什么)。

codeHash

对于合约账户,就是此账户存储 EVM 代码的哈希值。对于 EOA 账户,此处留空。

账户状态中不容忽视的一个细节是,上述对象在内的所有对象都可变(除了 codeHash)。举例来说,当一个账户向其他账户发送以太币时,除了 nonce 会增加,账户的余额也会相应改变。

而 codeHash 的不可变性使得,如果部署了有漏洞的智能合约,也无法修复更新此合约。对应的,只能部署一个新合约(而有漏洞的版本会一直存在于区块链上)。这也是为什么使用 Truffle 进行智能合约的开发和部署十分必要,并且用 Solidity 编程时要遵循 最佳实践 的要求。

账户存储树是保存与账户相关联数据的结构。该项只有合约账户才有,而在 EOA 中, storageRoot 留空、 codeHash 则是一串空字符串的哈希值。所有智能合约的数据都以 32 字节映射的形式保存在账户存储树中。此处不再赘述账户状态树如何维持合约数据。如果读者对其内部实现感兴趣,强烈建议阅读这篇文章。账户状态中的 storageRoot 区域负责维持账户存储树根节点哈希值。

-账户状态与账户存储树-

交易

交易推动当前状态到下一状态的转变。在以太坊中有三种交易:

1.EOA 之间传输值的交易(例如,改变发送方和接收方余额大小)。

2.发送消息来调用合约的交易(例如,通过发送消息调用来触发 setter 方法,以设置合约中的值)。

3.用于部署合约的交易(由此创建了合约账户)。

(从技术角度来讲,前两种交易是一样的…它们都是通过消息调用来改变账户状态的交易,只不过一个是 EOA 账户,一个是合约账户。此处将交易分为三种是为了方便读者的理解。)

交易由以下部分组成:

nonce

此账户发出的交易序号数(校对注:可以粗略理解为“这是该账户的第几笔交易”)。

gasPrice

执行此交易、进行计算时为每单位 gas 所支付的费用(以 Wei 计量)。

gasLimit

执行此交易时可以使用的最大 gas 数量。

to

如果此交易用于传送以太币,此处为接收以太币的 EOA 地址。

如果此交易用于向合约发送消息(例如,调用智能合约中的方法),此处为合约的地址。

如果此交易用于创建合约,此处值为空。

value

如果此交易用于收发以太币,此处为发往接收账户的、以 Wei 计量的代币数量。

如果此交易用于发送对合约的消息调用,此处为向接收此消息智能合约所给付的 Wei 数量。

如果此交易用于创建合约,此处为合约初始化时账户存放的以 Wei 计量的以太币数量。

v, r, s

在交易的密码学签名中用到的值,可以用于确定交易的发送方。

data(只用于价值传输以及向智能合约发送消息调用)

发送消息调用时附带的输入数据(例如,假设你想要执行智能合约中的 setter 方法,数据区就应该包括 setter 方法的标识符,以及你想要设定的参数值)。

init(只用于合约创建)

用于初始化合约的 EVM 代码。

别想着一下子就把这些概念消化完… 必须对以太坊的内部机理有更深的认识才真正理解、使用像 data 区、init 区这样的概念。

点击关注币海启行微信公众号,了解更多。

币海启行微信公众号

版权信息
来源:以太坊爱好者
版权:转载
原文链接:https://mp.weixin.qq.com/s/SLCHuvfRjP0Kp7xtR4wPfw
作者:Lucas Saldanha
编译发布:Aries
声明:
此文为转载内容,不代表币海启行网的观点和立场,仅供参考。

相关文章

用户评论 (0)

0/140

关注支持

内容合作 / 友情链接

服务与应用

币海公众号
扫一扫,关注币海
币海网

区块链行业资讯链媒[币海资讯官网]

  CopCopright @币海网 · 前海宏创投资(深圳)有限公司 · 版权所有