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
}
}

原文地址:https://www.cnblogs.com/wf-l5201314/p/11969792.html

时间: 2024-09-29 18:49:12

Go 实现 Omni Rpc 接口的相关文章

Omni RPC 接口使用

1. RPC 要求使用 POST 请求 2. 交互协议为 Json 格式 3. 请求地址组成 http://[节点 ip]:[rpc 端口号],如:http://172.30.143.249:8336 4. 添加接口认证 5. 请求参数 {"jsonrpc":"2.0", "method": "omni_getinfo", "params":[283729]} jsonrpc:也可不用管(参数可有可无).

转载-- http接口、api接口、RPC接口、RMI、webservice、Restful等概念

http接口.api接口.RPC接口.RMI.webservice.Restful等概念 收藏 Linux一叶 https://my.oschina.net/heavenly/blog/499661 发表于 1年前 阅读 1422 收藏 28 点赞 0 评论 0 摘要: 在这之前一定要好好理解一下接口的含义,我觉得在这一类中接口理解成规则很恰当 在这之前一定要好好理解一下接口的含义,我觉得在这一类中接口理解成规则很恰当.         http接口:基于HTTP协议的开发接口.这个并不能排除没

Thrift写RPC接口

Thrift总结(二)创建RPC服务 前面介绍了thrift 基础的东西,怎么写thrift 语法规范编写脚本,如何生成相关的语言的接口.不清楚的可以看这个<Thrift总结(一)介绍>.做好之前的准备工作以后,下面就开始如何用Thrift写RPC接口. 如何用Thrift写RPC接口 1. 打开之前下载的thrift 源码,thrift-0.10.0\lib\csharp\src ,编译生成Thrift.dll 文件. 2. 新建一个空白解决方案命名为HelloThrift.在解决方案根目录

http接口、api接口、RPC接口、RMI、webservice、Restful等概念

在这之前一定要好好理解一下接口的含义,我觉得在这一类中接口理解成规则很恰当.         http接口:基于HTTP协议的开发接口.这个并不能排除没有使用其他的协议.         api接口:API(Application Programming Interface)应用程序编程接口,应用也包括网络应用程序,就像api文档基本上就是使用说明书,API接口可以简单理解成"应用程序使用接口".          RPC接口:Remote Procedure Calls 远程过程调用

调用RPC接口出现错误:Yar_Client_Transport_Exception (16) curl exec failed &#39;Timeout was reached&#39;

在做项目是,调用RPC接口时,调用别人给的RPC接口会有超时的情况,出现如下错误: Yar_Client_Transport_Exception (16) curl exec failed 'Timeout was reached' 原因是RPC那边处理逻辑复杂,导致耗时较长.所以要加上不超时的处理逻辑: $client->SetOpt(YAR_OPT_TIMEOUT, 0); // 设置RPC不超时 加上这句就可以调用成功了! 调用RPC接口出现错误:Yar_Client_Transport_

rpc接口和http接口的区别和联系

1 什么是http接口 http接口是基于http协议的post和get接口. 2 什么是rpc接口 rpc接口就相当于调用本地接口一样调用远程服务的接口. 3 常用的rpc框架 thrift 自动代码生成,生成rpc的客户端和服务器端. dubbo brpc 等 原文地址:https://www.cnblogs.com/hustdc/p/10166515.html

rpc接口调用以太坊智能合约

rpc接口调用以太坊智能合约 传送门: 柏链项目学院 ??在以太坊摸爬滚打有些日子了,也遇到了各种各样的问题.这几天主要研究了一下如何通过rpc接口编译.部署和调用合约.也遇到了一些困难和问题,下面将向大家分享. rpc接口调用智能合约 先来编写一个简单的智能合约 contract Multiply7 { event Print(uint); function multiply(uint input) returns (uint) { Print(input * 7); return input

使用java代码本地测试远程rpc接口

背景:公司开发的系统在本地运行太过麻烦,并且该系统使用dubbo管理服务,使用rpc进行不同应用间的通信.某次开发的时候需要查看调用rpc接口后的返回结果,操作起来太麻烦.于是尝试本地使用java程序直接调用rpc接口进行调试.在此记录代码,抽空把它封装成一个测试dubbo的rpc接口的程序 java代码 package test.kgtone; import com.alibaba.dubbo.config.ApplicationConfig; import com.alibaba.dubbo

【刘杰良】使用RPC接口新建EOS账户 - 实战

适用于最新的 EOS Dawn 4.0/4.1 前言 最近在研究 EOS 的 RPC API,但是由于官方API文档的不够详尽,新建账号(new account)这一个操作就折腾了一个多星期.皇天不负有心人,终于调通了新建账号,代币转账也轻松解决.特地写这篇文章(适用于 EOS dawn 4.0 和 4.1),帮助准备使用 EOS RPC 做 Dapp 开发的朋友,如有问题,欢迎批评指正. 少废话,先看东西 1.POST http://127.0.0.1:8888/v1/chain/abi_js