利用go語言獲取位元幣餘額

2021-08-25 17:01:06 字數 1561 閱讀 2793

我們輸入乙個位元幣位址,然後獲取對應位元幣位址擁有者對應的pubkey,由該公鑰檢測utxo集,獲取未花費交易,累加value,從而獲取位址對應的餘額

func (cli *cli) getbalance(address, nodeid string) 

bc := newblockchain(nodeid)

utxoset := utxoset

defer bc.db.close()

balance :=0

pubkeyhash := base58decode(byte(address))

pubkeyhash = pubkeyhash[1 : len(pubkeyhash)-4]

utxos := utxoset.findutxo(pubkeyhash)

for _, out := range utxos

fmt.printf("balance of '%s': %d\n", address, balance)

}type blockchain struct

type utxoset struct

第一步validateaddress(address)檢測位址的有效性,詳細**解釋見我的部落格

第二步從資料庫中獲取區塊鏈例項,我們將區塊鏈儲存在資料庫中,如果你沒有使用資料庫儲存,可以直接獲取區塊鏈例項,然後建立乙個utxo集合

func newblockchain(nodeid string) *blockchain 

var tip byte

db, err := bolt.open(dbfile,0600, nil)

if err != nil

err = db.update(func(tx *bolt.tx) error )

if err != nil

bc := blockchain

return &bc

}

第三步將位址變為公鑰的hash

該是由公鑰變化為位址的示意圖,從而解釋**意圖

pubkeyhash := base58decode(byte(address))   //解碼

pubkeyhash = pubkeyhash[1 : len(pubkeyhash)-4] //去掉版本號和校驗碼

第四步是找到所有的utxo

func (u utxoset) findutxo(pubkeyhash byte) txoutput }}

return

nil })

if err != nil

return utxos

}func (out *txoutput) islockedwithkey(pubkeyhash byte) bool

最後將輸出後的utxos進行遍歷,將餘額進行累加,就能夠找到餘額

用go語言實現位元幣位址校驗

隨機取乙個32位隨機數作為私鑰 利用生產的隨機數採用橢圓加密演算法生成公鑰 計算公鑰的sha256雜湊值 計算ripemd 160雜湊值 第4步結果加上版本號 位元幣為0x00 對第5步結果取兩次sha256雜湊值 取上一步結果的前四個位元組 將第7步結果加到第步的結果後面作為校驗 利用base58...

如何使用go語言搭建位元幣區塊鏈

首先我們來回顧一下區塊鏈中的一些概念 區塊 區塊鏈 交易 1.如何儲存區塊鏈資料?眾所周知,區塊鏈主要的特點就是去中心化,也就是採用分布式儲存。那麼我們如何將資料儲存在使用者本地呢?這裡採用bolt資料庫。bolt是乙個純go語言實現的鍵值資料,支援事務,介面簡單易用。2.資料如何進行編碼?當我們選...

位元幣挖礦機開發(三) go語言學習

這裡講一下project a的開始 同時測試 也會給你的操作評分評等級。還有檔案裡的兩個簡單輸出,伺服器和客戶端 分別在srunner和crunner裡 可以幫你測試自己的 是否按照要求執行。注意,上面的這些 和指令都是假設你把go語言的路徑設定在根目錄 p1 下的。how to write go ...