合约-Day 01 - 项目初始化与开发环境

0 阅读2分钟

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、环境配置