Uniswap源码分析:(一)环境搭建

目录

这系列文章准备详细看看Uniswap的代码,使用的是,Raydium v3 AMM (CLMM) ,Github:

https://github.com/raydium-io/raydium-clmm

这是第一篇,主要讲环境搭建和部署的部分。

环境搭建

rust

安装rust

% curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

% rustup --version
rustup 1.28.2 (e4f3ad6f8 2025-04-28)
info: This is the version for the rustup toolchain manager, not the rustc compiler.
info: The currently active `rustc` version is `rustc 1.90.0 (1159e78c4 2025-09-14)`

Solana cli

Solana工具套件(CLI)是与Solana网络交互的核心工具,用于管理钱包、部署程序和发送交易。

安装solana

% sh -c "$(curl -sSfL https://release.anza.xyz/v2.1.0/install)"
% solana --version
solana-keygen --version
solana-cli 2.1.0 (src:c1080de4; feat:3176011155, client:Agave)
solana-keygen 2.1.0 (src:c1080de4; feat:3176011155, client:Agave)
% solana-keygen new
...


钱包创建:
```sh
% solana-keygen new
...
pubkey:GdZirEabxgYcvMzvmDDeZYyypWN13D8JPpbztKyrPn8k
...

获取创建钱包的pubkey:

% solana address
GdZirEabxgYcvMzvmDDeZYyypWN13D8JPpbztKyrPn8k

获取账户信息


% solana account GdZirEabxgYcvMzvmDDeZYyypWN13D8JPpbztKyrPn8k

Public Key: GdZirEabxgYcvMzvmDDeZYyypWN13D8JPpbztKyrPn8k
Balance: 500000991.770995677 SOL
Owner: 11111111111111111111111111111111
Executable: false
Rent Epoch: 18446744073709551615

安装avm

Anchor是Solana上一个流行的智能合约开发框架,它简化了开发、测试和部署流程。AVM用于管理Anchor的版本。

% cargo install --git https://github.com/coral-xyz/anchor avm --locked --force
% avm install latest
% avm use latest

项目配置

  1. 克隆 Raydium CLMM 仓库
% git clone https://github.com/raydium-io/raydium-amm-v3
  1. 配置 Solana CLI 指向本地网络

默认情况下,Solana CLI可能连接到主网 (mainnet-beta) 或开发网 (devnet)。为了进行本地开发,必须将其指向本地测试验证器。

检查RPC URL字段,确认当前连接的网络。:

% solana config get
Config File: /Users/xxx/.config/solana/cli/config.yml
RPC URL: https://api.mainnet-beta.solana.com 
WebSocket URL: wss://api.mainnet-beta.solana.com/ (computed)
Keypair Path: /Users/xxx/.config/solana/id.json 
Commitment: confirmed 

如果RPC不是本地网络,切换到本地网络:

% solana config set --url localhost
Config File: /Users/xxx/.config/solana/cli/config.yml
RPC URL: http://localhost:8899 
WebSocket URL: ws://localhost:8900/ (computed)
Keypair Path: /Users/xxx/.config/solana/id.json 
Commitment: confirmed 
  1. 修改源代码以适应本地部署

为了让程序在本地正确运行并指定管理员,需要修改部分源代码。修改programs/amm/src/lib.rs中的代码:

  • 将条件编译特性#[cfg(feature = "devnet")]更改为#[cfg(feature = "localnet")]
  • admin::ID的值设置为你自己的钱包公钥
pub mod admin {
    use super::{pubkey, Pubkey};
    #[cfg(feature = "localnet")]
    pub const ID: Pubkey = pubkey!("GdZirEabxgYcvMzvmDDeZYyypWN13D8JPpbztKyrPn8k  ");

    #[cfg(not(feature = "localnet"))]
    pub const ID: Pubkey = pubkey!("GThUX1Atko4tqhN2NaiTazWSeFWMuiUvfFnyJyUghFMJ");
}

构建、部署与验证

  1. 启动本地测试验证器

这个命令会运行一个完整的、私有的、仅存在于你电脑上的Solana区块链。在后续步骤完成前,请保持此窗口持续运行。

% solana-test-validator
--faucet-sol argument ignored, ledger already exists
Ledger location: test-ledger
Log: test-ledger/validator.log
⠚ Initializing...                                                                                                                                            Waiting for fees to stabilize 1...
Identity: 4D6F6LWa39h2FVVVcNsi64N1uXtg5hvV9wM17dxvKg7Y
Genesis Hash: EGCeD1zgcUPy3EbZcmApnMGR1WszGEjikYeBEt2yjY27
Version: 2.1.0
Shred Version: 64650
Gossip Address: 127.0.0.1:1024
TPU Address: 127.0.0.1:1027
JSON RPC URL: http://127.0.0.1:8899
WebSocket PubSub URL: ws://127.0.0.1:8900
⠤ 00:22:23 | Processed Slot: 2924 | Confirmed Slot: 2924 | Finalized Slot: 2893 | Full Snapshot Slot: 2801 | Incremental Snapshot Slot: - | Transactions: 4155 | ◎499.98848500
  1. 编译并同步程序
  • 编译命令:此命令会将programs/目录下的Rust代码编译成Solana网络可执行的BPF字节码。
anchor build
  • 同步密钥:此命令会自动更新源代码中declare_id!宏里的程序ID,确保其与部署时使用的ID一致
anchor keys sync
  1. 为钱包空投测试币

向你的默认钱包地址请求1000个测试SOL。

% solana airdrop 1000
Requesting airdrop of 1000 SOL

Signature: 3HNXJdESA1ndZGK1C28zJVPmEuKohGkZTmiH34ADNcWYgw9w36GdQequuGTuWfAGioD1fb3zzMGorgpSPzkUoujm

500001000 SOL
  1. 部署程序

请确保在Raydium项目的根目录下运行此命令

目的:将编译好的程序上传到正在运行的本地测试验证器上。

% anchor deploy
Deploying cluster: http://127.0.0.1:8899
Upgrade authority: /Users/xxx/.config/solana/id.json
Deploying program "raydium_amm_v3"...
Program path: /Volumes/Elements/github/raydium-amm-v3/target/deploy/raydium_amm_v3.so...
Program Id: A1pqTV22oGeNGjyYyYwfy7U9AK5NtCtCwWT9S6HXuaAN

Signature: 4NGBVPSzwnTtc1sSWgZGa5ASQ54LtYBVWhVCc7g7ghjA6DMQcGQa7qX6zwc5tvotejCu5heNRwdDUtkFNg9MgfhA

Deploy success
  1. 在浏览器中验证部署
  • 打开 Solscan 或其他Solana浏览器。
  • 点击Solscan Testnet,然后在Custom RPC输入本地节点地址:http://localhost:8899

将部署成功后返回的 Program ID 或 Signature 粘贴到搜索框中

你将能看到刚刚部署交易的详细信息,包括哪个账户发起了部署、消耗了多少费用以及程序ID是什么,从而完成端到端的验证。

alt text

目录