Go语言具有简单易学、功能强大,可跨平台编译等众多优势,所以这里选择以Go语言切入以太坊。

开始之前需要以下环境:

  • Ubuntu(这里以ubuntu16.04为例)
  • geth

Ubuntu16.04安装Go1.9.2

在与以太坊交互之前,我们需要安装Go语言开发工具,这里选择的版本是Go1.9.2。接下来我们开始安装

在终端输入以下命令

$ curl -O https://storage.googleapis.com/golang/go1.9.linux-amd64.tar.gz
$ tar -C /usr/local -zxvf go1.9.linux-amd64.tar.gz
$ mkdir -p ~/go/src
$ export GOPATH=~/go/src //go项目要放到~/go/src目录下编译
$ go version

接下来,需要用到ipc方式和rpc方式。go-ethereum中有相关文件和工具,我们把它克隆下来。

克隆go-ethereum到本地

在终端输入

$ cd ~/go/src
$ mkdir -p github.com/ethereum
$ cd github.com/ethereum/
$ git clone https://github.com/ethereum/go-ethereum.git

部署智能合约到geth

接下来的操作需要geth私有节点,下面是启动命令和参数

  • 启动geth
$ geth --identity "pdj" --datadir data0 --rpcport 8545 --rpccorsdomain "*" --port "30303" --nodiscover --nat "any" --networkid 15 --rpc --rpcapi "db,eth,net,web3,personal" --ipcpath "geth.ipc" console

  • 在http://remix.ethereum.org/上编译智能合约
  • 在remix的 run选项中选择"Web3 Provider",Web3 Provider Endpoint 为"http://localhost:8545"

ipc方式调用智能合约

  • 复制部署智能合约时产生的abi到.abi文件中
  • 通过abigen工具产生.go文件

这里需要编译生成一个abigen工具,用来产生.go文件

  • 编译~/go/src/github.com/ethereum/go-ethereum/cmd/abigen/目录下的main.go
$ cd ~/go/src/github.com/ethereum/go-ethereum/cmd/abigen/
$ go build -i

编译成功之后就会在当前目录下生成abigen

$ abigen --abi xx.abi --pkg pkgname --type apiname --out xx.go

1. abi 文件在 remix 部署时可以得到
2. Pkg 指定的是编译成的 go 文件对应的 package 名称
3. type指定的是go文件的入口函数,可以认为是类名
4. out 指定输出go文件名称

go调用rpc接口

  • geth启动时加上参数--rpcapi "db,eth,net,web3,personal"
  • go调用getBalance()实例
package main

import (
"fmt"
"github.com/ethereum/go-ethereum/rpc"
) func main() { client, err := rpc.Dial("http://localhost:8545")
if err != nil {
fmt.Println("rpc.Dial err", err)
return
} var account[]string
err = client.Call(&account, "eth_accounts")
var result string
//var result hexutil.Big
err = client.Call(&result, "eth_getBalance", account[0], "latest")
//err = ec.c.CallContext(ctx, &result, "eth_getBalance", account, "latest") if err != nil {
fmt.Println("client.Call err", err)
return
} fmt.Printf("account[0]: %s\nbalance[0]: %s\n", account[0], result)
//fmt.Printf("accounts: %s\n", account[0])
}

以太坊之——golang以太坊接口调用的更多相关文章

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

    rpc接口调用以太坊智能合约 传送门: 柏链项目学院   在以太坊摸爬滚打有些日子了,也遇到了各种各样的问题.这几天主要研究了一下如何通过rpc接口编译.部署和调用合约.也遇到了一些困难和问题,下面将 ...

  2. 如何理解以太坊ABI - 应用程序二进制接口

    很多同学不是很明白以太坊ABI是什么,他的作用是什么,读完本文就明白了. 写在前面 阅读本文前,你应该对以太坊.智能合约有所了解, 如果你还不了解,建议你先看以太坊是什么,也可以观看我们的视频:零基础 ...

  3. usdt钱包对接,usdt 对接交易平台,usdtapi,以太坊对接,以太坊代币对接

    usdt钱包对接,usdt 对接交易平台,usdtapi,以太坊对接,以太坊代币对接 自动充提币接口开发. 可对接:商城系统,游戏APP,交易平台,网站,各类APP -实现自动充提,查询,上链等功能接 ...

  4. 【以太坊剖析】以太坊虚拟机(EVM)之基本定义

    以太坊虚拟机(EVM) 以太坊虚拟机(Ethereum Virtual Machine,简称EVM)是一个基于栈的虚拟机,基于特定的环境数据,执行一系列的字节代码形式的指令,以修改系统状态.EVM目前 ...

  5. golang方法和接口

    一.  go方法 go方法:在函数的func和函数名间增加一个特殊的接收器类型,接收器可以是结构体类型或非结构体类型.接收器可以在方法内部访问.创建一个接收器类型为Type的methodName方法. ...

  6. 《C#微信开发系列(3)-获取接口调用凭据》

    3.0获取接口调用凭据 ①接口说明 access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token.开发者需要进行妥善保存.access_token的存储至少要保留 ...

  7. asp.net mvc短信接口调用——阿里大于API开发心得

    互联网上有许多公司提供短信接口服务,诸如网易云信.阿里大于等等.我在自己项目里需要使用到短信服务起到通知作用,实际开发周期三天,完成配置.开发和使用,总的说,阿里大于提供的接口易于开发,非常的方便,短 ...

  8. PHP 使用 curl_* 系列函数和 curl_multi_* 系列函数进行多接口调用时的性能对比

    在页面中调用的服务较多时,使用并行方式,即使用 curl_multi_* 系列函数耗时要小于 curl_* 系列函数. 测试环境 操作系统:Windows x64 Server:Apache PHP: ...

  9. Spring AOP在函数接口调用性能分析及其日志处理方面的应用

    面向切面编程可以实现在不修改原来代码的情况下,增加我们所需的业务处理逻辑,比如:添加日志.本文AOP实例是基于Aspect Around注解实现的,我们需要在调用API函数的时候,统计函数调用的具体信 ...

随机推荐

  1. Oracle 理论到实践之碎碎念

    有关 Oracle 的著名谣传 1.如果你想把表中数据复制到另一张表,或者想根据现有表创建一个类似的新表,网上有大量不明所以的帖子告诉你实现该功能的语法是select field1,field2 in ...

  2. Zookeeper Client简介

    直接使用zk的api实现业务功能比较繁琐.因为要处理session loss,session expire等异常,在发生这些异常后进行重连.又因为ZK的watcher是一次性的,如果要基于wather ...

  3. 1.Magicodes.NET框架之路——起航

    1.Magicodes.NET框架之路--起航 前言 从事开发也好几年了,并且最近一直在做架构搭建的工作.这些时间,最大的感悟就是: 只有自己理解了的才是自己的. 对架构这块,若欲立之,必先破之. 故 ...

  4. solr调用lucene底层实现倒排索引源码解析

    1.什么是Lucene? 作为一个开放源代码项目,Lucene从问世之后,引发了开放源代码社群的巨大反响,程序员们不仅使用它构建具体的全文检索应用,而且将之集成到各种系统软件中去,以及构建Web应用, ...

  5. Pytorch1.0入门实战二:LeNet、AleNet、VGG、GoogLeNet、ResNet模型详解

    LeNet 1998年,LeCun提出了第一个真正的卷积神经网络,也是整个神经网络的开山之作,称为LeNet,现在主要指的是LeNet5或LeNet-5,如图1.1所示.它的主要特征是将卷积层和下采样 ...

  6. Perl的do语句块结构

    do语句块结构如下: do {...} do语句块像是匿名子程序一样,没有名称,给定一个语句块,直接执行.且和子程序一样,do语句块的返回值都是最后一个执行的语句的返回值. 例如,将使用if-elsi ...

  7. 线性表&顺序线性表

    第二章 线性表 参考文献:[数据结构(C语言版)].严蔚敏 本篇章仅为个人学习数据结构的笔记,不做任何用途. 2.1 线性结构的特点 (1). 存在唯一的一个被称为"第一个"的数据 ...

  8. vmware-vcsa6.5 基本管理

    这章介绍的是创建数据中心集群等操作 一.创建数据中心 创建数据中心 添加主机 创建集群 #配置ntp,上一章已经配置 #许可证,上一章已经添加,这章就不介绍了 统一存储,方便后面的识别和管理 1.创建 ...

  9. spark之JDBC开发(连接数据库测试)

    spark之JDBC开发(连接数据库测试) 以下操作属于本地模式操作: 1.在Eclipse4.5中建立工程RDDToJDBC,并创建一个文件夹lib用于放置第三方驱动包 [hadoop@CloudD ...

  10. LeetCode Animation 题目图解汇总(持续更新中...)

    我会尽力将LeetCode上所有的题目都用动画的形式演示出来,期待与你见证这一天! GitHub Repo:LeetCode Animation Follow: MisterBooo · GitHub ...