go語言間接呼叫bitdoind的RPC 實現web介面互動
阿新 • • 發佈:2018-11-12
查詢錢包餘額
檢視錢包資訊
查詢交易記錄
指定地址進行轉賬 返回雜湊值與餘額
整個過程通過go語言exec包呼叫伺服器bitcoin-cli可執行檔案
傳入對應引數返回對應資料
下面是整個程式的原始碼
//通過變數與bitcoind進行互動 func bitcoincode(s string) string { str := strings.Fields(s) var c *exec.Cmd { } switch len(str) { case 0: break case 1: c = exec.Command("/usr/local/bin/bitcoin-cli", "-testnet", str[0]) case 2: c = exec.Command("/usr/local/bin/bitcoin-cli", "-testnet", str[0], str[1]) case 3: c = exec.Command("/usr/local/bin/bitcoin-cli", "-testnet", str[0], str[1], str[2]) } var out bytes.Buffer c.Stdout = &out if err := c.Run(); err != nil { fmt.Println("Error: ", err) } fmt.Println(out.String()) return out.String() } //實現web命令及暴露埠 func run() { http.HandleFunc("/block_chain/getbalance", blockChainGetBalanec) http.HandleFunc("/block_chain/getwalletinfo", blockChainGetWalletInfo) http.HandleFunc("/block_chain/getrawtransaction", blockChainGetRawtransaction) http.HandleFunc("/block_chain/sendtoaddress", blockChainSendToaddRess) http.ListenAndServe(":8332", nil) } //實現getbalance func blockChainGetBalanec(w http.ResponseWriter, r *http.Request) { io.WriteString(w, bitcoincode("getbalance")) } //實現getwalletinfo func blockChainGetWalletInfo(w http.ResponseWriter, r *http.Request) { io.WriteString(w, bitcoincode("getwalletinfo")) } //實現getrawtransaction func blockChainGetRawtransaction(w http.ResponseWriter, r *http.Request) { blockData := r.URL.Query().Get("data") io.WriteString(w, bitcoincode(blockData)) } //實現sendtoaddress func blockChainSendToaddRess(w http.ResponseWriter, r *http.Request) { blockData := r.URL.Query().Get("data") io.WriteString(w, bitcoincode(blockData)) blockChainGetBalanec(w, r) } func main() { run() }