Solana
未读Solana[part21]_ETF的赎回
代码:https://github.com/SoniaChan33/iswap/commit/c648cb122b2cc9a80a8085d78bdc9033ab83c954
赎回 ETF
以 ETF No.1 为例,ETF No.1 包含 jitoSOL 和 mSOL,权重为 20%、80%
当前价格: 1 JitoSOL = 1.06 SOL 1 mSOL = 1.35 SOL
用户当前持有 100 份 ETF No.1,计划卖出 ETF No.1 100 份
获得:(100 \times 20% \times 1.06 + 100 \times 80% \times 1.35 = 129.2 \ \text{SOL})
方案:
【用户】【Burn】100 份 ETF No.1(注:原文 “ETE” 为笔误,应为 “ETF”)
【合约】【Transfer】JitoSOL 20 份和 mSOL 80 份到【用户】
【用户】通过 ray 或者 okx 等平台,将 80 mSOL 和 20 JitoSOL 兑换为 129.2 SOL
➜ ...
Solana
未读Solana[part20]_ETF的购买
购买 ETF
基本思路
以 ETF No.1 为例,ETF No.1 包含 jitoSOL 和 mSOL,权重分别为 20%、80%。 「 etf里面不是token账户吗 拿来的sol 」
当前价格
1 JitoSOL = 1.16 SOL
1 mSOL = 1.25 SOL
用户需求与成本计算
用户当前持有 SOL,计划购买 ETF No.1 100 份,需花费:100×20%×1.16+100×80%×1.25=123.2 SOL
方案一:前端 swap
【用户】 通过 ray 或 okx 等平台,将 123.2 SOL 换出 80 mSOL 和 20 JitoSOL。
【用户】 执行【Transfer】操作,将 JitoSOL 20 份和 mSOL 80 份转入【合约】。
【合约】 执行【Mint】操作,向【用户】发行 100 份 ETF No.1。
方案二:合约 swap
【用户】 执行【Transfer】操作,将 123.2 SOL 转入【合约】。
【合约】 通过 ray 或 okx 等平台,将 123.2 SOL 换出 ...
Solana
未读Solana实战Bug记录
Cross-program invocation with unauthorized signer or writable account
问题
解决方案
PDA 派生路径不一致
统一 seeds 和 signer_seeds
Mint Authority 未授权
在 CPI 中使用 signer_seeds 显式授权
Metadata 账户约束错误
显式指定 Token Metadata Program 地址
Mint Authority 设置错误
确保 mint::authority 指向 PDA 并通过签名授权
let signer_seeds: &[&[&[u8]]] = &[&[
EtfToken::SEEDS_PREFIX.as_bytes(),
m.as_ref(),
&[ctx.bumps.etf_token_info],
]];
// 需要和创建账户的时候设置的约束一致
-----
#[account( ...
ETF的介绍和创建指令实现
代码提交地址:https://github.com/SoniaChan33/iswap/commit/25b017929923a3d1e46d853f3a12da05f0b77172
一、项目概述
iSwap项目中的ETF创建功能用于在Solana区块链上生成自定义ETF(交易所交易基金),核心目标是实现ETF相关账户的创建与管理,包括ETF信息存储账户、资产关联账户(ATA)、ETF代币铸造账户(Mint)及元数据(Metadata)账户,确保所有操作的原子性与链上数据一致性。
二、核心链上组件(Rust程序)
链上逻辑通过Solana程序(智能合约)实现,负责ETF相关账户的初始化、数据存储及跨程序调用(CPI)。
1. 账户结构定义(etf_token.rs)
定义了链上存储ETF数据的核心账户结构,用于持久化ETF的关键信息。
EtfToken 账户
存储ETF的整体信息,包括铸造账户地址、创建者、创建时间、描述及资产列表:
#[account]
#[derive(InitSpace)]
pub struct EtfToken {
...
Solana DAPP-前端单元测试与合约接入
一、初始化 Solana DApp 项目
1. 环境准备
先确保安装基础工具:
# 安装 Node.js(推荐 v16+)
# 安装 Solana CLI(用于本地节点和钱包管理)
sh -c "$(curl -sSfL https://release.solana.com/v1.18.4/install)"
# 检查版本
solana --version
node --version
2. 初始化项目
使用官方模板创建项目:
npx create-solana-dapp@latest my-solana-dapp
cd my-solana-dapp
3. 项目结构解析(核心文件)
my-solana-dapp/
├── app/ # 前端代码(React)
├── programs/ # 后端程序(Rust)
│ └── my_solana_dapp/ # 核心逻辑
├── tests/ # ...
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[part21]_ETF的赎回](https://img.soniachen.com/IMG_5493.jpg?_r_=729da9d2-2564-e352-b6ff-43554a5b8852)
![Solana[part20]_ETF的购买](https://img.soniachen.com/IMG_5493.jpg?_r_=902d0beb-c30f-63f9-80ea-ee8cb0f83813)

![Solana[part19]_ETF的介绍和创建指令实现](https://img.soniachen.com/blog/posts/2025/08/image-20250825111246391.png)
![Solana[part18]_Solana DAPP-前端单元测试与合约接入](https://img.soniachen.com/blog/posts/2025/08/solanapart18.jpg)
![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)

