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
未读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); // 断言相等
...
Rust进阶[part8]_迭代器&关联类型
概述
迭代器(Iterator)是 Rust 中处理序列元素的强大工具,它提供了一种统一的方式来遍历集合(如向量、数组、哈希表等)中的元素。迭代器的核心特性是惰性执行:除非主动调用消耗迭代器的方法,否则迭代器不会实际执行任何操作。这种特性使得迭代器可以高效地组合使用,而不会带来额外的性能开销。
在 Rust 中,迭代器由 Iterator trait 定义,所有实现了该 trait 的类型都可以被称为迭代器。迭代器不仅可以用于遍历现有集合,还可以用于生成序列(如斐波那契数列)、处理数据流等场景。
迭代器的实现
迭代器本质是实现了 Iterator trait 的类型。该 trait 的核心定义如下:
trait Iterator {
type Item; // 关联类型:迭代器产生的元素类型
fn next(&mut self) -> Option<Self::Item>; // 核心方法:返回下一个元素(None表示结束)
}
next 方法是迭代器的核心:
每次调用返回 O ...

![Solana[part7]_社交项目2-客户端文档](https://img.soniachen.com/IMG_5493.jpg?_r_=5581ba2d-e63e-7863-1781-3ff9c95b5683)
![Solana[part6]_社交项目1-合约部分文档](https://img.soniachen.com/IMG_5493.jpg?_r_=6c864ec2-99f4-5c79-8228-532a1830f4cd)
![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_=b4be1e1c-f8a1-09cf-7e58-4e8382ae01e7)
![Solana[part3]_solana账户&简单的交互](https://img.soniachen.com/IMG_5493.jpg?_r_=5e37e923-ce69-5a86-f58e-7564d08f4e0a)
![Solana[part2]_Solana开发入门](https://img.soniachen.com/IMG_5493.jpg?_r_=090ea14e-2ccf-c288-7936-f41d1ca3de35)
![Solana[part1]_SOL基础](https://img.soniachen.com/IMG_5493.jpg?_r_=a077751e-655d-6f4a-4159-c6a9a3ec1f19)
![Rust进阶[part10]_并发-概念、线程、通信、共享内存](https://img.soniachen.com/IMG_5493.jpg?_r_=bf8c4480-4d06-9f19-6747-24b51d445fe8)
![Rust进阶[part9]_test测试](https://img.soniachen.com/IMG_5493.jpg?_r_=bdf89bac-f967-bc30-53ba-709f77e166ef)
![Rust进阶[part8]_迭代器](https://img.soniachen.com/IMG_5493.jpg?_r_=6861b389-5ed0-da15-bed8-fd8208614ab5)

