我們輸入乙個位元幣位址,然後獲取對應位元幣位址擁有者對應的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 ...