网站首页 > 博客文章 正文
这段代码连接到以太坊主网节点,随机生成私钥,并将其转换为公钥和地址。然后,它获取钱包地址的余额,使用钱包向另一个地址转账,并打印出交易哈希。
在代码中,使用了以太坊Go语言客户端库(go-ethereum)来处理以太坊的相关操作。代码中的注释解释了代码的每个部分的功能。需要注意的是,在实际项目中使用钱包程序时,需要注意私钥的安全性,避免私钥泄漏。
package main
import (
"context"
"crypto/ecdsa"
"fmt"
"log"
"math/big"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/ethclient"
)
func main() {
// 连接以太坊节点
client, err := ethclient.Dial("https://mainnet.infura.io")
if err != nil {
log.Fatal(err)
}
// 随机生成私钥
privateKey, err := crypto.GenerateKey()
if err != nil {
log.Fatal(err)
}
// 将私钥转换为公钥和地址
publicKey := privateKey.Public()
publicKeyECDSA, ok := publicKey.(*ecdsa.PublicKey)
if !ok {
log.Fatal("cannot assert type: publicKey is not of type *ecdsa.PublicKey")
}
address := crypto.PubkeyToAddress(*publicKeyECDSA)
// 打印地址和私钥
fmt.Printf("地址:%s\n", address.Hex())
fmt.Printf("私钥:%x\n", privateKey.D)
// 获取ETH余额
balance, err := client.BalanceAt(context.Background(), address, nil)
if err != nil {
log.Fatal(err)
}
fmt.Printf("ETH余额:%s\n", balance.String())
// 向指定地址转账
toAddress := common.HexToAddress("0x...")
amount := big.NewInt(0)
amount.SetString("1000000000000000000", 10) // 1 ETH
gasLimit := uint64(21000)
gasPrice, err := client.SuggestGasPrice(context.Background())
if err != nil {
log.Fatal(err)
}
auth := bind.NewKeyedTransactor(privateKey)
auth.Nonce, err = client.PendingNonceAt(context.Background(), address)
if err != nil {
log.Fatal(err)
}
auth.Value = amount
auth.GasLimit = gasLimit
auth.GasPrice = gasPrice
tx, err := auth.SendTransaction(context.Background(), toAddress, amount)
if err != nil {
log.Fatal(err)
}
fmt.Printf("转账交易哈希:%s\n", tx.Hash().Hex())
}
- 上一篇: Etcd服务注册与发现封装实现--golang
- 下一篇: Go操作etcd(csgo操作)
猜你喜欢
- 2025-03-30 Go操作etcd(csgo操作)
- 2025-03-30 Etcd服务注册与发现封装实现--golang
- 2025-03-30 使用Go实现一个数据库连接池(使用go实现一个数据库连接池的方法)
- 2025-03-30 Go中如何优雅关闭HttpServer?(关闭go module)
- 2025-03-30 OpenTelemetry 实战:从零实现应用指标监控
- 2025-03-30 如何使用Go语言是操作Docker(go语言sdk)
- 2025-03-30 源码分析 kubelet gc 垃圾回收的实现原理
- 2025-03-30 一起使用GO(golang) 来做后台管理系统(11)双击表格更新数据保存
- 2025-03-30 Java程序员学Go语言指南(下篇)(java程序员需要学的东西)
- 2025-03-30 golang 限流——time/rate(golang限流器)
你 发表评论:
欢迎- 最近发表
-
- 给3D Slicer添加Python第三方插件库
- Python自动化——pytest常用插件详解
- Pycharm下安装MicroPython Tools插件(ESP32开发板)
- IntelliJ IDEA 2025.1.3 发布(idea 2020)
- IDEA+Continue插件+DeepSeek:开发者效率飙升的「三体组合」!
- Cursor:提升Python开发效率的必备IDE及插件安装指南
- 日本旅行时想借厕所、买香烟怎么办?便利商店里能解决大问题!
- 11天!日本史上最长黄金周来了!旅游万金句总结!
- 北川景子&DAIGO缘定1.11 召开记者会宣布结婚
- PIKO‘PPAP’ 洗脑歌登上美国告示牌
- 标签列表
-
- ifneq (61)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)