Foundry 架构实战:Go 后端读取本地部署区块链信息全流程

发布时间:2026/7/12 12:14:44

Foundry 架构实战:Go 后端读取本地部署区块链信息全流程
1. 引言在区块链开发中,本地测试环境是快速迭代和调试智能合约的关键。Foundry 作为新一代的以太坊开发工具链,以其极快的编译速度和原生 Solidity 测试支持而备受青睐。然而,在实际项目中,我们通常需要让后端服务(如 Go 应用)能够与本地部署的区块链进行交互,读取合约状态、监听事件或发送交易。本文将详细介绍从启动本地 Anvil 节点、部署智能合约,到使用 Go 后端连接并读取区块链信息的完整实战流程。通过一步步的演示,你将掌握如何搭建一个完整的本地开发环境,并让 Go 应用与区块链无缝对接。2. 环境准备与工具安装2.1 安装 Foundry首先,确保你的系统已安装 Foundry。可以通过以下命令安装:curl-Lhttps://foundry.paradigm.xyz|bashfoundryup安装完成后,验证安装:forge--versionanvil--versioncast--version2.2 创建 Foundry 项目创建一个新的 Foundry 项目:forge init foundry-democdfoundry-demo项目结构如下:foundry-demo/ ├── script/ # 部署脚本 ├── src/ # Solidity 合约 ├── test/ # 测试文件 ├── foundry.toml # 配置文件 └── lib/ # 依赖库2.3 准备 Go 开发环境确保已安装 Go(1.18+)并设置好 GOPATH:go version3. 启动本地区块链节点使用 Anvil 启动一个本地开发节点:anvil启动后,你将看到类似以下输出:_ _ (_) | | __ _ _ __ __ __ _ | | / _` | | '_ \ \ \ / / | | | | | (_| | | | | | \ V / | | | | \__,_| |_| |_| \_/ |_| |_| 1.5.1-stable (b0a9dd9ced 2025-12-22T11:39:01.425730780Z) https://github.com/foundry-rs/foundry Available Accounts ================== (0) 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 (10000.000000000000000000 ETH) (1) 0x70997970C51812dc3A010C7d01b50e0d17dc79C8 (10000.000000000000000000 ETH) (2) 0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC (10000.000000000000000000 ETH) (3) 0x90F79bf6EB2c4f870365E785982E1f101E93b906 (10000.000000000000000000 ETH) (4) 0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65 (10000.000000000000000000 ETH) (5) 0x9965507D1a55bcC2695C58ba16FB37d819B0A4dc (10000.000000000000000000 ETH) (6) 0x976EA74026E726554dB657fA54763abd0C3a0aa9 (10000.000000000000000000 ETH) (7) 0x14dC79964da2C08b23698B3D3cc7Ca32193d9955 (10000.000000000000000000 ETH) (8) 0x23618e81E3f5cdF7f54C3d65f7FBc0aBf5B21E8f (10000.000000000000000000 ETH) (9) 0xa0Ee7A142d267C1f36714E4a8F75612F20a79720 (10000.000000000000000000 ETH) Private Keys ================== (0) 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 (1) 0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d (2) 0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a (3) 0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6 (4) 0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a关键信息说明:RPC URL:http://localhost:8545(默认端口)链 ID: 31337(Anvil 默认)预充值账户: 10 个测试账户,每个有 10000 ETH私钥: 与账户一一对应,用于签名交易保持 Anvil 终端运行,这是我们的本地区块链节点。4. 编写并部署智能合约4.1 创建简单 ERC20 合约在src/SimpleERC20.sol中创建合约:// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract SimpleERC20 is ERC20, Ownable { constructor( string memory name, string memory symbol, uint256 initialSupply ) ERC20(name, symbol) Ownable(msg.sender) { _mint(msg.sender, initialSupply * 10 ** decimals()); } }4.2 创建部署脚本在script/DeploySimpleERC20.s.sol中创建部署脚本:// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import "forge-std/Script.sol"; import "../src/SimpleERC20.sol"; contract DeploySimpleERC20 is Script { function run() external returns (SimpleERC20 token) { vm.startBroadcast(); token = new SimpleERC20( "MyToken", "MTK", 1_000_000 // 初始供应量 ); vm.stopBroadcast(); } }4.3 部署合约到本地节点使用 Forge 脚本部署合约:forge script script/DeploySimpleERC20.s.sol\--rpc-url http://localhost:8545\--broadcast\--private-key 0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d\--tcDeploySimpleERC20部署成功后,你将看到:[⠊] Compiling... No files changed, compilation skipped Script ran successfully. == Return == token: contract SimpleERC20 0x8464135c8F25Da09e49BC8782676a84730C318bC == Logs == Contract deployed at: 0x8464135c8F25Da09e49BC8782676a84730C318bC Token Name: MyToken Token Symbol: MTK Initial Supply: 1000000 Owner: 0x70997970C51812dc3A010C7d01b50e0d17dc79C8关键信息记录:合约地址:0x8464135c8F25Da09e49BC8782676a84730C318bC合约所有者:0x70997970C51812dc3A010C7d01b50e0d17dc79C8(账户1)5. 生成 Go 绑定文件5.1 提取 ABI 和字节码首先,从编译输出中提取 ABI 和字节码:# 提取 ABIjq .abi out/SimpleERC20.sol/SimpleERC20.jsonSimpleERC20.abi# 提取字节码jq-r.bytecode.object out/SimpleERC20.sol/SimpleERC20.jsonSimpleERC20.bin5.2 使用 abigen 生成 Go 绑定确保已安装abigen(通常随geth安装):# 安装 geth(如果未安装)# 或者直接下载 abigen# 生成 Go 绑定文件abigen--abiSimpleERC20.abi--binSimpleERC20.bin--pkgsrc--out./src/simpleerc20.go生成的simpleerc20.go文件包含:合约结构体定义合约方法绑定事件监听器交易发送方法6. 编写 Go 后端应用6.1 初始化 Go 模块go mod init foundry-demo6.2 安装依赖go get github.com/ethereum/go-ethereum go mod tidy6.3 创建主程序创建main.go:packagemainimport("context""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""foundry-demo/src"// 导入生成的绑定包)funcmain(){// 1. 连接本地 Anvil 节点client,err:=ethclient.Dial("http://localhost:8545")iferr!=nil{log.Fatalf("Failed to connect to the Ethereum client: %v",err)}deferclient.Close()// 2. 设置合约地址contractAddress:=common.HexToAddress("0x8464135c8F25Da09e49BC8782676a84730C318bC")// 3. 创建合约实例instance,err:=src.NewSimpleERC20(contractAddress,client)iferr!=nil{log.Fatalf("Failed to instantiate contract: %v",err)}// 4. 读取合约信息(只读调用)ctx:=context.Background()// 获取代币名称name,err:=instance.Name(bind.CallOpts{Context:ctx})iferr!=nil{log.Fatalf("Failed to get token name: %v",err)}log.Printf("Token name: %s",name

相关新闻

Unity微信小游戏发布实战:IIS本地测试、跨域问题与完整上线指南

Unity微信小游戏发布实战:IIS本地测试、跨域问题与完整上线指南

2026/7/12 12:14:44

1. 项目概述:从引擎到小游戏的“最后一公里”如果你正在用团结引擎(Unity)开发微信小游戏,并且已经完成了核心玩法和美术资源的制作,那么恭喜你,你已经走完了90%的路。但剩下的10%,尤其是从本地…

压电蜂鸣器与PIC微控制器的环境警报系统设计

压电蜂鸣器与PIC微控制器的环境警报系统设计

2026/7/12 12:14:44

1. 项目概述:基于压电蜂鸣器与微控制器的环境警报系统 在工业控制、安防设备和智能家居场景中,可靠的声音警报始终是不可替代的人机交互方式。最近我在一个冷链监控项目中,需要为不同环境(-20℃冷库到50℃户外)设计通用…

PIC单片机实现锂电池组电压主动均衡系统设计

PIC单片机实现锂电池组电压主动均衡系统设计

2026/7/12 12:14:44

1. 项目背景与需求分析在锂离子电池组应用中,电压平衡是确保电池安全性和延长使用寿命的关键技术。当多节电池串联使用时,由于制造工艺差异、温度分布不均等因素,各单体电池的充电状态会出现不一致,导致某些电池过充或过欠压&…

Unity后处理插件CameraFilterPack 4.0.0实战:从入门到精通,打造电影级游戏画面

Unity后处理插件CameraFilterPack 4.0.0实战:从入门到精通,打造电影级游戏画面

2026/7/12 13:44:48

1. 项目概述:为什么你的游戏画面总“差点意思”?你有没有过这样的经历?在Unity里,模型是美术精心雕琢的,光照是烘焙了半天的,场景布局也反复推敲过,但最终运行起来,画面就是感觉“平…

抖音内容批量下载终极指南:开源工具一站式解决方案

抖音内容批量下载终极指南:开源工具一站式解决方案

2026/7/12 13:44:48

抖音内容批量下载终极指南:开源工具一站式解决方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support.…

如何快速配置八大网盘直链下载工具:面向新手的完整教程

如何快速配置八大网盘直链下载工具:面向新手的完整教程

2026/7/12 13:44:48

如何快速配置八大网盘直链下载工具:面向新手的完整教程 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…

3步掌握Windows安卓应用安装:告别模拟器的轻量级解决方案

3步掌握Windows安卓应用安装:告别模拟器的轻量级解决方案

2026/7/12 13:44:48

3步掌握Windows安卓应用安装:告别模拟器的轻量级解决方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否厌倦了传统安卓模拟器的庞大体积和缓慢启动…

电吉他自学的科学路径:肌肉记忆与反馈闭环构建指南

电吉他自学的科学路径:肌肉记忆与反馈闭环构建指南

2026/7/12 13:44:48

1. 这不是“学吉他”,而是重建一套肌肉记忆系统“自学电吉他的你们是怎么学的?”——这句话背后藏着的,根本不是“要不要报班”“用不用APP”的选择题,而是一场持续数月、甚至一两年的神经-肌肉协同重构工程。我带过上百个零基础学…

抖音素材高效收集指南:如何用开源工具批量下载视频、音乐和图集

抖音素材高效收集指南:如何用开源工具批量下载视频、音乐和图集

2026/7/12 13:34:47

抖音素材高效收集指南:如何用开源工具批量下载视频、音乐和图集 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallb…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/12 0:03:42

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/12 0:03:42

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/12 0:03:42

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/12 0:03:42

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/12 0:03:42

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/12 0:03:42

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…