go语言区块链学习调用以太坊

目录
  • 1. geth 简介
    • 1.1 下载地址:
    • 1.2 安装:
    • 1.3 查看是否安装成功
    • 2. geth命令介绍
  • 3. geth常用命令
    • 3.1 指定数据目录 --datadir
    • 3.2 账户相关
    • 3.3 控制台console:
    • 3.4 删除数据:
    • 3.5 help
    • 3.6 常见错误
  • 4. Go语言调用合约
    • 4.1 启动rpc端口
    • 4.2 Go调用以太坊
    • 4.3 调用接口
      • eth接口
      • personal接口
      • db接口

geth

以太坊智能合约开发中最常用的命令行工具。
Geth是由以太坊基金会提供的官方客户端软件,用Go编程语言编写的。Geth提供了一个交互式命令控制台,通过命令控制台中包含了以太坊的各种功能(API)。全名go-ethereum

1. geth 简介

1.1 下载地址:

官网(很慢):https://geth.ethereum.org/downloads/

国内镜像:https://ethfans.org/wikis/Ethereum-Geth-Mirror

1.2 安装:

下载下来之后,会在安装目录生成geth.exe

将这个文件放在gopath的bin目录中,

放在这里就行了

1.3 查看是否安装成功

geth version

如果你安装了,但是没有显示这个的话,可能是因为你的系统环境里面没有go的路径,把go的bin目录路径放在系统变量的path就好了~

2. geth命令介绍

geth -help查看帮助

命 令:geth [选项] 命令 [命令选项] [参数…]
命令参数介绍:超详细

3. geth常用命令

3.1 指定数据目录 --datadir

如:geth --datadir “路径” account new

3.2 账户相关

查看账户:geth account list

查看账户的信息

创建账户:geth account new
然后输入两次密码

更新指定账户:geth account update "用户地址"
输入账户密码及确认密码

默认是会把用户的账户信息存放在这个目录

导入账户:geth account import 你的私钥文件路径(导出私钥存放到xx.txt)
指定保存路径的创建用户:geth --datadir account new

3.3 控制台console:

启动并进入交互式javascript环境

默认连接的是ipc

geth attach http://IP:8545,默认不开启

geth attach ws://IP:8546,默认不开启

进入控制台:geth console 可以指定--datadir "路径"
退出控制台:exit 或者 ctrl+d

常用api:

获取区块号:eth.blockNumber

是否在监听端口 net.listening

开始挖矿:miner.start()

挖矿还可以指定进程数:miner.start(1)

停止挖矿:miner.stop()

检查是否在挖矿:eth.mining true:在挖矿,false:不在挖矿

获取账户地址数组:eth.accounts

获取挖矿地址:eth.coinbase 默认第一个创建的账户

查看第一个账户余额:eth.getBalance(eth.accounts[0])

创建用户:personal.newAccount(“12345678”)

设置挖矿账户:miner.setEtherbase(“地址A”)

账户间转钱:eth.sendTransation({from:“地址A”,to:“地址B”,value:web3.toWei(10,“ether”)})

获取交易信息:eth.getTransaction(‘地址A')

3.4 删除数据:

不要直接删除datadir目录,使用removedb

geth --datadir "路径" removedb

这会删除路径/geth/chaindata,其他东西都不会动,不会删除用户。

3.5 help

geth account -hgeth account help new 查看子命令

3.6 常见错误

1 . Error: authentication needed: password or unlock undefined:

这种报错解锁下账户即可

账户解锁:personal.unlockAccount(“账户地址”)

2 . Returned error: exceeds block gas limit:

出现这种错误就看块号的gaslimit,部署时改成一直

获取块号:eth.blockNumber

根据块号获取详细信息:eth.getBlock(0)

4. Go语言调用合约

4.1 启动rpc端口

geth --datadir "fanone" --identity "fanone" --rpc --rpcport 8545  --rpcapi "db,eth,net,web3,personal" --rpccorsdomain "*" console

identity “fanone”:节点身份标识

rpc:开启 RPC 接口

rpcportRPC 端口,默认go是8545

rpcapi “db,eth,net,web3”:提供给别人使用的 RPC API,默认为web3接口

rpccorsdomain:设置能连接到你的节点的 URL,用来完成RPC任 务。* 指任何URL都能连接到,默认只能自己连接

datadir:区块数据文件夹 ,如果不指定的话,就是上面的那个在C盘的地址。

为了C盘着想,所以还是建议这样,新建一个文件夹放在其他盘

就会在这里进行存放了

–networkid:net_versionid

port:用来监听其他节点的端口

nodiscover:你的节点不会被其他人发现,除非他们手动添加你

是连接这个url

4.2 Go调用以太坊

下载包:"github.com/ethereum/go-ethereum/rpc"

示例代码:

client, _ := rpc.Dial("http://localhost:8545")
var result bool
client.Call(&result ,"net_listening")
// 注意这里必须使用指针,否则会报空指针异常

启动之后

在go中调用

4.3 调用接口

net_version

当前连接网络的ID

net_version: 当前连接网络的ID

var networkid string
client.Call(&networkid,"net_version")
networkid:
    "1":Mainnet
    "2": Morden Testnet
    "3": Ropsten Testnet
    "4": Rinkeby Testnet
    "42": Kovan Testnet

在启动rpc服务接口的时候可以指定: --networkid

net_listening

客户端是否处于监听状态

var is_listing bool
client.Call(&is_listing,"net_listening")

net_peerCount

所连接对端节点旳数量

var count string
client.Call(&count,"net_peerCount")
//"0x0" 表示0个
//"0x2" 表示2个

eth接口

1 .eth_accounts:账户地址数组

var accounts []string
client.Call(&accounts,"eth_accounts")

2 .eth_getBalance:获取指定地址账户的余额,单位:wei

var balance string
client.Call(&balance,"eth_getBalance","0x558c90c05d8c4b55a87de03bd601fd76faf50f9b","latest")

参数:
账户地址
整数块编号,或者字符串"latest", “earliest” 或 “pending”

3 .eth_gasPrice:返回当前的gas价格,单位:wei。

var gas_price string
client.Call(&gas_price,"eth_gasPrice")

4.eth_coinbase:

获取挖矿账户地址

var coinbase string
client.Call(&coinbase, "eth_coinbase")

5.eth_protocolVersion:

返回当前以太坊协议的版本。

var proto_version string
client.Call(&proto_version , "eth_protocolVersion")

6.eth_mining:

客户端是否在挖矿中

var is_mining bool
client.Call(&is_mining,"eth_mining")

7.eth_hashrate:

返回节点挖矿时每秒可算出的哈希数量。

var hashrate string
client.Call(&hashrate,"eth_hashrate")

8.eth_getTransactionCount:

返回指定地址发生的交易数量

var transactionCount string
client.Call(&transactionCount,"eth_getBalance","0x72w12d05d8c4b55a87de03bd601fd76faf50f9b","latest")
//参数
//    账户地址
//    整数块编号,或者字符串"latest", "earliest" 或 "pending"

9.eth_blockNumber:获取节点当前块编号

var blockNum string
client.Call(&blockNum ,"eth_blockNumber")

personal接口

1 .personal_listAccounts:
获取该节点下的所有账户,和eth_accounts效果一样

var accounts []string
client.Call(&accounts,"personal_listAccounts")

2.personal_newAccount:
创建用户

var newAccount string
client.Call(&newAccount, "personal_newAccount", "12345678")
参数:
    密码

3.personal_lockAccount:

锁定指定账户

var is_lock bool
client.Call(&is_lock, "personal_lockAccount", "账户地址")

//参数:
//    账户地址

4.personal_unlockAccount:

解锁指定账户,有些操作必须解锁账户才可以操作

var is_unlock bool
client.Call(&is_unlock, "personal_lockAccount", "账户地址","账户密码")
参数:
    账户地址
    账户密码

db接口

1.db_putString:

在本地数据库中存入字符串

var is_ok bool
client.Call(&is_ok, "db_putString", "db_name","key",""value")
参数:
    数据库名称
    key名
    要存入的字符串值

2.db_getString:

从本地数据库读取字符串。

var val string
client.Call(&val, "db_getString", "db_name","key")

//参数:
  //  数据库名称
  //  key名

以上就是go语言区块链学习调用以太坊的详细内容,更多关于go语言区块链调用以太坊的资料请关注我们其它相关文章!

(0)

相关推荐

  • Go语言调用其它程序并获得程序输出的方法

    本文实例讲述了Go语言调用其它程序并获得程序输出的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main import (     "exec" // "os/exec" in go1     "fmt" ) func main(){     cmd := exec.Command("ls", "-l")     buf, err := cmd.Output()   

  • 教你用go语言实现比特币交易功能(Transaction)

    比特币交易 交易(transaction)是比特币的核心所在,而区块链唯一的目的,也正是为了能够安全可靠地存储交易.在区块链中,交易一旦被创建,就没有任何人能够再去修改或是删除它. 对于每一笔新的交易,它的输入会引用(reference)之前一笔交易的输出(这里有个例外,coinbase 交易),引用就是花费的意思.所谓引用之前的一个输出,也就是将之前的一个输出包含在另一笔交易的输入当中,就是花费之前的交易输出.交易的输出,就是币实际存储的地方.下面的图示阐释了交易之间的互相关联: 注意: 有一

  • 利用Go语言实现简单Ping过程的方法

    一.准备工作 安装最新的Go 1.由于Google被墙的原因,如果没有VPN的话,就到这里下载:http://www.golangtc.com/download 2.使用任意文本编辑器,或者LiteIDE会比较方便编译和调试 二.编码 要用到的package: import ( "bytes" "container/list" "encoding/binary" "fmt" "net" "os&q

  • Go语言开发区块链只需180行代码(推荐)

    区块链开发用什么语言?通过本文你将使用Go语言开发自己的区块链(或者说用go语言搭建区块链).理解哈希函数是如何保持区块链的完整性.掌握如何用Go语言编程创造并添加新的块.实现多个节点通过竞争生成块.通过浏览器来查看整个链.了解所有其他关于区块链的基础知识. 但是,文章中将不会涉及工作量证明算法(PoW)以及权益证明算法(PoS)这类的共识算法,同时为了让你更清楚得查看区块链以及块的添加,我们将网络交互的过程简化了,关于 P2P 网络比如"全网广播"这个过程等内容将在后续文章中补上.

  • 使用go实现简易比特币区块链公链功能

    使用go语言实现具备以下功能的简易区块链 区块与区块链 共识机制 数据库 Cli命令行操作 交易管理 密码学 数字签名 交易缓存池 P2P网络管理 由于平时还要进行论文工作,项目不定时更新 2021.1.1实现了区块结构.区块链结构.工作量证明pow,剩下部分陆续更新 1.实现区块结构 package BLC import ( "bytes" "crypto/sha256" "time" ) //实现一个最基本的区块结构 type Block s

  • go语言区块链学习调用以太坊

    目录 1. geth 简介 1.1 下载地址: 1.2 安装: 1.3 查看是否安装成功 2. geth命令介绍 3. geth常用命令 3.1 指定数据目录 --datadir 3.2 账户相关 3.3 控制台console: 3.4 删除数据: 3.5 help 3.6 常见错误 4. Go语言调用合约 4.1 启动rpc端口 4.2 Go调用以太坊 4.3 调用接口 eth接口 personal接口 db接口 geth 以太坊智能合约开发中最常用的命令行工具. Geth是由以太坊基金会提供

  • go语言区块链学习调用智能合约

    目录 1. 获取abi文件 合约的接口 2. 安装abigen工具 3. remix连接私有链 4. 合约部署 5. 初始化私有链节点创世块 6. 合约部署 7. 调用 1. 获取abi文件 合约的接口 在remix工具中编译合约后,会有一个abi,复制 然后新建一个xx.abi文件,把赋值的粘贴到里面 注意:代码变了,重新编译后abi也会变,所以一定要用最新的abi 也可以通过solc生成abi: solc --bin test.sol -o test.abi 2. 安装abigen工具 用来

  • go语言区块链实战实现简单的区块与区块链

    目录 区块链实战 Version 1 区块相关: 区块链相关 区块链实战 字节 字段 说明 4 版本 区块版本号,表示本区块遵守的验证规则 32 父区块头哈希值 前一区块的Merkle树根的哈希值,同样采取SHA256计算 32 Merkle根 该区块中交易的Merkle树根的哈希值,同样采用SHA256计算 4 时间戳 该区块产生的近似时间,精确到秒的UNIX时间戳,必须严格大于前11各区块的时间的中值,同时全节点也会拒接那些超过自己两个小时的时间戳的区块 4 难度目标 该区块工作量证明算法的

  • 你应该知道的区块链运作7个核心技术

    区块链运作的7个核心技术,你知道几个? 1.区块链的链接 顾名思义,区块链即由一个个区块组成的链.每个区块分为区块头和区块体(含交易数据)两个部分.区块头包括用来实现区块链接的前一区块的哈希(PrevHash)值(又称散列值)和用于计算挖矿难度的随机数(nonce).前一区块的哈希值实际是上一个区块头部的哈希值,而计算随机数规则决定了哪个矿工可以获得记录区块的权力. 2.共识机制 区块链是伴随比特币诞生的,是比特币的基础技术架构.可以将区块链理解为一个基于互联网的去中心化记账系统.类似比特币这样

  • Spring Boot 整合 Fisco Bcos部署、调用区块链合约的案例

    本篇文章介绍 Spring Boot 整合 Fisco Bcos 的相关技术(合约的调用) 简介 在上一节,介绍了Spring Boot 整合 Fisco BCOS的最最基础的案例(SpringBoot成功连接Fisco BCOS,并访问其节点网络 --> 文章链接). 本节,咱们继续介绍Spring Boot 整合 Fisco BCOS的最最重要的技术点:部署.调用区块链合约(基于上一节的工程案例). 主要流程 --> 1.合约开发(省略,因为是案例演示,直接使用 Fisco BCOS自带的

  • Python学习入门之区块链详解

    前言 本文将给大家简单介绍关于区块链(BlockChain)的相关知识,并用Python做一简单实现.下面话不多说,来一起看看详细的介绍: 什么是区块链 简单来说,区块链就是把加密数据(区块)按照时间顺序进行叠加(链)生成的永久.不可逆向修改的记录.具体来说,它区块链是由一串使用密码学方法产生的数据块组成的,每一个区块都包含了上一个区块的哈希值(hash),从创始区块(genesis block)开始连接到当前区块,形成块链.每一个区块都确保按照时间顺序在上一个区块之后产生,否则前一个区块的哈希

  • web3.js调用链上的方法操作NFT区块链MetaMask详解

    目录 实例化链上方法 MetaMask 首先要初始化web3 实例化链 调用链上方法授权 调用游戏链上方法质押NFT 实例化链上方法 公司的项目全是区块链项目,最近这个项目是要构建一个链上的游戏社区,目前这个功能是用户可以质押NFT到游戏的链上,然后游戏那边就可以有人去参加竞赛,然后质押人可以赎回NFT. MetaMask web3.js MetaMask 浏览器插件用的是小狐狸MetaMask 网络用的是测试网络Rinkeby,记得切换网络,把设置 > 高级 > 显示测试网络 打开 let

  • PHP与以太坊交互详解

    自去年以来,我们正在开发区块链(Blockchain)业务.最近使用过Ethereum并使用PHP,所以我想我们应该聊聊这个话题. 这里有个前提: 1.理解区块链 2.对编程语言有了解 本文的主要内容: 1.开发环境 2.以太坊的介绍 3.准备JSON-RPC调用 4.从PHP访问 1.开发环境 我们将使用Ubuntu 14.04 LTS.安装操作系统后,输入预先确定的命令. $ sudo apt-get update $ sudo apt-get upgrade 之后我设置了SSH,iptab

  • SunlightDB 2017新型区块链数据库

    什么是区块链?自去年开始,区块链的概念开始被捧红,尤其在一些发达国家,更是受到了明星级的热捧.区块链也被冠以了颠覆的名头,大有风靡全球之势.区块链将最先冲击金融行业,进而会影响到更为广泛的经济领域. 预测依据了区块链的几个核心特点:去中心化.分布式账本.点对点传输.不可被篡改等.由于区块链的诞生颇具神奇色彩,其发展也是随着比特币在世界范围的兴起而受到了关注,因此很多人会混淆区块链与比特币的关系.区块链其实是比特币的底层支持技术,从某个角度来看,比特币可以看作是与区块链同时产生的区块链的第一个实际

随机推荐