一文看懂合约账户是什么

1、账户的分类

当我们将智能合约部署到链上之后,它会用一个地址来表示(称为合约地址),这是一个以太坊网络中的一种帐户:合约账户

账户在以太坊中是非常重要的概念,任何事情都离不开它。以太坊中有两类账户:

(1)外部用户账户(EOAs)——该类账户由公钥-私钥对控制(由人控制)。

(2)合约账户CA:Contract Account)——该类账户由存储在账户中的代码控制。

外部用户账户和合约账户,它们都使用相同的地址格式来表示,在EVM层面是一样的,地址格式为:0xea674fdde714fd979de3edf0f56aa9716b898ec8,是一个20字节的16进制数。

它们之间还有一个不可忽视的区别:只有外部用户账户可以发起交易(主动行为),而合约账户只能被动地响应操作,并且所有的手续费(Gas)必须由外部账户支付

2、账户的各种状态

无论账户类型如何,账户状态都由4个基本组成部分组成:

  • nonce :如果账户是一个外部用户账户,nonce代表从此账户地址发送的交易序号。如果账户是一个合约账户,nonce代表此账户创建的合约序号。以太坊中有两种nonce , 一种是账号nonce——表示一个账号的交易数量;一种是工作量证明nonce——一个用于计算满足工作量证明的随机数。

  • balance:此地址拥有的以太币余额数量。单位是Wei1 ether=10^18 wei。当向地址发送带有以太币的交易时,balance会随之改变。外部用户账户和合约账户都可以有余额;合约账户使用代码管理所拥有的资金,外部用户账户则是使用私钥签名来花费资金;合约账户存储了代码,外部用户账户则没有。

  • storageRoot:Merkle Patricia树的根节点哈希值。Merkle树会将此账户存储内容的哈希值进行编码,默认是空值。

  • codeHash:此账户代码的哈希值。对于合约账户,它是合约代码被哈希计算之后的结果作为codeHash保存。对于外部用户账户,codeHash 是一个空字符串的哈希值。

3、示例

一文看懂合约账户是什么

给TA打赏
共{{data.count}}人
人已打赏
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
搜索