從0到1簡易區塊鏈開發手冊V0.5-實現余額查詢
阿新 • • 發佈:2018-08-23
def nba getaddr 查詢 key dex ani puts += 七. 查詢余額
其實這個章節的一些知識點在轉賬交易那一章節均有所涉及,所以,查詢余額這個功能相對而言比較簡單,只要熟悉了UTXO模型,加上對交易流程的了解之後,對查詢余額基本上已經有了思路。
1.命令行代碼
func (cli *CLI) GetBalance(address string) { bc := GetBlockChainObject() if bc == nil { fmt.Println("沒有BlockChain,無法查詢。。") os.Exit(1) } defer bc.DB.Close() utxoSet :=&UTXOSet{bc} total:=utxoSet.GetBalance(address) fmt.Printf("%s,余額是:%d\n", address, total) }
- 獲取區塊鏈對象
- 獲取utxoSet對象
- 通過utxoSet的GetBalance方法獲得對應的余額
2. 查詢余額代碼
GetBalance
func (utxoSet *UTXOSet) GetBalance(address string) int64 { utxos := utxoSet.FindUnspentUTXOsByAddress(address) var total int64 for _, utxo := range utxos { total += utxo.Output.Value } return total }
- 通過FindUnspentUTXOsByAddress獲得utxo的數組對象utxos
- 通過對utxos進行遍歷得到utxo對象
- 將utxo對象的Output的Value屬性值進行累加得到余額
3.通過地址獲取未花費utxo數組
FindUnspentUTXOsByAddress
func (utxoSet *UTXOSet) FindUnspentUTXOsByAddress(address string) []*UTXO { var utxos []*UTXO err := utxoSet.BlockChian.DB.View(func(tx *bolt.Tx) error { b := tx.Bucket([]byte(utxosettable)) if b != nil { /* 獲取表中的所有的數據 key,value key:TxID value:TxOuputs */ c := b.Cursor() for k, v := c.First(); k != nil; k, v = c.Next() { txOutputs := DeserializeTxOutputs(v) for _, utxo := range txOutputs.UTXOs { //txid, index,output if utxo.Output.UnlockWithAddress(address) { utxos = append(utxos, utxo) } } } } return nil }) if err != nil { log.Panic(err) } return utxos }
4.代碼測試
4.1 獲取所有地址
$ ./mybtc getaddresslists
返回結果
錢包地址列表為:
1DHPNHKfk9uUdog2f2xBvx9dq4NxpF5Q4Q
1HtJve4MwW4LVko3yjkj3UUvzXsuGHb1Yq
4.2 查詢余額
$ ./mybtc getbalance -address 1DHPNHKfk9uUdog2f2xBvx9dq4NxpF5Q4Q
返回結果
1DHPNHKfk9uUdog2f2xBvx9dq4NxpF5Q4Q,余額是:12
分析
1.創建創世區塊,該地址獲得10元
2.第一筆轉賬,給地址1HtJve4MwW4LVko3yjkj3UUvzXsuGHb1Yq轉賬2元, 剩余8元,得到10元獎勵,余額為18元
3.第二筆轉賬,給地址1HtJve4MwW4LVko3yjkj3UUvzXsuGHb1Yq轉賬3元, 剩余15元,得到10元獎勵,余額為25元
4.第三筆轉賬,給地址1HtJve4MwW4LVko3yjkj3UUvzXsuGHb1Yq轉賬23元,剩余2元,得到10元獎勵,余額為12元
10元獎勵是代碼中設定每個區塊的CoinBase交易給轉賬用戶的,實際比特幣場景是給礦工的,這裏是測試場景,請大家勿要混淆。
./mybtc getbalance -address 1HtJve4MwW4LVko3yjkj3UUvzXsuGHb1Yq
返回結果
1HtJve4MwW4LVko3yjkj3UUvzXsuGHb1Yq,余額是:28
分析
2 + 3 + 23 = 28元
到此,我們查詢余額的功能基本完畢。
從0到1簡易區塊鏈開發手冊V0.5-實現余額查詢