本文将讲解账户余额的统计。
1 getbalance 账户层面的余额统计 主干流程
// zp 为账户名
btcctl --simnet --rpcuser=rpcuser --rpcpass=rpcpass --wallet getbalance zp
var account uint32
// 根据账户名获取当前钱包,BIP44格式下的accountnumber
account, err = w.AccountNumber(waddrmgr.KeyScopeBIP0044, accountName)
if err != nil {
return nil, err
}
// 根据account number获取余额。
bals, err := w.CalculateAccountBalances(account, int32(*cmd.MinConf))
if err != nil {
return nil, err
}
balance = bals.Spendable
}
// 返回BTC格式的余额。
return balance.ToBTC(), nil
其中 CalculateAccountBalances的核心流程是
2 获取所有UTXO的逻辑:
(1)从未被消费的bucket中获取未消费输出
(2)从已经打包,但是未被包含进的bucket中获取未消费输出。
3 参考文献
btcwallet 源码 btcwallet version 0.7.0-alpha
4 其他
本文是《循序渐进比特币》的第十篇-《btcwallet(四)账户余额统计》。
如果有疑问,可以直接留言,也可以关注公众号 “链人成长chainerup” 提问留言,或者加入知识星球“链人成长”~