一、账户状态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 struct {
address common.Address
addrHash common.Hash // hash of ethereum address
本文介绍了如何从零开始开发区块链应用,重点讲解了以太坊账户余额查询的步骤。首先,解释了Block.Header.Root(stateRoot)与stateTrie的关系,以及如何通过账户地址在PMT树中查找账户状态。接着,详细阐述了查询余额的代码思路,包括获取区块高度、遍历区块、交易信息以及判断地址类型。最后,分别讨论了获取账户余额和待处理余额的代码实现,并给出了完整代码示例。
订阅专栏 解锁全文
12

被折叠的 条评论
为什么被折叠?



