这个项目包含了使用Go语言与以太坊区块链交互的完整示例,涵盖了智能合约开发、部署和交互的全过程。
ethereum_learn/
├── task1_1/ # 基础以太坊交互示例
│ ├── main.go # 区块信息查询和交易发送
│ └── go.mod # Go模块文件
└── task1_2/ # 智能合约开发示例
├── count.sol # Solidity智能合约源码
├── Count.abi # 合约ABI文件
├── Count.bin # 合约字节码文件
├── count.go # 自动生成的Go客户端
├── main.go # 合约部署和交互示例
├── go.mod # Go模块文件
└── README.md # 详细使用说明
- ✅ 连接到以太坊网络(Sepolia测试网)
- ✅ 查询区块信息
- ✅ 发送ETH交易
- ✅ 环境变量配置
- ✅ 模块化代码结构
- ✅ Solidity智能合约编写
- ✅ 合约编译(ABI和字节码生成)
- ✅ Go客户端代码自动生成
- ✅ 合约部署和交互
- ✅ 智能部署逻辑(避免重复部署)
- ✅ 完整的错误处理
- Go 1.19+
- Solidity编译器 (solc)
- 以太坊测试网账户(Sepolia)
- Infura账户(或其他以太坊节点提供商)
- 安装Solidity编译器:
# macOS
brew tap ethereum/ethereum
brew install solidity
# 验证安装
solc --version- 安装Go Ethereum工具:
go install github.com/ethereum/go-ethereum/cmd/abigen@latest- 创建
.env文件:
# 私钥 (64位十六进制字符串,不包含0x前缀)
PRIVATE_KEY=your_private_key_here
# Infura URL (替换your_project_id为你的实际项目ID)
INFURA_URL=https://sepolia.infura.io/v3/your_project_id_here
# 合约地址 (可选,用于task1_2避免重复部署)
CONTRACT_ADDRESS=0x1234567890123456789012345678901234567890- 获取测试ETH:
- 访问 Sepolia Faucet
- 输入你的钱包地址获取测试ETH
cd go-etherreum-learn/task1_1
go mod tidy
go run .cd go-etherreum-learn/task1_2
go mod tidy
go run .这个示例展示了如何:
- 连接到以太坊网络
- 查询特定区块的信息
- 发送ETH交易
- 使用环境变量管理敏感信息
主要功能:
GetClient()- 创建以太坊客户端连接GetBlockInfo()- 查询区块信息SendTransaction()- 发送ETH交易GetPrivateKeyHex()- 从环境变量读取私钥
这个示例展示了完整的智能合约开发流程:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract Count {
uint256 public count;
function increment() public {
count++;
}
}# 生成ABI文件
solc --abi count.sol -o . --overwrite
# 生成字节码文件
solc --bin count.sol -o . --overwriteabigen --abi Count.abi --bin Count.bin --pkg main --type Count --out count.goDeployCountContract()- 部署智能合约InteractWithCountContract()- 与合约交互- 智能部署逻辑(避免重复部署)
- Go语言 - 主要开发语言
- Go Ethereum - 以太坊Go客户端库
- Solidity - 智能合约开发语言
- Infura - 以太坊节点服务
- Sepolia测试网 - 以太坊测试网络
- 区块和交易
- Gas费用和Nonce
- 私钥和地址
- 网络连接
- Solidity语法
- 合约编译
- ABI和字节码
- 合约部署
- 客户端连接
- 交易发送
- 合约交互
- 错误处理
- 环境变量管理
- 模块化代码结构
- 错误处理
- 代码复用
A: 使用Sepolia测试网水龙头,如 Sepolia Faucet
A: 访问 Infura官网 注册账户并创建项目
A: 检查账户余额是否足够支付gas费用,确保私钥和网络配置正确
A: 在.env文件中配置CONTRACT_ADDRESS,程序会直接使用已部署的合约
可以考虑添加的功能:
- 事件监听
- 批量交易处理
- 合约升级
- 多网络支持
- 交易历史查询
- Gas价格优化
欢迎提交Issue和Pull Request来改进这个项目!
MIT License