go语言后端调用以太坊rpc

2023-11-06

任务要求:使用golang作为后端语言,获取eth(私链)中的账户信息以及创建新的账号


1、启动geth

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

命令解析:

  1. --identity "MyNodeName":为你的节点设置身份标识,以更容易在节点列表中识别 
  2. --rpc:开启 RPC 接口
  3. --rpcport "8080":RPC 端口
  4. --rpccorsdomain "*":设置能连接到你的节点的 URL,用来完成 RPC 任 务。* 指任何 URL 都能连接到你。
  5. --datadir "data0":区块数据文件夹 (在geth同目录下生成data0文件夹)
  6. --port "30303":用来监听其他节点的端口
  7. --nodiscover:你的节点不会被其他人发现,除非他们手动添加你
  8. --rpcapi "db,eth,net,web3":提供给别人使用的 RPC API,默认为 web3 接口
  9. networkid 1999:相同 networkdid 才会连接到一起

2、通过rpc进行通信

package main

import (
	"fmt"
	"strconv"

	"github.com/ethereum/go-ethereum/rpc"
	"github.com/pkg/errors"
)

var (
	client *rpc.Client
)

func init() {
	//获取连接与eth客户端
	client, _ = rpc.Dial("http://localhost:8545")
	if client == nil {
		fmt.Println("rpc.Dial err")
		//panic("连接错误")
		return
	}
}

//获取账户列表
func getAccounts(client *rpc.Client) (accounts []string, err error) {
	err = client.Call(&accounts, "eth_accounts")
	if err == nil {
		return accounts, nil
	} else {
		return nil, errors.New("账户列表获取错误")
	}

}

//获取挖矿账户
func getCoinbase(client *rpc.Client) (coinbase string, err error) {
	err = client.Call(&coinbase, "eth_coinbase")
	if err == nil {
		return coinbase, nil
	} else {
		return "", errors.New("挖矿账户获取错误")
	}
}

//获取余额
func getBalance(client *rpc.Client, account string) (Balance int64, err error) {

	var balance string
	err = client.Call(&balance, "eth_getBalance", account, "latest")
	if err != nil {
		return -1, err
	}
	Balance, _ = strconv.ParseInt(balance, 0, 64)
	return Balance, nil

}
func creatNewAccount(client *rpc.Client, password string) (newAccount string, err error) {
	err = client.Call(&newAccount, "personal_newAccount", password)
	if err != nil {
		return "", err
	}
	return newAccount, nil

}
func main() {

	//创建新账户
	var password string = "123456"
	newAccount, err := creatNewAccount(client, password)
	if err != nil {
		fmt.Println("err=", err)
	}
	fmt.Println("新账户为:", newAccount)

	//获取账户列表
	accounts, err := getAccounts(client)
	if err != nil {
		fmt.Println("err=", err)
	}
	for i, v := range accounts {
		balance, err := getBalance(client, v)
		if err != nil {
			fmt.Println("err=", err)
		} else {
			fmt.Printf("账户%d的账号为:%s,余额为:%d\n", i, v, balance)
		}

	}

	//获取挖矿账户
	coinbase, err := getCoinbase(client)
	if err != nil {
		fmt.Println("err=", err)
	}
	fmt.Println("挖矿账户为:", coinbase)

	//延迟关闭
	defer client.Close()

}

任务完成

后续将完成转账与签名功能

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

go语言后端调用以太坊rpc 的相关文章

  • 业务安全及实战案例

    业务安全 关于漏洞 注入 业务逻辑 信息泄露 A04 2021 Insecure Design 在线靶场PortSwigger 1 概述 1 1 业务安全现状 1 1 1 业务逻辑漏洞 近年来 随着信息化技术的迅速发展和全球一体化进程的不断

随机推荐

  • php读写excel文件

    1 引入包 有不少提供读写excel文件的包 这里选择比较常用的一个 加到自己的项目里就好了 phpoffice phpspreadsheet 1 8 2 2 读取文件
  • Android中的USB中的UsbAccessory和UsbDevice的区别

    转载自 http www crifan com android usb usbaccessory vs usbdevice utm source tuicool utm medium referral UsbAccessory和UsbDev
  • MySQL更新表的记录详解

    目录 前言 前言 一 更新数据记录 1 特定数据记录 2 所有数据记录 总结 前言 更新数据记录是数据操作中常见的操作 可以更新表中已经存在数据记录中的值 在MySQL中可以通过UPDATE语句来实现更新数据记录 该SQL语句可以通过如下几
  • 5个炫酷登录页面,拿去就能用(附源码)

    5个炫酷登录页面 拿去就能用 附源码 登录页面 觉得显示效果很好 借鉴其他博主的 喜欢的可以收藏关注 不商用 只为学习传播 目录 1 炫酷星空登录 2 动态云层登录 3 深海灯光水母登录 4 炫酷蛛网登录 5 彩色气泡登录 1 炫酷星空登录
  • 响应式网页设计(Responsive Web Design)的核心原理

    聚沙成塔 每天进步一点点 专栏简介 响应式网页设计的核心原理 优点和缺点 优点 缺点 写在最后 专栏简介 前端入门之旅 探索Web开发的奇妙世界 欢迎来到前端入门之旅 感兴趣的可以订阅本专栏哦 这个专栏是为那些对Web开发感兴趣 刚刚踏入前
  • CVE-2022-26134 Confluence OGNL RCE 复现

    一 漏洞概述 Atlassian Confluence 是一款各企业广泛使用的 wiki 系统 在Atlassian Confluence Server and Data Center上存在OGNL 注入漏洞 远程攻击者在未经身份验证的情况
  • Servlet之间传递数据

    转自 http jallay iteye com blog 256004 1 如何让用户的请求数据从一个Servlet传递给另一个Servlet 第一种方式 通过超链接传递数据 第二种方式 通过表传递取参数 第三种方式 通过setAttri
  • 『数据结构』B树(B-Tree)及其变体 B+树,B*树

    原文地址 1 背景 当有大量数据储存在磁盘时 如数据库的查找 插入 删除等操作的实现 如果要读取或者写入 磁盘的寻道 旋转时间很长 远大于在 内存中的读取 写入时间 平时用的二叉排序树搜索元素的时间复杂度虽然是 O log2n O l o
  • BBR拥塞算法的简单解释

    TCP BBR的ACM论文中 开篇就引入了图1 以此来说明BBR算法的切入点 为何当前基于丢包探测的TCP拥塞控制算法还有优化空间 BBR算法的优化极限在哪儿 图1 为了理解这张图花了我整整一个晚上的时间 它使我重新审视了所有基础概念 而我
  • vue2.js初探

    今天学习了一下vue2 js 感觉很好用 一个是把相同的功能组件化了 把他定义一个标签 不用多次开发重复的代码 直接加标签就可以了 还有就是他把数据和标签的显示修改完全分开了 之前用jQuery开发 如果数据变动了 需要用jquery回调事
  • 计算机网络第八版——第一章课后题答案(超详细)

    第一章 该答案为博主在网络上整理 排版不易 希望大家多多点赞支持 后续将会持续更新 可以给博主点个关注 第二章 答案 1 01 计算机网络可以向用户提供哪些服务 解答 这道题没有现成的标准答案 因为可以从不同的角度来看 服务 首先要明确的是
  • ThreadX 内部系统时钟服务

    ThreadX中 有两个函数可以获取和设置内部系统时钟服务 tx time get 获取当前时间 tx time set 设置当前时间 tx time get 获取当前时间 原型 ULONG tx time get VOID 描述 这项服务
  • VUE安装问题

    启动应用 npm run serve 默认进入为 http localhost 8080 由于部署在虚拟化linux上 需远程访问 需将localhost修改为服务器IP 1 修改package json 新增host 0 0 0 0 2
  • 【Flutter 系列——1】Flutter环境搭建及配置这一篇就够了(Windows)

    最近正式入坑Flutter 首先从环境搭建开始 看了网上好多关于Windows环境搭建的资料 基本都是按官方文档写的 看完的感受是 还不如直接去看官方文档 官方英文文档传送门 Get Started Install on Windows 本
  • 数据要素流通视角下数据安全保障研究报告

    报告围绕数据要素流通视角下流通数据 流通活动 流通设施的安全需求 分析健全我国数据安全保障体系的推进思路 并从分类分级 流通环境 安全技术 协同共治等方面提出措施建议 为完善我国数据要素流通视角下数据安全保障提供有益参考与借鉴 关注公众号
  • WinCE5.0显卡驱动修改笔记

    WinCE5 0显卡驱动修改笔记公司前段时间让我在Geode上安装一个CE5 0 我把系统安装好之后发现显卡驱动不支持开发板的屏幕 我们的屏幕是800x480的 所以我只能自己动手写修改了一下驱动让它能够支持800x480 一下是我对驱动的
  • python报错code for hash md5 was not found解决方案

    因为开发机服务器不能上网 只能手动安装Python 但是装完后import hashlib出现异常 出现不支持sha256 sha512 md5等错误 现象如下 gt gt gt import hashlib ERROR root code
  • 排序算法之时间复杂度为O(N^2)的算法

    背景知识 排序算法算是比较基础的算法了 但是在面试过程中偶尔也会被问到 虽然很多语言都内置了排序函数 例如php的sort函数等等 但是还是有必要聊聊排序算法 这篇文章中将介绍时间复杂度为O N 2 的几个排序算法 本文基于从小到大排序讲解
  • react面试题(30个)

    1 React Native相对于原生的ios和Android有哪些优势 react native一套代码可以开发出跨平台app 减少了人力 节省了时间 避免了 iOS 与 Android 版本发布的时间差 开发新功能可以更迅速 等等 2
  • go语言后端调用以太坊rpc

    任务要求 使用golang作为后端语言 获取eth 私链 中的账户信息以及创建新的账号 1 启动geth geth identity aaron datadir data0 rpcport 8545 rpccorsdomain port 3