以太坊(二)——账户

外部账户 (Externally owned account, EOA )
        本地产生一个公私钥对,私钥掌握账户的控制权,外部账户包括账户余额(balance)、计数器(nonce),也叫普通账户。

• 有对应的以太币余额
• 可发送交易(转币或触发合约代码),所有的交易只能由以太坊外部账户发起。
• 由用户私钥控制
• 没有关联代码

合约账户 (Contract accounts)

        也叫内部账户(用户账户/普通账户)
• 有对应的以太币余额
• 有关联代码
• 由代码控制
• 可通过交易或来自其它合约的调用消息来触发代码执行
• 执行代码时可以操作自己的存储空间,也可以调用其它合约。
        合约账户不是通过公私钥对控制的,除了balance(余额)和nonce(交易次数)之外还有code(代码)、storage(相关状态-存储,包括每个状态的取值),一个合约可以调用另外一个合约,所以要通过nonce值记录一下调用的次数,但是合约账户不能主动发起一个交易,以太坊规定,所有的交易只能由外部账户发起,外部账户发起一个交易如果调用了一个合约账户,这个合约账户可以发送一个message调用另外一个合约,但是它不能自己发起一个交易。

以太坊交易(Transaction)

        交易及签名的数据包,由EOA发送到另一个账户,交易包括以下内容:
• 接收方地址
• 发送方签名
• 金额(VALUE)
• 数据(DATA,可选)
• START GAS
• GAS PRICE

消息(Message)

        是合约之间的通信方式,合约可以向其它合约发送“消息”,消息可以进行转账(相当于交易,会记录在内部交易中);如果不进行转账,是不会被序列化的(虚拟对象),只存在于以太坊执行环境(EVM)中,可以看作函数调用。包括的内容和交易类似:
• 消息发送方(因为没有签名,所以需要消息发送方地址)
• 消息接收方
• 金额(VALUE)
• 数据(DATA,可选)
• START GAS

合约账户的调用


        创建一个合约会返回一个地址,知道合约的地址,就可以调用这个合约,调用的过程当中状态会发生变化,所以存储(storage)就会变。

猜你喜欢

转载自blog.csdn.net/qq_40213907/article/details/127150434