• Go 实现 Omni Rpc 接口


    Go 实现 Omni Rpc 接口交互

    1. Rpc 接口实现

    package net

    import (
        "bytes"
        "errors"
        "io/ioutil"
        "net/http"
        "time"


        "github.com/astaxie/beego"
    )


    var userName string
    var userPwd string


    var url string = "http://172.30.143.249:8336"


    func InitRpc() {
        //数据库类别
        omni := "omni"
        userName = beego.AppConfig.String(omni + "::RpcUsername")
        userPwd = beego.AppConfig.String(omni + "::RpcPassword")


        url = "http://" + beego.AppConfig.String(omni+"::RpcIp") + ":" + beego.AppConfig.String(omni+"::RpcPort")
    }


    // 发送POST请求
    // url:请求地址,data:POST请求提交的数据,contentType:请求体格式,如:application/json
    // content:请求放回的内容
    func HttpRpcPost(jsonStr string) (content string, err error) {
        if userName == "" || userPwd == "" {
            return "", errors.New("you mast do InitRpcAuthUser set user and password.")
        }


        req, err := http.NewRequest("POST", url, bytes.NewBuffer([]byte(jsonStr)))
        req.Header.Set("Content-Type", "application/json")
        req.SetBasicAuth(userName, userPwd)
        if err != nil {
            panic(err)
        }
        defer req.Body.Close()


        client := &http.Client{Timeout: 30 * time.Second}
        resp, error := client.Do(req)
        if error != nil {
            panic(error)
        }
        defer resp.Body.Close()


        result, _ := ioutil.ReadAll(resp.Body)
        content = string(result)
        return content, nil
    }


    2. 使用

    package models

    import (
        "XXX/net" // 工具类库导入
        "encoding/json"
        "strconv"
    )

    /// 获取块中所有交易 hash
    type OmniRpcBlockTransactionsHashResult struct {
        Result []string // 响应结果,交易 hash 数组
        Error  string   // 错误日志
    }

    /// 获取交易详情
    type OmniRpcTransactionResult struct {
        Result OmniRpcTransactionsInfo // 响应结果,交易详情
        Error  string                  // 错误日志
    }

    type OmniRpcTransactionsInfo struct {
        Txid             string // 交易 hash
        Fee              string // 手续费
        Sendingaddress   string // 发送地址 ":"17rExRiMaJGgHPVuYjHL21mEhfzbRPRkui",
        Referenceaddress string // 接收地址":"1BKpa19m5Xy9SvSzC5djPWtCfbuynSDwmb",
        Ismine           bool   //":false,
        Version          int    // ":0,
        Type_int         int    // 币种类型 31 为 USDT
        Type             string // ":"DEx Accept Offer",
        Propertyid       int    // ":2,
        Divisible        bool   //":true,
        Amount           string // 交易量 ":"10.00000000",
        Valid            bool   // ":true,
        Blockhash        string // 块 hash ":"0000000000000000afb6922317c026b31b582c1096074670518bf6dd18df365c",
        Blocktime        int    // 交易成交时间 ":1391336004,
        Positioninblock  int    //":32,
        Block            int    // 块高度 ":283729,
        Confirmations    int    //":135470
    }

    /// 获取节点详情
    type OmniRpcInfoResult struct {
        Result OmniRpcInfo // 响应结果,交易详情
        Error  string      // 错误日志
    }

    // Omni 节点信息
    type OmniRpcInfo struct {
        Omnicoreversion_int int    // ":70000000,
        Omnicoreversion     string // ":"0.7.0",
        Mastercoreversion   string // ":"0.7.0",
        Bitcoincoreversion  string // ":"0.18.1",
        Block               int    // 最高块的块高度
        Blocktime           int    // 最高块的交易时间
        Blocktransactions   int    // 最高块的交易数量
        Totaltrades         int    // ":77,
        Totaltransactions   int    // 当前节点总交易次数
    }

    // 获取节点信息
    func getOmniInfo() (*OmniRpcInfoResult, error) {
        jsonStr := "{"jsonrpc":"2.0", "method": "omni_getinfo"}"
        resultStr, err := net.HttpRpcPost(jsonStr)

        if err != nil {
            return nil, err
        }

        var result = OmniRpcInfoResult{}
        inputErr := json.Unmarshal([]byte(resultStr), &result)
        return &result, inputErr
    }

    /// 根据块高度获取交易 hash
    func getOmniBlockTransactionsHash(blockHeight int) (*OmniRpcBlockTransactionsHashResult, error) {
        jsonStr := "{"jsonrpc":"2.0", "method": "omni_listblocktransactions", "params":[" + strconv.Itoa(blockHeight) + "]}"
        resultStr, err := net.HttpRpcPost(jsonStr)

        if err != nil {
            return nil, err
        }

        var result = OmniRpcBlockTransactionsHashResult{}
        inputErr := json.Unmarshal([]byte(resultStr), &result)
        return &result, inputErr
    }

    /// 根据 txid 获取交易详情
    func getOmniTransaction(txid string) (*OmniRpcTransactionResult, error) {
        jsonStr := "{"jsonrpc":"2.0", "method": "omni_gettransaction", "params":["" + txid + ""]}"
        resultStr, err := net.HttpRpcPost(jsonStr)

        if err != nil {
            return nil, err
        }

        var result = OmniRpcTransactionResult{}
        inputErr := json.Unmarshal([]byte(resultStr), &result)
        return &result, inputErr
    }
    }

  • 相关阅读:
    eNSP——配置Trunk接口
    eNSP——VLAN基础配置和Access
    C# WinForm多线程(三)---- Control.Invoke[转]
    C# 在字符串前加了$,这个 dollar 符号有什么用?美元符号是什么意思
    软件工程领域工程硕士培养方案
    C#中SHOWDIALOG()与SHOW()的区别_模态与非模态_销毁与释放
    HTTP状态代码code(错误代码集合)返回错误代码集合
    OpenCV26HoughCircles 霍夫圆变换原理及圆检测
    OpenCV25-判断一个点是否在多边形的内部_点多边形测试pointPolygonTest
    OpenCV24霍夫直线变换API介绍_3.1.0
  • 原文地址:https://www.cnblogs.com/wf-l5201314/p/11969792.html
Copyright © 2020-2023  润新知