golang以太坊开发介绍

golang以太坊开发介绍

读取一个账户的余额相当简单。调用客户端的BalanceAt方法,给它传递账户地址和可选的区块号。将区块号设置为nil将返回最新的余额。
传区块号能让您读取该区块时的账户余额。区块号必须是big.Int类型。

account_balance.go 完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package main
 
import (
    "context"
    "fmt"
    "log"
    "math"
    "math/big"
 
    "github.com/ethereum/go-ethereum/common"
    "github.com/ethereum/go-ethereum/ethclient"
)
 
func main() {
    client, err := ethclient.Dial("https://mainnet.infura.io")
    if err != nil {
        log.Fatal(err)
    }
 
    account := common.HexToAddress("0x71c7656ec7ab88b098defb751b7401b5f6d8976f")
    balance, err := client.BalanceAt(context.Background(), account, nil)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(balance) // 25893180161173005034
 
    blockNumber := big.NewInt(5532993)
    balanceAt, err := client.BalanceAt(context.Background(), account, blockNumber)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(balanceAt) // 25729324269165216042
 
    fbalance := new(big.Float)
    fbalance.SetString(balanceAt.String())
    ethValue := new(big.Float).Quo(fbalance, big.NewFloat(math.Pow10(18)))
    fmt.Println(ethValue) // 25.729324269165216041
 
    pendingBalance, err := client.PendingBalanceAt(context.Background(), account)
    fmt.Println(pendingBalance) // 25729324269165216042
}

  

运行代码查看效果

先下载需要的包(会下载到gopath里面)。
go get github.com/ethereum/go-ethereum/common
go get github.com/ethereum/go-ethereum/ethclient
注意:由于用命令下载速度很慢,容易导致部分文件下载失败,可以去github上手动下载zip包,解压后放在gopath相应目录下。
如果存在的需要加-u参数进行更新,如:go get -u github.com/ethereum/go-ethereum/common

在运行go程序时,出现报错:cannot find package "golang.org/X/crypto/sha3" in any of 或者 cannot find package "golang.org/x/net/websocket" in any of
解决方案:
git clone https://github.com/golang/crypto.git
git clone https://github.com/golang/sys.git
git clone https://github.com/golang/net.git
将下载的包放在GOPATH对应的路径下的(\gopath\src\golang.org\X )
注意:.git隐藏文件夹,.gitattributes,.gitignore 不要拷贝过去,否则再执行其他命令就会报错

 

 

在运行时报错:exec: "gcc": executable file not found in %PATH%。原因是没有安装gcc环境造成的。解决方案:

Mac OS最快捷的获取gcc的方法是从苹果的网站上下载Xcode开发环境,并按说明进行安装。一旦安装上Xcode,你就能使用gcc了。

在Windows上安装gcc,需要下载 MinGW 安装。下载后按提示一步步安装即可。
安装完成后,在命令行输入 gcc -v 查看安装是否成功,如没有成功,需要手动配置环境变量。
假设安装在C:\MinGW目录下,则需要在path下添加路径C:\MinGW\bin。设置好之后,重新打开命令窗口,重新编译Go程序,一般就可以执行了。
如果还不行,通常是由于环境变量没有启动造成的,需要重启电脑测试。

如果报错:cc1.exe: sorry, unimplemented: 64-bit mode not compiled in
原因是gcc版本不是64位的,在64位环境下无法编译,需要将mingw32换成mingw64。
下载安装包:http://mingw-w64.org/doku.php/download/mingw-builds 选择x86_64版本安装

默认安装在 C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64
安装完成后添加环境变量GCC_HOME,内容为上面的安装路径(最后这个\mingw64是安装后加上的),在path下添加%GCC_HOME%\bin。
同时去掉32位的环境变量配置。
重新打开命令窗口,输入 gcc -v 查看安装是否成功

 

 

到存放代码的文件夹下,执行运行命令:
go run account_balance.go

window下还是有很多莫名其妙的问题,版本不兼容等各种问题层出不穷。

可以考虑这个套件的方式:https://github.com/ethereum/go-ethereum/wiki/Installation-instructions-for-Windows ,但测试了下需要docker的,情况可能又更复杂了

主要参考开源文档:https://goethereumbook.org/zh/ 更多内容请访问该网址。

 

posted @   大自然的流风  阅读(1707)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2018-10-23 android搜索框列表布局,流程及主要步骤思维导图
2018-10-23 php 当前时间 当前时间戳和数据库里取出的时间datetime格式进行比较大小
点击右上角即可分享
微信分享提示