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[part2]_Solana开发入门
虚拟机
Solana的执行环境与其他区块链存在显著差异,其虚拟机架构是实现高吞吐量的核心基础之一:
EVM(Ethereum Virtual Machine):以太坊等区块链采用的虚拟机,基于栈式架构,Solana不直接支持EVM,但可通过跨链桥或兼容层(如Neon EVM)实现EVM合约迁移。
WASM(WebAssembly):通用二进制指令格式,Solana早期曾考虑采用,但最终选择了更轻量的方案。
Sealevel VM:Solana原生虚拟机,支持并行执行(区别于EVM的串行执行),是Solana高TPS(每秒交易数)的关键,可同时处理数千个独立合约调用。
BPF扩展指令集:Sealevel VM基于BPF(Berkeley Packet Filter)扩展,具有高效、安全、低资源占用的特点,适合区块链场景的沙箱执行环境。
项目搭建
1. Native Rust开发(原生开发方式)
直接使用Rust编写Solana合约,适合深入理解底层机制。
环境准备
安装Rust:curl --proto '=https' --tls ...
Solana[part1]_SOL基础
一、Solana概述
Solana是一个高性能的公链系统,核心特点体现在以下几个方面:
共识协议:采用独特的历史证明(POH)与权益证明(PoS)结合的共识机制,兼顾安全性与高效性。
高性能架构:通过优化数据传输、并行处理等技术,支持每秒数万笔交易(TPS),远超传统公链。
高并发处理:采用账户模型与事务隔离设计,实现多笔交易的并行验证与执行。
低延迟:得益于POH的时间戳机制,交易确认延迟可低至秒级。
1.1 核心模块
Runtime模块:作为Solana的运行时核心,负责管理所有账户的状态(包括余额、数据存储等),并调度智能合约的执行流程,确保交易按规则有序处理。
Programs模块:即Solana的智能合约层,包含多个核心程序:
Token Program:Solana生态中代币发行、转账、授权的基础程序,兼容SPL标准代币(类似以太坊的ERC-20)。
Stake Program:用于验证节点的质押管理,支持SOL代币质押、解除质押及收益分配等操作。
1.2 Rust在Solana中的应用
Rust是Solana智能合约开 ...
Rust进阶[part10]_并发
基本概述
在Rust中,通过std::thread::spawn函数可以创建新线程,该函数接收一个闭包作为参数,闭包中包含线程要执行的代码。
基础线程创建
子线程的生命周期依赖于主线程:当主线程结束时,无论子线程是否执行完毕,都会被强制终止。
use std::thread;
use std::time::Duration;
fn main() {
// 创建子线程
thread::spawn(|| {
for i in 1..10 {
println!("spawn thread: {}", i);
thread::sleep(Duration::from_millis(1)); // 模拟耗时操作
}
});
// 主线程逻辑
for i in 1..5 {
println!("main thread: {}" ...
Rust进阶[part9]_test测试
Unit Test(单元测试)
单元测试用于测试代码中的最小功能单元(如函数、方法),通常与被测试代码放在同一模块中,方便测试私有接口。
基本示例
创建src/lib.rs,编写公共函数及对应的单元测试:
pub fn add(left: usize, right: usize) -> usize {
left + right
}
pub fn multiply(a: i32, b: i32) -> i32 {
a * b
}
// 测试模块(通常命名为test,使用#[cfg(test)]标记仅在测试模式下编译)
#[cfg(test)]
mod tests {
// 引入父模块的函数(因测试模块是子模块,需显式引入)
use super::*;
// 测试add函数:正常情况
#[test]
fn test_add() {
assert_eq!(add(2, 3), 5); // 断言相等
...

![Solana[part8]_Solana 生态中的协议与标准库](https://img.soniachen.com/IMG_5493.jpg?_r_=e518f1e0-e207-e3d6-4357-a2294fd689a5)
![Solana[part7]_社交项目2-客户端文档](https://img.soniachen.com/IMG_5493.jpg?_r_=781103f9-be36-2082-d5c5-4eedfe482994)
![Solana[part6]_社交项目1-合约部分文档](https://img.soniachen.com/IMG_5493.jpg?_r_=e446a3db-2aa0-e911-c02c-13b34ffdb65f)
![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_=65efa197-540b-2582-7aef-7df62b42015e)
![Solana[part3]_solana账户&简单的交互](https://img.soniachen.com/IMG_5493.jpg?_r_=5d1d5d97-9583-fce6-8e55-280c8fab80ce)
![Solana[part2]_Solana开发入门](https://img.soniachen.com/IMG_5493.jpg?_r_=ccfd13f0-f5ac-3ab8-e2b1-8fa47ce1ac61)

![Rust进阶[part10]_并发-概念、线程、通信、共享内存](https://img.soniachen.com/IMG_5493.jpg?_r_=b7673e34-e0f4-f904-b7a5-bc74bfa1773b)
![Rust进阶[part9]_test测试](https://img.soniachen.com/IMG_5493.jpg?_r_=45b92a3c-ec50-0a36-ec0b-d950baabface)

