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[part7]_社交项目2—客户端文档
社交项目地址链接
🔗 合约地址:https://github.com/SoniaChan33/sol-friend
🔗 客户端地址: https://github.com/SoniaChan33/solana-friend-cli
一、概述
本文档介绍基于Solana区块链的社交应用客户端代码的核心功能、数据结构及使用方法。该客户端通过RPC与Solana网络交互,实现用户资料管理、关注/取消关注、内容发布与查询等社交功能,依赖链上程序处理核心业务逻辑。
二、依赖说明
客户端代码依赖以下Rust crate:
solana-client:提供Solana RPC客户端功能,用于与节点交互
solana-sdk:Solana核心SDK,包含账户、交易、签名等基础类型
borsh:用于链上数据的序列化/反序列化(Solana生态常用)
std::str::FromStr:用于Pubkey字符串解析
三、核心数据结构
1. 账户数据结构
用于在链上存储用户相关数据,需实现BorshDeserialize和BorshSeriali ...
Solana[part6]_社交项目1-合约部分
社交项目地址链接
🔗 合约地址:https://github.com/SoniaChan33/sol-friend
🔗 客户端地址: https://github.com/SoniaChan33/solana-friend-cli
一、项目概述
本项目是基于Solana区块链的去中心化社交应用合约,使用Rust语言开发。合约支持用户账户初始化、关注/取消关注其他用户、发布内容、查询粉丝列表及查询帖子等核心社交功能。通过Solana的Program Derived Address (PDA)机制管理用户数据,使用Borsh进行数据序列化/反序列化,确保链上数据的高效存储与读取。
二、核心模块与数据结构
1. 指令定义(instruction.rs)
定义了合约支持的所有操作指令,通过SocialInstruction枚举实现,包含以下指令:
指令名
功能描述
参数说明
InitializeUser
初始化用户账户( profile 或 post 类型)
seed_type: 账户类型(“profile” 或 “pos ...
Solana[part5]_SPLToken合约简单实现
实现Token项目
创建一个token项目
token 项目依赖:
[dependencies]
borsh = "1.5.7"
solana-program = "2.3.0"
spl-associated-token-account = { version = "7.0.0", features = [
"no-entrypoint",
] }
spl-token = { version = "8.0.0", features = ["no-entrypoint"] }
[lib]
crate-type = ["cdylib", "lib"]
编写合约,具体代码见: https://github.com/SoniaChan33/token
起本地环境:➜ ~ solana-test-validator
打开log
➜ ~ solana logs
编译合约:
➜ token git:(master) ✗ cargo build-sbf
部署 ...
Solana[part4]_Token解析&创建
solana上的代币
代币是代表对各种资产所有权的数字资产。代币化使得财产权的数字化成为可能,是管理可替代和不可替代资产的基本组成部分
可替代代币代表同类型和同价值的可互换和可分割资产(例如 USDC)
不可替代代币(NFT)代表不可分隔资产的所有权(例如艺术品)
SPL(Solana Program Library)
SPL 是 Solana 生态的核心程序库,其中 Token Program 是创建和管理代币的基础协议,主要涉及以下核心概念:
Token Program:Solana 上的标准代币协议,定义了代币的创建、转账、铸币、销毁等核心逻辑
Mint Account:代币的"铸造源",存储代币的元数据(如总供应量、小数位数、是否可铸币/冻结等),每个代币类型对应唯一的 Mint 账户
Token Account:用户持有特定代币的账户,关联到一个 Mint 账户和一个所有者钱包,用于实际存储代币余额
Associated Token Account (ATA):与钱包地址绑定的标准代币账户,遵 ...
Solana[part3]_solana账户&简单的交互
solana 账户
数据账户,用来存储数据
系统所有账户
程序派生账户(PDA)
程序账户,用来存储可执行程序(智能合约),其数据字段为程序的字节码,executable 标志为 true
原生账户,指 Solana 上的原生程序,例如:system(系统程序,处理账户创建、转账等基础操作),stake(质押程序),以及 vote(投票程序)
账户结构体
Account
Account 结构体主要用于客户端(如 RPC 调用)获取账户的完整数据,包含账户的所有核心属性。
代码示例:
use solana_sdk::account::Account;
// 账户结构体定义(简化版)
pub struct Account {
// 账户中的lamports数量(Sol的最小单位)
pub lamports: u64,
// 账户存储的二进制数据
pub data: Vec<u8>,
// 账户所有者的公钥(通常是程序的公钥)
pub owner: P ...

![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_=7a16a511-0dc1-e64c-ee19-0fb9151d78f2)
![Solana[part10]_Anchor实战:创建用户profile](https://img.soniachen.com/IMG_5493.jpg?_r_=99f5f7a6-383c-bad3-d911-8a83b987856e)
![Solana[part9]_Anchor入门&账户的概念和用法](https://img.soniachen.com/IMG_5493.jpg?_r_=9693cbf8-757c-003b-ae2c-a62a40249e77)
![Solana[part8]_Solana 生态中的协议与标准库](https://img.soniachen.com/IMG_5493.jpg?_r_=5a33b692-1731-59d1-aa57-1619d6b41136)
![Solana[part7]_社交项目2-客户端文档](https://img.soniachen.com/IMG_5493.jpg?_r_=6815c159-9e83-02de-a796-ef405ed5b1b3)
![Solana[part6]_社交项目1-合约部分文档](https://img.soniachen.com/IMG_5493.jpg?_r_=a79ebcb1-af34-48c6-0348-8ecd5b01b97b)
![Solana[part5]_SPLToken合约简单实现](https://img.soniachen.com/blog/posts/2025/08/image-20250821144342655.png)
![Solana[part4]_Token解析&创建](https://img.soniachen.com/IMG_5493.jpg?_r_=85a6a1a3-b5e7-3872-e721-9ad3e542a88e)
![Solana[part3]_solana账户&简单的交互](https://img.soniachen.com/IMG_5493.jpg?_r_=b7ac333f-3766-3ce4-882b-a3422f2a905b)

