亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

從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

灯塔市| 杨浦区| 根河市| 应城市| 万州区| 仁寿县| 武胜县| 罗田县| 和林格尔县| 新密市| 油尖旺区| 北流市| 晋江市| 西华县| 化隆| 台湾省| 界首市| 龙里县| 平阳县| 习水县| 健康| 怀宁县| 宁乡县| 涪陵区| 宜阳县| 鄱阳县| 双辽市| 柳林县| 南投县| 罗定市| 正镶白旗| 黔西| 称多县| 武宁县| 河西区| 墨竹工卡县| 伊吾县| 巩义市| 康马县| 丹江口市| 汤原县|