以太坊状态转移函数
以太坊的状态转换函数:APPLY(S,TX) -> S’,可以定义如下:
- 检查交易的格式是否正确(即有正确数值)、签名是否有效和随机数是否与发送者账户的随机数匹配。如否,返回错误。
- 计算交易费⽤:fee=GasLimit * GasPrice,并从签名中确定发送者的地址。从发送者的账户中减去交易费⽤和增加发送者的随机数。如果账户余额不⾜,返回错误。
- 设定初值GAS = GasLimit,并根据交易中的字节数减去⼀定量的燃料值。
- 从发送者的账户转移价值到接收者账户。如果接收账户还不存在,创建此账户。如果接收账户是⼀个合约,运⾏合约的代码,直到代码运⾏结束或者燃料⽤完。
- 如果因为发送者账户⾜够的钱或者代码执⾏耗尽燃料导致价值转移失败,⽣成out-of-gas异常,恢复原来的状态,但是还需要⽀没有付交易费⽤,交易费⽤加⾄矿⼯账户。