一、账户状态stateTrie
Block.Header.Root 就是stateRoot,是一棵PMT树,存储了所有账户的当前最新的状态信息,比如账户余额。
a path is always: sha3(ethereumAddress) and a value is always: rlp(ethereumAccount)
Root是一个hash值,通过Root去数据库中可以找到 stateTrie的根节点,然后通过sha3(ethereumAddress)得出要最终查找的path,再根据path可以一步步的找到每个账户rlp(ethereumAccount)
Account账户余额分为账户余额和账户代币余额两种类型
type Account struct {
Nonce uint64 //Nonce:账户发起交易的次数
Balance *big.Int //该账户的余额
Root common.Hash //存储树MPT,它是所有合约数据存储的地方
CodeHash []byte //合约代码的Hash值 注:[合约]表示该项仅对合约账户有效
}
每个用户都对应一个StateObject,StateObject对应就是在stateTrie中的位置,表示一个账户的动态变化结果值
type stateObject s