go语言间接调用bitdoin-cli的RPC 实现web界面交互

查询钱包余额

查看钱包信息

 查询交易记录

指定地址进行转账 返回哈希值与余额

 整个过程通过go语言exec包调用服务器bitcoin-cli可执行文件 

传入对应参数返回对应数据

 

同样可以在命令行使用curl进行查询

 

下面是整个程序的源码

//通过变量与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()
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值