Ethereum 学习项目

这个项目包含了使用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     # 详细使用说明

功能特性

Task 1.1 - 基础以太坊交互

  • ✅ 连接到以太坊网络(Sepolia测试网)
  • ✅ 查询区块信息
  • ✅ 发送ETH交易
  • ✅ 环境变量配置
  • ✅ 模块化代码结构

Task 1.2 - 智能合约开发

  • ✅ Solidity智能合约编写
  • ✅ 合约编译(ABI和字节码生成)
  • ✅ Go客户端代码自动生成
  • ✅ 合约部署和交互
  • ✅ 智能部署逻辑(避免重复部署)
  • ✅ 完整的错误处理

快速开始

环境要求

  • Go 1.19+
  • Solidity编译器 (solc)
  • 以太坊测试网账户(Sepolia)
  • Infura账户(或其他以太坊节点提供商)

安装依赖

  1. 安装Solidity编译器:
# macOS
brew tap ethereum/ethereum
brew install solidity

# 验证安装
solc --version
  1. 安装Go Ethereum工具:
go install github.com/ethereum/go-ethereum/cmd/abigen@latest

配置环境

  1. 创建.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
  1. 获取测试ETH:

运行示例

Task 1.1 - 基础交互

cd go-etherreum-learn/task1_1
go mod tidy
go run .

Task 1.2 - 智能合约

cd go-etherreum-learn/task1_2
go mod tidy
go run .

详细说明

Task 1.1 - 基础以太坊交互

这个示例展示了如何:

  • 连接到以太坊网络
  • 查询特定区块的信息
  • 发送ETH交易
  • 使用环境变量管理敏感信息

主要功能

  • GetClient() - 创建以太坊客户端连接
  • GetBlockInfo() - 查询区块信息
  • SendTransaction() - 发送ETH交易
  • GetPrivateKeyHex() - 从环境变量读取私钥

Task 1.2 - 智能合约开发

这个示例展示了完整的智能合约开发流程:

1. 智能合约编写

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Count {
    uint256 public count;

    function increment() public {
        count++;
    }
}

2. 合约编译

# 生成ABI文件
solc --abi count.sol -o . --overwrite

# 生成字节码文件
solc --bin count.sol -o . --overwrite

3. 生成Go客户端

abigen --abi Count.abi --bin Count.bin --pkg main --type Count --out count.go

4. 合约部署和交互

  • DeployCountContract() - 部署智能合约
  • InteractWithCountContract() - 与合约交互
  • 智能部署逻辑(避免重复部署)

技术栈

  • Go语言 - 主要开发语言
  • Go Ethereum - 以太坊Go客户端库
  • Solidity - 智能合约开发语言
  • Infura - 以太坊节点服务
  • Sepolia测试网 - 以太坊测试网络

学习要点

1. 以太坊基础概念

  • 区块和交易
  • Gas费用和Nonce
  • 私钥和地址
  • 网络连接

2. 智能合约开发

  • Solidity语法
  • 合约编译
  • ABI和字节码
  • 合约部署

3. Go与以太坊集成

  • 客户端连接
  • 交易发送
  • 合约交互
  • 错误处理

4. 最佳实践

  • 环境变量管理
  • 模块化代码结构
  • 错误处理
  • 代码复用

常见问题

Q: 如何获取测试ETH?

A: 使用Sepolia测试网水龙头,如 Sepolia Faucet

Q: 如何获取Infura API密钥?

A: 访问 Infura官网 注册账户并创建项目

Q: 合约部署失败怎么办?

A: 检查账户余额是否足够支付gas费用,确保私钥和网络配置正确

Q: 如何避免重复部署合约?

A: 在.env文件中配置CONTRACT_ADDRESS,程序会直接使用已部署的合约

扩展功能

可以考虑添加的功能:

  • 事件监听
  • 批量交易处理
  • 合约升级
  • 多网络支持
  • 交易历史查询
  • Gas价格优化

贡献

欢迎提交Issue和Pull Request来改进这个项目!

许可证

MIT License