1. 程式人生 > >go語言間接呼叫bitdoind的RPC 實現web介面互動

go語言間接呼叫bitdoind的RPC 實現web介面互動

查詢錢包餘額

檢視錢包資訊

 查詢交易記錄

指定地址進行轉賬 返回雜湊值與餘額

 整個過程通過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()
}