一个简单而完整的 Hello World 智能合约 DApp,展示了从智能合约开发到前端集成的完整 Web3 开发流程。
- 🔗 钱包连接: 支持多种钱包连接(MetaMask、WalletConnect 等)
- 📝 智能合约交互: 读取和修改区块链上的问候语
- 🚨 Alert 提示: 连接成功后显示钱包地址 + "hello"
- 🎨 现代化 UI: 基于 Tailwind CSS 的美观界面
- 📱 响应式设计: 支持桌面和移动端
- 🔧 开发友好: 完整的开发环境和调试工具
- Node.js 18+
- pnpm 8+
- Foundry
- Git
- 克隆项目
git clone <your-repo-url>
cd hello-contract- 安装依赖
pnpm install- 安装 Foundry(如果未安装)
# macOS/Linux
curl -L https://foundry.paradigm.xyz | bash
foundryup
# 或使用 Homebrew
brew install foundry- 启动本地区块链
# 在新终端窗口中运行
anvil- 编译和部署智能合约
# 编译合约
cd packages/contracts
forge build
# 部署到本地网络
ETHERSCAN_API_KEY=dummy forge script script/Deploy.s.sol \
--rpc-url http://localhost:8545 \
--private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 \
--broadcast- 配置前端环境
# 创建环境变量文件
cd packages/frontend
cp .env.example .env.local
# 编辑 .env.local,设置合约地址
# NEXT_PUBLIC_CONTRACT_ADDRESS=0x5FbDB2315678afecb367f032d93F642f64180aa3- 启动前端应用
# 回到项目根目录
cd ../..
# 启动前端开发服务器
pnpm frontend:dev- 访问应用
- 打开浏览器访问: http://localhost:3000
- 连接钱包并开始使用!
hello-contract/
├── packages/
│ ├── contracts/ # 智能合约 (Foundry)
│ │ ├── src/
│ │ │ └── HelloWorld.sol # 主合约文件
│ │ ├── script/
│ │ │ └── Deploy.s.sol # 部署脚本
│ │ ├── test/
│ │ │ └── HelloWorld.t.sol # 测试文件
│ │ └── foundry.toml # Foundry 配置
│ └── frontend/ # 前端应用 (Next.js)
│ ├── src/
│ │ ├── app/ # Next.js App Router
│ │ ├── components/ # React 组件
│ │ ├── hooks/ # 自定义 Hooks
│ │ └── lib/ # 工具库
│ ├── next.config.js # Next.js 配置
│ └── tailwind.config.js # Tailwind 配置
├── docs/ # 详细技术文档
├── package.json # 根 package.json
└── pnpm-workspace.yaml # pnpm 工作空间配置
- Foundry: 现代化的智能合约开发框架
- Solidity: 智能合约编程语言
- Anvil: 本地以太坊测试网络
- Next.js 15: React 全栈框架(App Router)
- TypeScript: 类型安全的 JavaScript
- Wagmi: React Hook 库,用于以太坊交互
- ConnectKit: 优雅的钱包连接 UI
- Tailwind CSS: 原子化 CSS 框架
- Viem: 轻量级以太坊 TypeScript 库
- pnpm: 快速、节省磁盘空间的包管理器
- ESLint: 代码质量检查
- Prettier: 代码格式化
-
连接钱包
- 点击"连接钱包"按钮
- 选择你的钱包类型(推荐 MetaMask)
- 授权连接
-
获取问候语
- 钱包连接成功后,点击"获取问候语 (显示 Alert)"
- 系统会弹出包含你的钱包地址和 "hello" 的提示框
-
修改问候语
- 在输入框中输入新的问候语
- 点击"设置问候语"
- 在钱包中确认交易
- 等待交易被区块链确认
如果你的 MetaMask 中没有本地网络,请添加以下配置:
- 网络名称: Localhost 8545
- RPC URL: http://localhost:8545
- 链 ID: 31337
- 货币符号: ETH
Anvil 提供了预设的测试账户,你可以导入以下私钥到 MetaMask:
私钥: 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
地址: 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
余额: 10000 ETH
cd packages/contracts
# 编译合约
forge build
# 运行测试
forge test
# 运行特定测试
forge test --match-test testSetGreeting
# 测试覆盖率
forge coveragecd packages/frontend
# 启动开发服务器
pnpm dev
# 类型检查
pnpm type-check
# 代码检查
pnpm lint
# 构建生产版本
pnpm build# 根目录下可用的命令
pnpm dev # 启动前端开发服务器
pnpm build # 构建所有包
pnpm test # 运行所有测试
pnpm contracts:compile # 编译合约
pnpm contracts:test # 测试合约
pnpm contracts:deploy # 部署合约
pnpm frontend:dev # 启动前端开发服务器
pnpm frontend:build # 构建前端- 获取测试网 ETH(从 Faucet)
- 获取 Alchemy 或 Infura API Key
- 获取 Etherscan API Key(用于合约验证)
# 创建环境变量文件
cp .env.example .env
# 编辑 .env 文件,填入以下信息:
export SEPOLIA_RPC_URL="https://eth-sepolia.g.alchemy.com/v2/YOUR_API_KEY"
export PRIVATE_KEY="your-wallet-private-key"
export ETHERSCAN_API_KEY="your-etherscan-api-key"cd packages/contracts
# 部署并验证合约
forge script script/Deploy.s.sol \
--rpc-url $SEPOLIA_RPC_URL \
--private-key $PRIVATE_KEY \
--broadcast \
--verify \
--etherscan-api-key $ETHERSCAN_API_KEY# 更新前端环境变量
cd packages/frontend
echo "NEXT_PUBLIC_CONTRACT_ADDRESS=your-deployed-contract-address" >> .env.local- 连接 GitHub 仓库到 Vercel
- 设置环境变量:
NEXT_PUBLIC_CONTRACT_ADDRESSNEXT_PUBLIC_INFURA_API_KEY
- 部署
cd packages/frontend
# 构建生产版本
pnpm build
# 启动生产服务器
pnpm start问题: 点击连接钱包后没有反应 解决方案:
- 确保安装了 MetaMask 或其他兼容钱包
- 检查浏览器是否阻止了弹窗
- 尝试刷新页面
问题: 交易被拒绝或失败 解决方案:
- 检查钱包中是否有足够的 ETH 支付 Gas
- 确认连接的网络是否正确(Localhost 或 Sepolia)
- 查看浏览器控制台的错误信息
问题: 无法连接到 Anvil 本地网络 解决方案:
- 确保 Anvil 正在运行 (
anvil命令) - 检查端口 8545 是否被其他程序占用
- 在 MetaMask 中添加本地网络配置
问题: 前端无法找到合约 解决方案:
- 确认
.env.local中的合约地址正确 - 重新部署合约并更新地址
- 检查网络是否匹配
cd packages/contracts
# 使用 cast 查询合约
cast call 0x5FbDB2315678afecb367f032d93F642f64180aa3 "getHello()" --rpc-url http://localhost:8545# 查看交易收据
cast receipt <transaction-hash> --rpc-url http://localhost:8545- 打开浏览器开发者工具
- 查看 Console 标签页的错误信息
- 使用 Network 标签页查看 RPC 调用
更多详细信息请查看: