以太坊dApp开发Skill orchestration

这项技能专注于使用Scaffold-ETH 2框架,通过三个阶段(合约开发、前端构建、生产部署)规划、构建和部署完整的以太坊去中心化应用(dApp),适用于Web3开发和智能合约实现。关键词:以太坊、dApp开发、智能合约、区块链、Scaffold-ETH 2、Web3、去中心化应用、前端开发、IPFS部署。

DApp开发 0 次安装 0 次浏览 更新于 3/24/2026

name: 编排 description: AI代理如何规划、构建和部署一个完整的以太坊去中心化应用。Scaffold-ETH 2项目的三阶段构建系统。用于在以太坊上构建完整应用——从合约到前端再到生产部署到IPFS。

dApp编排

你可能做错的地方

SE2有特定的模式你必须遵循。 通用的“构建dApp”建议不适用。SE2自动生成deployedContracts.ts——不要编辑它。使用Scaffold钩子,而非原始wagmi。外部合约在构建前端前放入externalContracts.ts

有三个阶段。切勿跳过或合并它们。 合约 → 前端 → 生产。每个阶段都有验证门。

三阶段构建系统

阶段 环境 发生了什么
阶段1 本地分叉 合约 + UI在本地主机上。快速迭代。
阶段2 实时网络 + 本地UI 将合约部署到主网/L2。用真实状态测试。优化UI。
阶段3 生产 将前端部署到IPFS/Vercel。最终质量保证。

阶段1:脚手架(本地)

1.1 合约

npx create-eth@latest my-dapp
cd my-dapp && yarn install
yarn chain          # 终端1:本地节点
yarn deploy         # 终端2:部署合约

关键步骤:

  1. packages/foundry/contracts/(或packages/hardhat/contracts/)中编写合约
  2. 编写部署脚本
  3. 将所有外部合约添加到packages/nextjs/contracts/externalContracts.ts——在阶段1.2之前
  4. 编写测试(≥90%覆盖率)
  5. 移动前端前进行安全审计

验证: yarn deploy成功。deployedContracts.ts自动生成。测试通过。

1.2 前端

yarn chain           # 终端1
yarn deploy --watch  # 终端2:变更时自动重新部署
yarn start           # 终端3:Next.js在localhost:3000

使用SCAFFOLD钩子,而非原始WAGMI:

// 读取
const { data } = useScaffoldReadContract({
  contractName: "YourContract",
  functionName: "balanceOf",
  args: [address],
  watch: true,
});

// 写入
const { writeContractAsync, isMining } = useScaffoldWriteContract("YourContract");
await writeContractAsync({
  functionName: "swap",
  args: [tokenIn, tokenOut, amount],
  onBlockConfirmation: (receipt) => console.log("完成!", receipt),
});

// 事件
const { data: events } = useScaffoldEventHistory({
  contractName: "YourContract",
  eventName: "SwapExecuted",
  fromBlock: 0n,
  watch: true,
});

三按钮流程(强制)

任何代币交互显示一个按钮:

  1. 切换网络(如果链错误)
  2. 批准代币(如果授权不足)
  3. 执行动作(仅在1和2满足后)

切勿同时显示批准和执行按钮。

UX规则

  • 人类可读金额: formatEther() / formatUnits()用于显示,parseEther() / parseUnits()用于合约
  • 所有异步操作都有加载状态: isLoadingisMining在所有异步操作上
  • 在待处理交易期间禁用按钮(区块链需5-12秒)
  • 切勿使用无限批准——批准精确金额或3-5倍
  • 有帮助的错误: 将“资金不足”、“用户拒绝”、“执行回滚”解析为通俗语言

验证: 完整用户旅程在本地主机上使用真实钱包工作。所有边缘情况处理。

🚨 切勿将秘密提交到Git

在接触阶段2前,阅读此部分。 AI代理是GitHub上泄露凭证的头号来源。机器人实时抓取仓库并在几秒内利用泄露的秘密。

这意味着所有秘密——不只是钱包私钥:

  • 钱包私钥——几秒内资金被抽干
  • API密钥——Alchemy、Infura、Etherscan、WalletConnect项目ID
  • 嵌入密钥的RPC URL——例如https://base-mainnet.g.alchemy.com/v2/YOUR_KEY
  • OAuth令牌、密码、Bearer令牌

⚠️ 常见SE2陷阱:scaffold.config.ts

scaffold.config.ts中的rpcOverridesalchemyApiKey会提交到Git。切勿将API密钥直接粘贴到此文件。使用环境变量:

// ❌ 错误——密钥提交到公开仓库
rpcOverrides: {
  [chains.base.id]: "https://base-mainnet.g.alchemy.com/v2/8GVG8WjDs-LEAKED",
},

// ✅ 正确——密钥保持在.env.local中
rpcOverrides: {
  [chains.base.id]: process.env.NEXT_PUBLIC_BASE_RPC || "https://mainnet.base.org",
},

在每次git addgit commit前:

# 检查泄露的秘密
git diff --cached --name-only | grep -iE '\.env|key|secret|private'
grep -rn "0x[a-fA-F0-9]\{64\}" packages/ --include="*.ts" --include="*.js" --include="*.sol"
# 检查配置文件中的硬编码API密钥
grep -rn "g.alchemy.com/v2/[A-Za-z0-9]" packages/ --include="*.ts" --include="*.js"
grep -rn "infura.io/v3/[A-Za-z0-9]" packages/ --include="*.ts" --include="*.js"
# 如果任何匹配,停止。将秘密移动到.env并添加.env到.gitignore。

你的.gitignore必须包括:

.env
.env.*
*.key
broadcast/
cache/
node_modules/

SE2默认处理部署者密钥——yarn generate创建带有部署者密钥的.env.gitignore排除它。不要覆盖此模式。不要将密钥复制到脚本、配置文件或部署日志中。这包括RPC密钥、API密钥和任何凭证——不只是钱包密钥。

查看wallets/SKILL.md以获取完整密钥安全指南、如果已经泄露密钥该做什么,以及部署的安全模式。

阶段2:实时合约 + 本地UI

  1. 更新scaffold.config.tstargetNetworks: [mainnet](或你的L2)
  2. 资助部署者:yarn generateyarn account → 发送真实ETH
  3. 部署:yarn deploy --network mainnet
  4. 验证:yarn verify --network mainnet
  5. 用真实钱包测试,小额($1-10)
  6. 优化UI——移除SE2品牌,自定义样式

设计规则: 无LLM马虎。无通用紫色渐变。让它独特。

验证: 合约在区块浏览器上验证。完整旅程与真实合约工作。

阶段3:生产部署

部署前检查清单

  • onlyLocalBurnerWallet: true在scaffold.config.ts中(关键——防止生产环境中的燃烧器钱包)
  • 更新元数据(标题、描述、OG图像1200x630px)
  • 将所有测试值恢复为生产值

部署

IPFS(去中心化):

yarn ipfs
# → https://YOUR_CID.ipfs.cf-ipfs.com

Vercel(快速):

cd packages/nextjs && vercel

生产质量保证

  • [ ] 应用在公共URL加载
  • [ ] 钱包连接,网络切换工作
  • [ ] 读取 + 写入合约操作工作
  • [ ] 无控制台错误
  • [ ] 燃烧器钱包未显示
  • [ ] OG图像在链接预览中工作
  • [ ] 移动响应式
  • [ ] 用MetaMask、Rainbow、WalletConnect测试

阶段过渡规则

阶段3错误 → 回到阶段2(用本地UI + 生产合约修复) 阶段2合约错误 → 回到阶段1(本地修复,编写回归测试,重新部署) 切勿在生产环境中hack修复错误。

关键SE2目录

packages/
├── foundry/contracts/          # Solidity合约
├── foundry/script/             # 部署脚本
├── foundry/test/               # 测试
└── nextjs/
    ├── app/                    # 页面
    ├── components/             # React组件
    ├── contracts/
    │   ├── deployedContracts.ts   # 自动生成(不要编辑)
    │   └── externalContracts.ts   # 你的外部合约(编辑此文件)
    ├── hooks/scaffold-eth/     # 使用这些钩子
    └── scaffold.config.ts      # 主配置

AI代理商业:端到端流程(ERC-8004 + x402)

这是2026年以太坊的杀手级用例:自主代理发现、信任、支付和评级彼此——无人类介入循环。

完整周期

┌─────────────────────────────────────────────────────────────┐
│  1. 发现  代理查询ERC-8004 IdentityRegistry               │
│               → 找到带有“天气”服务标签的代理              │
│                                                              │
│  2. 信任   代理检查ReputationRegistry                      │
│               → 按在线时间>99%、质量>85过滤                │
│               → 挑选评分最高的天气代理                     │
│                                                              │
│  3. 调用   代理发送HTTP GET到天气端点                      │
│               → 接收402 Payment Required                   │
│               → PAYMENT-REQUIRED header: $0.10 USDC on Base │
│                                                              │
│  4. 支付   代理签署EIP-3009 transferWithAuthorization      │
│               → 用PAYMENT-SIGNATURE重试请求                │
│               → 服务器通过facilitator验证                   │
│               → 支付在Base上结算(约$0.001 gas)            │
│                                                              │
│  5. 接收   服务器返回200 OK + 天气数据                    │
│               → PAYMENT-RESPONSE header带交易哈希          │
│                                                              │
│  6. 评分   代理发布反馈到ReputationRegistry               │
│               → 值=95,标签=“质量”,端点=“...”            │
│               → 为下次调用者建立链上信誉                   │
└─────────────────────────────────────────────────────────────┘

具体实现(TypeScript代理)

import { x402Fetch } from '@x402/fetch';
import { createWallet } from '@x402/evm';
import { ethers } from 'ethers';

const wallet = createWallet(process.env.AGENT_PRIVATE_KEY);
const provider = new ethers.JsonRpcProvider('https://base-mainnet.g.alchemy.com/v2/YOUR_KEY');

const IDENTITY_REGISTRY = '0x8004A169FB4a3325136EB29fA0ceB6D2e539a432';
const REPUTATION_REGISTRY = '0x8004BAa17C55a88189AE136b182e5fdA19dE9b63';

// 1. 发现:找到提供天气服务的代理
const registry = new ethers.Contract(IDENTITY_REGISTRY, registryAbi, provider);
// 查询事件或使用The Graph子图进行索引代理发现

// 2. 信任:检查信誉
const reputation = new ethers.Contract(REPUTATION_REGISTRY, reputationAbi, provider);
const [count, value, decimals] = await reputation.getSummary(
  agentId, trustedClients, "quality", "30days"
);
// 仅在值/10^小数位数 > 85时继续

// 3-5. 支付 + 接收:x402Fetch处理整个402流程
const response = await x402Fetch(agentEndpoint, {
  wallet,
  preferredNetwork: 'eip155:8453'
});
const weatherData = await response.json();

// 6. 评分:发布链上反馈
const reputationWriter = new ethers.Contract(REPUTATION_REGISTRY, reputationAbi, signer);
await reputationWriter.giveFeedback(
  agentId, 95, 0, "quality", "weather", agentEndpoint, "", ethers.ZeroHash
);

这是代理经济。 无API密钥、无订阅、无发票、无信任假设。只有加密身份、链上信誉和HTTP原生支付。

构建此堆栈的关键项目

  • ERC-8004 — 代理身份 + 信誉(EF、MetaMask、Google、Coinbase)
  • x402 — HTTP支付协议(Coinbase)
  • A2A — 代理间通信(Google)
  • MCP — 模型上下文协议(Anthropic)
  • The Graph — 索引代理注册以快速发现
  • EigenLayer — 代理工作的加密经济验证

资源