Day 01 - 项目初始化与开发环境
日期: 第1天
目标: 搭建 Anchor + Rust 合约开发环境
📋 任务清单
- 安装 Rust 和 Solana CLI 工具链
- 初始化 Anchor 项目
- 配置开发环境和网络
- 理解项目目录结构
- 编写第一个简单的合约
💻 核心代码
1. 安装 Rust 和 Solana 工具链
# 安装 Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
# 安装 Solana CLI
sh -c "$(curl -sSfL https://release.solana.com/v1.18.0/install)"
export PATH="/home/YOUR_USER/.local/share/solana/install/active_release/bin:$PATH"
# 验证安装
rustc --version
solana --version
2. 安装 Anchor 框架
# 使用 Cargo 安装 Anchor
cargo install --git https://github.com/coral-xyz/anchor avm --locked --force
# 安装特定版本
avm install 0.30.1
avm use 0.30.1
# 验证安装
anchor --version
3. 创建新 Anchor 项目
# 创建项目
anchor init pump_contract
cd pump_contract
# 项目结构
pump_contract/
├── programs/ # 合约代码
│ └── pump_contract/
│ └── src/
│ └── lib.rs
├── tests/ # 测试文件
├── Cargo.toml # Rust 配置
├── Anchor.toml # Anchor 配置
├── package.json # Node.js 依赖
└── tsconfig.json # TypeScript 配置
4. 配置 Anchor.toml
[toolchain]
anchor_version = "0.30.1"
[features]
resolution = true
skip-lint = true
[programs.localnet]
geng = "YOUR_PROGRAM_ID"
[programs.devnet]
geng = "YOUR_PROGRAM_ID"
[programs.mainnet]
geng = "YOUR_PROGRAM_ID"
[provider]
cluster = "localnet"
wallet = "~/.config/solana/id.json"
[scripts]
test = "anchor test"
5. 配置 Cargo.toml
[dependencies]
anchor-lang = "0.30.1"
anchor-spl = "0.30.1"
spl-token = "4"
[lib]
crate-type = ["cdylib", "rlib"]
[[bin]]
name = "pump_contract"
path = "src/lib.rs"
crate-type = ["cdylib"]
6. 设置 Solana 本地网络
# 启动本地验证器
solana-test-validator
# 在另一个终端检查状态
solana status
# 获取测试 SOL
solana airdrop 10 <YOUR_WALLET_ADDRESS>
7. 基础合约 (src/lib.rs)
use anchor_lang::prelude::*;
declare_id!("YOUR_PROGRAM_ID");
#[program]
pub mod pump_contract {
use super::*;
pub fn initialize(ctx: Context<Initialize>) -> Result<()> {
let state = &mut ctx.accounts.state;
state.authority = ctx.accounts.authority.key();
state.initialized = true;
Ok(())
}
}
#[derive(Accounts)]
pub struct Initialize<'info> {
#[account(init, payer = authority, space = 8 + 32 + 1)]
pub state: Account<'info, State>,
#[account(mut)]
pub authority: Signer<'info>,
pub system_program: Program<'info, System>,
}
#[account]
pub struct State {
pub authority: Pubkey,
pub initialized: bool,
}
⚠️ 常见问题
问题1:Anchor 版本冲突
现象: error: failed to parse manifest at...
解决方案: 确保 Anchor 版本与项目配置一致
# 检查当前版本
anchor --version
# 切换到正确版本
avm use 0.30.1
# 如果还有问题,清理重建
rm -rf target node_modules
cargo clean
anchor build
问题2:Program ID 未定义
现象: error: the Program ID of the account ... has not been set
解决方案: 生成 Program ID 并配置
# 生成新的 Program ID
solana-keygen grind --starts-with geng:1 --outfile ./target/deploy/geng-keypair.json
# 更新 declare_id! 宏
# declare_id!("新的_PROGRAM_ID");
# 更新 Anchor.toml
# geng = "新的_PROGRAM_ID"
问题3:本地验证器连接失败
现象: error: Unable to confirm transaction
解决方案: 确保本地验证器正在运行
# 在新终端启动验证器
solana-test-validator
# 检查验证器状态
solana status
# 应该显示 "localnet" 和 "Ledger length: XXX"
📝 总结
✅ 完成 Anchor 开发环境搭建,包括:
- Rust 和 Solana 工具链安装
- Anchor 框架配置
- 项目结构理解
- 基础合约编写
- 本地测试网络设置
下一步: Day 02 将深入学习 Solana 账户模型和 PDA
时间估计: 1-2 小时 | 难度: ⭐ 简单 | 关键词: Anchor、Rust、Solana CLI、环境配置