中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

從0到1簡易區塊鏈開發手冊V0.5-實現余額查詢

發布時間:2020-06-18 18:33:08 來源:網絡 閱讀:36209 作者:暗黑魔君 欄目:編程語言

七. 查詢余額

其實這個章節的一些知識點在轉賬交易那一章節均有所涉及,所以,查詢余額這個功能相對而言比較簡單,只要熟悉了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元

到此,我們查詢余額的功能基本完畢。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

彰化县| 伊金霍洛旗| 蚌埠市| 抚宁县| 汶上县| 青冈县| 卢湾区| 长白| 临桂县| 德州市| 娄烦县| 甘肃省| 区。| 抚州市| 芮城县| 福泉市| 四平市| 长武县| 梅河口市| 丹巴县| 都江堰市| 囊谦县| 沧州市| 泰兴市| 郁南县| 甘洛县| 阜阳市| 成武县| 新昌县| 卓资县| 云林县| 澄江县| 宜昌市| 和龙市| 新和县| 九寨沟县| 元谋县| 青岛市| 汾阳市| 正阳县| 上高县|