查看: 32|回复: 0

[互联网的那点事] 兄弟连区块链交易所基础开发(2)通过接口查询区块链各个币种的提币情况-bch

发表于 2018-8-9 10:48:02
  兄弟连教育携手清华系尹成团队成立区块链学院(http://bt.itxdl.cn/)并开设Go全栈与区块链培训课程。该课程旨在助力用户认知并跟随清华微软谷歌区块链专家级名师学习相关技术,并通过海量的企业级实战项目深度掌握颠覆性区块链技术,并为国内区块链孵化更多优质的专业型人才。
  代码如下
  packagemain
  import(
          "encoding/json"
          "fmt"
          "github.com/buger/jsonparser"
          "github.com/levigross/grequests"
  )
  //HTTPGet.
  funcHTTPGet(urlstring,requestOptions*grequests.RequestOptions)(response[]byte,errerror){
          httpResponse,err:=grequests.Get(url,requestOptions)
          iferr==nil{
          ifhttpResponse.StatusCode==200{
          response=httpResponse.Bytes()
          }
          }
          return
  }
  //BchBlocksChainCheck根据提币的数量,提币方地址以及目标方地址来检查提币是否已经confirmed.
  //返回值有两个:提币状态以及已收到的提币数量(扣除手续费)
  funcBchBlocksChainCheck(withdrawAmountfloat64,originalAddressstring,targetAddressstring)(statusstring,netWithdrawAmountfloat64,confirmationsint64,errerror){
          targetURL:=fmt.Sprintf("https://bch-chain.api.btc.com/v3/address/%s/tx",targetAddress)
          bData,err:=HTTPGet(targetURL,nil)
          iferr!=nil{
          fmt.Println("error:HTTPGettargetURLfailed.")
          return
          }
          //fmt.Println(string(bData))
          _,err=jsonparser.ArrayEach(bData,func(value[]byte,dataTypejsonparser.ValueType,offsetint,eerror){
          _outs,_,_,e:=jsonparser.Get(value,"outputs")
          _confirmations,_,_,e:=jsonparser.Get(value,"confirmations")
          _fees,_,_,e:=jsonparser.Get(value,"fee")
          fees,e:=jsonparser.GetInt(_fees)
          confirmations,e=jsonparser.GetInt(_confirmations)
          status="online"
          jsonparser.ArrayEach(_outs,func(out[]byte,dataTypejsonparser.ValueType,offsetint,eerror){
          _addr,_,_,e:=jsonparser.Get(out,"addresses")
          _value,_,_,e:=jsonparser.Get(out,"value")
          varoutputs[]string
          e=json.Unmarshal(_addr,&outputs)
          v,e:=jsonparser.GetFloat(_value)
          ifoutputs[0]==targetAddress&&v==withdrawAmount{
          fmt.Println("fees:",fees)
          status="confirmed"
          netWithdrawAmount=v
          }
          })
          })
          return
  }
  funcmain(){
          status,netReceiveAmount,confirmations,err:=BchBlocksChainCheck(1567646685,"1JnCVng5JaVSmPxtm3wjkUXVDv2HXZBJJw","15um5NFHM39xPdnnxwbEY4LeSMC9CE9cky")
          iferr!=nil{
          fmt.Println("requestfailed...")
          return
          }
          fmt.Println(fmt.Sprintf("status:%s,net_withdraw_amount:%f,confirmations:%d",status,netReceiveAmount,confirmations))
  }





回复

使用道具 举报