ArbitrumdApp开发技能指南Skill arbitrum-dapp-skill

本技能指南是关于如何在 Arbitrum 区块链上使用 Stylus (Rust) 和 Solidity 开发去中心化应用 (dApp) 的完整教程。内容涵盖从本地开发环境搭建 (nitro-devnode)、智能合约编写与测试 (Rust/Solidity)、到前端 (React/Next.js) 集成 (viem/wagmi) 的全栈工作流。关键词:Arbitrum, dApp开发, 智能合约, Stylus, Rust, Solidity, 区块链开发, 前端集成, 本地测试, 部署指南。

链开发 0 次安装 6 次浏览 更新于 2/23/2026

name: arbitrum-dapp-skill description: 基于 Arbitrum 使用 Stylus (Rust) 和/或 Solidity 构建 dApp 的指导手册。涵盖本地开发节点设置、合约开发、测试、部署以及与 viem 的 React 前端集成。适用于启动新的 Arbitrum 项目、编写 Stylus 或 Solidity 合约、部署到 Arbitrum 或构建与 Arbitrum 合约交互的前端。

Arbitrum dApp 开发

技术栈

层级 工具 备注
智能合约 (Rust) stylus-sdk v0.10+ 编译为 WASM,在 Stylus VM 上运行
智能合约 (Solidity) Solidity 0.8.x + Foundry Arbitrum 上的标准 EVM 路径
本地节点 nitro-devnode 基于 Docker 的本地 Arbitrum 链
合约 CLI cargo-stylus 用于 Stylus 的检查、部署、导出 ABI
合约工具链 Foundry (forge, cast, anvil) 用于 Solidity 的构建、测试、部署、交互
前端 React / Next.js + viem + wagmi 使用 viem 处理所有链交互
包管理器 pnpm 支持工作区,速度快

决策流程

启动新合约时:

  1. 需要极致性能/更低 Gas? → 选择 Stylus Rust。参见 references/stylus-rust-contracts.md
  2. 需要广泛的工具兼容性/快速原型开发? → 选择 Solidity。参见 references/solidity-contracts.md
  3. 需要混合使用? → 两者都用。Stylus 和 Solidity 合约在 Arbitrum 上完全可互操作。

项目脚手架

推荐的单体仓库布局

my-arbitrum-dapp/
├── apps/
│   ├── frontend/            # React / Next.js 应用
│   ├── contracts-stylus/    # Rust Stylus 合约
│   ├── contracts-solidity/  # Foundry Solidity 合约
│   └── nitro-devnode/       # 本地开发链 (git 子模块)
├── pnpm-workspace.yaml
└── package.json

引导步骤

# 1. 创建工作区
mkdir my-arbitrum-dapp && cd my-arbitrum-dapp
pnpm init
printf "packages:
  - 'apps/*'
" > pnpm-workspace.yaml

# 2. 本地开发节点
git clone https://github.com/OffchainLabs/nitro-devnode.git apps/nitro-devnode
cd apps/nitro-devnode && ./run-dev-node.sh && cd ../..

# 3a. Stylus 合约
cargo stylus new apps/contracts-stylus

# 3b. Solidity 合约
cd apps && forge init contracts-solidity && cd ..

# 4. 前端
pnpm create next-app apps/frontend --typescript
cd apps/frontend
pnpm add viem wagmi @tanstack/react-query

核心工作流

Stylus Rust

# 验证
cargo stylus check --endpoint http://localhost:8547

# 部署 (使用 nitro-devnode 预注资的部署者账户)
cargo stylus deploy \
  --endpoint http://localhost:8547 \
  --private-key $PRIVATE_KEY

# 导出 ABI 供前端使用
cargo stylus export-abi

Solidity (Foundry)

# 构建
forge build

# 测试
forge test

# 本地部署 (使用 nitro-devnode 预注资的部署者账户)
forge script script/Deploy.s.sol --rpc-url http://localhost:8547 --broadcast \
  --private-key $PRIVATE_KEY

注意: nitro-devnode 附带一个预注资的部署者账户。默认私钥和地址请参见 references/local-devnode.md。对于测试网/主网,请通过环境变量使用您自己的密钥——切勿硬编码密钥。

前端 (viem + wagmi)

import { createPublicClient, http } from "viem";
import { arbitrumSepolia } from "viem/chains";

const client = createPublicClient({
  chain: arbitrumSepolia,
  transport: http(),
});

// 从合约读取数据
const result = await client.readContract({
  address: "0x...",
  abi: contractAbi,
  functionName: "myFunction",
});

完整模式(包括 wagmi 钩子、钱包连接和写入交易)请参见 references/frontend-integration.md

原则

  • 始终使用 viem 进行链交互。
  • 先在本地测试,使用 nitro-devnode,然后再部署到测试网。
  • 导出 ABI,无论是来自 Stylus (cargo stylus export-abi) 还是 Solidity (forge inspect),并将其保存在前端可以导入的共享位置。
  • 使用环境变量 存储 RPC URL、合约地址和私钥。切勿硬编码密钥。
  • Stylus 合约是 EVM 兼容的 —— 它们与 Solidity 合约共享相同的地址空间、存储模型和 ABI 编码。跨合约调用无缝工作。

参考资料

需要更深入指导时请查阅:

  • references/stylus-rust-contracts.md — Stylus SDK 模式、存储、宏、入口点
  • references/solidity-contracts.md — Arbitrum 上的 Solidity 细节和 Foundry 工作流
  • references/frontend-integration.md — React + viem + wagmi 模式
  • references/local-devnode.md — Nitro 开发节点设置、账户和调试
  • references/deployment.md — 部署到测试网和主网
  • references/testing.md — Stylus 和 Solidity 的测试策略