Solana质押-编写应用级别的质押合约-解质押部分
核心代码地址提交:
https://github.com/SoniaChan33/anchor_social/commit/b6ca707c33992ef5e72d1be5e4b6edc14e385b98
1. 解质押功能核心逻辑
解质押是质押流程的反向操作,核心目标是将质押的 NFT 归还给用户,并销毁质押时获得的流动性代币。具体流程通过 nft_unstake 函数实现,步骤如下:
1.1 权限校验
函数首先验证解质押操作的合法性,确保:
解质押的 NFT 与质押记录中的 NFT 匹配(stake_info.nft_mint_account == nft_mint_account.key());
发起解质押的用户是原质押人(stake_info.staker == authority.key())。
若不满足,返回 UnstakeError::NoAuthority 错误。
// 权限校验代码(源自nft_unstake.rs)
require!(
&ctx.accounts.stake_info.nft ...
Solana质押-编写应用级别的质押合约-质押部分
核心代码见:
https://github.com/SoniaChan33/anchor_social/commit/48b428c2a33213275cea8cc42be199f8bfc7a332 nft mint 编写
https://github.com/SoniaChan33/anchor_social/commit/a27180fc342c3be81e670794f0e0ddf22817881c stake nft
1. NFT 铸造(Mint)功能
1.1 功能说明
通过 nft_mint_v1 方法实现 NFT 铸造,遵循 MPL Token Metadata 标准,创建包含元数据的唯一 NFT,主要流程包括:
创建 NFT 元数据账户
铸造 1 个代币到关联账户
创建主版本账户(Master Edition)确保唯一性
1.2 核心实现(nft_mint.rs)
1.2.1 铸造方法
pub fn nft_mint_v1(ctx: Context<NFTMint>, nft_id: String) -> ...
Solana[part15]_Solana质押-流动性质押
一、流动性质押核心概念与角色
1. 基本定义
流动性质押(Liquid Staking)是一种允许用户质押加密资产支持区块链网络安全,同时通过接收流动性代币(Liquid Staking Token, LST)保持资产流动性的机制。
在Solana生态中,用户质押SOL后会收到对应比例的LST(如mSOL、stSOL等),这些代币可在DeFi应用中自由使用(交易、借贷等),同时仍能获得质押奖励。
2. 工作原理
graph TD
A[用户质押SOL] --> B[流动性质押协议接收SOL]
B --> C[协议分配SOL给验证者节点]
B --> D[用户获得等额LST]
D --> E[LST在DeFi场景使用]
C --> F[产生质押奖励]
F --> G[LST价值随奖励增值]
D --> H[用户赎回LST为SOL]
3. 与原生质押的核心区别
特性
原生质押
流动性质押
资产流动性
低(解锁需2 ...
Solana[part14]_Solana质押-native stake
什么是 Solana Native Staking?
Solana 的原生质押(Native Staking)是指将 SOL 代币质押给验证者,以支持 Solana 网络的安全运行并获得相应奖励的过程。通过质押,用户可以参与网络共识,同时获得年化收益(APY 通常在 4-8% 之间浮动)。
一、钱包操作方式
1. 准备工作
安装支持 Solana 质押的钱包(推荐:Phantom、Solflare、Ledger Live)
确保钱包中有足够的 SOL(至少需要覆盖质押金额 + 交易手续费)
了解 Solana 验证者的基本信息(可以在 Solana Validator Explorer 查看)
2. 使用 Phantom 钱包进行质押
步骤 1:打开 Phantom 钱包并连接到 Solana 主网
确保钱包网络已切换至 “Solana Mainnet Beta”
步骤 2:导航至质押页面
在钱包主页点击 “Stake” 或 “质押” 选项
点击 “Add Stake” 或 “添加质押” 按钮
步骤 3: ...
Solana[part13]_Anchor实战:为用户Mint Spl TOKEN
该部分代码见:https://github.com/SoniaChan33/anchor_social/commit/5abd954500f2926d999ac644c18a97c91cde9fb6
createLike指令添加需要的account
/anchor_social/src/instructions/tweet.rs
#[derive(Accounts)]
pub struct CreateLike<'info> {
#[account(
mut,
seeds = [b"mint_v3",],
bump,
)]
pub mint_account: Account<'info, Mint>,
#[account(
init_if_needed,
payer = authority,
associated_token::mint = mint_a ...
Solana[part12]_Anchor实战:spl token&mint账户的创建
一、功能概述
createTokenMintAccount 是项目中用于创建代币铸造(Mint)账户及关联元数据账户的核心功能,基于 Solana 区块链和 Anchor 框架实现。其核心目标是:
通过 Anchor 指令初始化一个由 PDA(程序派生地址)控制的 SPL Token Mint 账户;
通过 CPI(跨程序调用)调用 Metaplex 元数据程序的 create_metadata_accounts_v3 方法,为 Mint 账户创建元数据(名称、符号、URI 等)。
二、token.rs 实现细节解析
1. 核心函数:create_token_mint_account
该函数是指令的入口,负责初始化 mint 账户并触发元数据账户的 CPI 调用,代码逻辑如下:
pub fn create_token_mint_account(ctx: Context<CreateTokenMintAccount>) -> Result<()> {
// 定 ...
Solana[part11]_Anchor实战:用户发帖&点赞
发帖功能(createTweet)
1. 核心数据结构
发帖功能的核心数据结构为Tweet,定义在programs/anchor_social/src/state/tweet.rs中,用于存储帖子内容及点赞数:
// programs/anchor_social/src/state/tweet.rs
use anchor_lang::prelude::*;
#[account]
#[derive(InitSpace)]
pub struct Tweet {
#[max_len(50)] // 限制帖子内容最大长度为50字符
pub body: String, // 帖子内容
pub like_count: u64, // 点赞数,初始为0
}
impl Tweet {
pub const SEED_PREFIX: &'static str = "tweet"; // PDA种子前缀
// 初始化新帖子
pub fn ...
Solana[part10]_Anchor实战:创建用户profile
一、项目架构概览
1.1 整体架构
anchor_social/
├── programs/ # Solana 智能合约源代码
│ └── anchor_social/ # 核心合约模块
│ ├── src/ # Rust 源代码
│ │ ├── lib.rs # 程序入口和指令路由
│ │ ├── instructions/ # 指令处理逻辑
│ │ └── state/ # 链上状态定义
│ └── Cargo.toml # Rust 项目配置
├── app/ # 前端交互代码
│ ├── api/ # API 接口模块
│ │ ├── wallet.ts ...
Solana[part9]_Anchor入门&账户的概念和用法
一、Anchor框架概述
Anchor是Solana区块链生态中用于简化智能合约开发的核心框架,其核心优势在于将复杂的账户验证逻辑与业务逻辑分离,通过声明式语法降低开发门槛。Anchor提供了以下核心功能:
账户验证:通过#[account]宏定义账户结构,自动验证账户状态
指令分离:将交易逻辑拆分为独立的指令处理函数
PDA管理:内置对Program Derived Addresses(PDA)的支持
错误处理:自定义错误类型及友好的错误提示
安装与配置
# 安装Anchor CLI
cargo install --git https://github.com/coral-xyz/anchor anchor-cli --locked
# 初始化项目
anchor init my_project
cd my_project
二、PDA(Program Derived Address)核心概念
PDA是Solana中一种特殊的账户地址,其生成基于特定的种子(seeds)和程序ID(Program ID)。与普通 ...
Solana[part8]_Solana 生态中的协议与标准库
一、协议基础:定义与生态差异
1.1 区块链协议的本质
区块链协议是定义网络交互规则、数据结构和业务逻辑的规范,是智能合约和应用的“底层规则集”。例如:
代币协议规定资产的发行(Mint)、转移(Transfer)、销毁(Burn) 逻辑;
Swap协议定义两种资产的兑换规则(如价格算法、流动性池交互)。
类比互联网:如同HTTP协议规定网页传输规则,区块链协议定义“价值与逻辑”的传输标准。
1.2 不同公链协议的核心差异
以 以太坊(ERC标准) 和 Solana(SPL标准) 对比:
维度
以太坊(ERC)
Solana(SPL)
底层架构
账户模型(EOA+合约账户),单线程执行
账户模型(可执行+数据账户,关联账户),并行执行(Sealevel)
开发语言
Solidity
Rust
性能导向
通用性优先(牺牲部分效率)
高性能优先(高TPS、低延迟)
协议设计
灵活(如ERC-721A优化NFT批量Mint)
高效(如SPL-Token支持并行转移)
二、Solana核心协议解 ...

![Solana[part17]_Solana质押-编写应用级别的质押合约-解质押部分](https://img.soniachen.com/blog/posts/2025/08/solanap17.jpg)
![Solana[part16]_Solana质押-编写应用级别的质押合约-质押部分](https://img.soniachen.com/blog/posts/2025/08/solanap16.jpg)
![Solana[part15]_Solana质押-流动性质押](https://img.soniachen.com/blog/posts/2025/08/solanapart15.jpg)
![Solana[part14]_Solana质押-native stake](https://img.soniachen.com/blog/posts/2025/08/Solana%20part4.jpg)
![Solana[part13]_Anchor实战:为用户Mint Spl TOKEN](https://img.soniachen.com/blog/posts/2025/08/Solanapart13.jpg)
![Solana[part12]_Anchor实战:spl token&mint账户的创建](https://img.soniachen.com/blog/posts/2025/08/solanapart12.jpg)
![Solana[part11]_Anchor实战:用户发帖&点赞](https://img.soniachen.com/IMG_5493.jpg?_r_=22ed49e2-32d3-eee4-a34c-3e4fc7c58d8a)
![Solana[part10]_Anchor实战:创建用户profile](https://img.soniachen.com/IMG_5493.jpg?_r_=525d2173-93ba-17d1-a0be-99b79ba09ac2)
![Solana[part9]_Anchor入门&账户的概念和用法](https://img.soniachen.com/IMG_5493.jpg?_r_=27a8bfed-99b0-20b5-1a20-7e2dd8d636ed)
![Solana[part8]_Solana 生态中的协议与标准库](https://img.soniachen.com/IMG_5493.jpg?_r_=bf4ded69-c1a1-9e62-e679-9c1f5fa77c5a)

