当前位置: 首页 > news >正文

趣味学Solana(启航)

欢迎来到 Solana 的奇妙世界!无论你是编程老手,还是第一次听说“区块链”这个词,都没关系——本指南将带你像玩游戏一样,亲手在 Solana 上构建属于你的第一个项目!

你会学到什么?

准备好开启一段科技探险了吗?在这趟旅程中,你将掌握:

  • Solana 账户:搞懂数据是怎么“住”在区块链上的,就像给数字世界建房子。
  • 发送交易:学会如何向网络“发消息”,比如转账或触发智能合约。
  • 构建和部署程序:亲手写出你的第一个“智能合约”(我们叫它程序),然后把它上传到区块链!
  • 程序派生地址(PDAs):一种神奇的“隐形地址”,没有私钥也能安全使用,超酷!
  • 跨程序调用(CPIs):让你的程序去“呼叫”别的程序,实现像乐高积木一样的组合玩法!

最棒的是?不用装任何软件!(合法上网推荐:这个T子试试,一直稳定。免费使用5天:https://rushlmo.org/s/ywtc01/pvijpzy
一切都在浏览器里完成。我们将使用 Solana Playground —— 一个专为开发者打造的“沙盒游乐场”,代码写完立马就能运行,效果立竿见影!

准备好了吗?让我们开始吧!

进入 Solana 游乐场:Solpg.io

打开你的浏览器,新开一个标签页,访问这个网址: https://beta.solpg.io/

欢迎来到 Solana Playground —— 你的区块链实验基地!在这里,你可以写代码、部署程序、测试交易,全都不用担心花真钱。

一:创建你的“测试钱包”

每次进游乐场,都得先有个“入场手环”——也就是你的 开发钱包

第1步:点击“未连接”

在页面左下角,你会看到一个写着 “Not connected” 的按钮,点它!

小提示:这就像是在游戏里点击“开始新游戏”。

第2步:创建钱包

系统会提示你生成一个“密钥对”(别怕,就是一串加密密码)。准备好后,点击 “Continue”

你的私钥会安全地保存在浏览器里(仅限本地!),所以不要清空缓存,否则钱包就“消失”啦!

创建成功后,你会看到页面底部显示:

  • 你的钱包地址(一串酷炫的字母数字组合)
  • 当前余额(现在是 0 SOL)
  • 连接的网络:默认是 devnet(开发者测试网)

恭喜!你现在正式“上线”了!

温馨提醒:这个钱包只用于测试!不要往里面存主网(mainnet)的真实 SOL,否则会丢哦!


小知识时间:钱包和网络是啥?

钱包地址是什么?

它就像你在区块链世界的“身份证号码”或“银行账号”。
由一对密钥(公钥 + 私钥)生成,通常是这样的:
7MNj7pL1y7XpPnN7ZeuaE4ctwg3WeufbX5o85sA91J1

  • 公钥 = 地址(别人可以给你打钱)
  • 私钥 = 开门钥匙(签名交易用,千万不能泄露!)

在 Solana 上,所有东西都是账户:用户钱包、智能合约、存储数据的地方……统统都是!

什么是“连接的网络”?

前面的章节我们也提到过,Solana 有好几个“平行宇宙”:

网络用途
devnet开发者专用测试网,SOL 是“假”的,随便玩
testnet验证节点测试用,普通开发者别碰
mainnet-beta主网!真金白银交易的地方 💸

我们现在用的是 devnet,放心大胆地试错吧!

获取免费的 Devnet SOL(虚拟币)

想在链上做事?不管是建账户还是发交易,都要烧点“燃料”——也就是 SOL

但在 devnet 上,SOL 可以白嫖!

你需要 SOL 来:

  • 创建新账户(比如存数据)
  • 支付交易手续费(非常便宜,几分钱都够用)

方法一:用 Playground 终端一键空投(推荐)

在 Playground 的终端里输入这行命令,然后回车:

solana airdrop 5

Boom!5 个 devnet SOL 直接送进你钱包!

“空投”就像从天而降的礼物包,开发者福利!

如果提示“速率限制”或失败,别急,还有备选方案

方法二:网页空投机(Web Faucet)

  1. 打开 https://solfaucet.com(或其他 Solana devnet 空投网站)
  2. 把你的钱包地址复制粘贴进去
  3. 选择金额(比如 1 或 2 SOL)
  4. 点击 “Request Airdrop” 或 “确认空投”

几秒钟后,SOL 就到账啦!

小贴士:空投有限额,别一口气要太多,省着点花~

从 Solana 网络“偷看”数据

整个 Solana 区块链就像一个巨大的、公开的 表格,里面存着所有人和程序的数据。但这个表格有个规则:所有数据都存在“账户”里,而且每个账户长得都差不多,就像统一规格的“数据盒子”。今天,我们就来当一回“区块链侦探”,学会如何打开这些盒子,看看里面到底装了啥!

所有东西都是“账户”

在 Solana 上,一切皆是账户。钱包、代币、智能合约……全都是“账户”。它们的底层结构长这样(别怕,我们用人话解释):

#[derive(PartialEq, Eq, Clone, Default)]
pub struct Account {pub lamports: u64,           // 这个盒子有多少钱(以“小铜板”为单位)#[cfg_attr(feature = "serde", serde(with = "serde_bytes"))]  pub data: Vec<u8>,           // 盒子里装的数据(可能是状态,也可能是代码)pub owner: Pubkey,           // 谁拥有这个盒子?pub executable: bool,        // 这个盒子是不是“可执行程序”?(比如智能合约)pub rent_epoch: Epoch,       // 已废弃的字段,现在只是个“纪念品”
}

你可以把每个账户想象成一个带锁的抽屉:

  • 谁拥有它?owner
  • 里面有多少钱?lamports
  • 装的是代码还是数据? → 看 executabledata
  • 能不能运行? → 看 executable 是不是 true

场景一:查看一个“钱包”账户

我们先来打开一个最简单的盒子——钱包

实验步骤:

  1. 生成一个新钱包(密钥对)
  2. 给它“空投”一些测试币(SOL)
  3. 查看它的账户信息
import { Keypair, Connection, LAMPORTS_PER_SOL } from "@solana/web3.js";// 1. 生成新钱包
const keypair = Keypair.generate();
console.log(`新钱包地址: ${keypair.publicKey}`);// 2. 连接网络(比如本地测试网)
const connection = new Connection("http://localhost:8899", "confirmed");// 3. 空投 1 个 SOL(测试币)
const signature = await connection.requestAirdrop(keypair.publicKey,LAMPORTS_PER_SOL // 1 SOL = 10^9 lamports
);
await connection.confirmTransaction(signature, "confirmed");// 4. 查看这个钱包的账户信息
const accountInfo = await connection.getAccountInfo(keypair.publicKey);
console.log(JSON.stringify(accountInfo, null, 2));

打开盒子后,看到什么?

{"data": {"type": "Buffer","data": []},"executable": false,"lamports": 1000000000,"owner": "11111111111111111111111111111111","rentEpoch": 0,"space": 0
}

🔍 解读一下:

字段含义
data空的!钱包不存复杂数据,只存钱
executablefalse → 不是程序,不能运行
lamports10亿 = 1 SOL,有钱!
owner111...111 → 系统程序(System Program)拥有它,它是“原生钱包”
space0 字节 → 因为 data 是空的

小结:钱包 = 一个由系统程序拥有的、只存钱的空盒子。


场景二:查看“程序”账户 —— Token Program

接下来,我们去看看一个“智能合约”长啥样。我们以 Solana 的 Token Program(代币程序)为例。

它的地址是:TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA

const connection = new Connection("https://api.mainnet-beta.solana.com");
const programAddress = new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");
const accountInfo = await connection.getAccountInfo(programAddress);
console.log(accountInfo);

打开后,看到:

{"data": {"type": "Buffer","data": [127, "...truncated, total bytes: 134080...", 0]},"executable": true,"lamports": 4522329612,"owner": "BPFLoader2111111111111111111111111111111111","rentEpoch": 18446744073709552000,"space": 134080
}

🔍 解读:

字段含义
data超长字节!这是编译后的程序代码(.so 文件)
executabletrue → 这是个可运行的程序!
ownerBPFLoader2... → 由“加载器程序”拥有,这是部署程序的规则
space134,080 字节 → 程序代码挺大

小结:程序账户 = 一个存了代码的盒子,可以被调用执行。


场景三:查看“代币信息” —— Mint 账户

现在我们来看一个更有趣的盒子:USDC 的 Mint 账户

地址:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v

const mintAddress = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
const accountInfo = await connection.getAccountInfo(mintAddress);
console.log(accountInfo);

打开后:

{"data": {"type": "Buffer","data": [1, "...truncated, total bytes: 82...", 103]},"executable": false,"lamports": 407438077149,"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA","rentEpoch": 18446744073709552000,"space": 82
}

解读:

字段含义
data82 字节的原始数据 → 是“USDC 的配置信息”
executablefalse → 不是程序,不能运行
ownerTokenkeg... → 是 Token Program 拥有它
lamports存了约 407 SOL → 用来“租”这 82 字节的空间

问题来了:data 是一串看不懂的字节,怎么知道它代表什么?


把“乱码”变“人话”——反序列化

data 字段存的是二进制数据,就像加密文件。要读懂它,必须用正确的“解码器”——也就是 反序列化(Deserialize)

幸运的是,Solana 社区提供了现成的工具包,比如:

import { getMint } from "@solana/spl-token";const mintData = await getMint(connection, mintAddress);
console.log(mintData);

输出结果(终于看懂了!):

{"address": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","mintAuthority": "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG","supply": "8985397351591790","decimals": 6,"isInitialized": true,"freezeAuthority": "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar","tlvData": {"type": "Buffer","data": []}
}

解读 USDC 的“身份证”:

字段含义
supply总供应量:约 89.85 亿 USDC
decimals小数位:6 位 → 所以 8985397351591790 ÷ 10^6 = 8,985,397,351.591790 USDC
mintAuthority谁能印新币?Circle 公司的钱包地址
freezeAuthority谁能冻结账户?也是 Circle → 合规性设计

小结:Mint 账户 = 一个由 Token Program 拥有的“代币配置文件”盒子。


三种账户大对比

类型示例executabledata 内容owner
钱包账户你的钱包NSystem Program
程序账户Token ProgramY编译代码BPFLoader
Mint 账户USDC 信息N代币配置Token Program

关键知识点

  1. 所有数据都在账户里,账户是 Solana 的基本存储单元。
  2. 程序和状态分离:代码存在程序账户,数据存在状态账户(比如 Mint)。
  3. data 是二进制,要读懂必须反序列化。
  4. owner 决定谁能改数据:只有拥有者程序才能修改其账户。
  5. 工具库帮你省事:用 @solana/spl-token 这类包,轻松解析常见数据。
http://www.dtcms.com/a/398349.html

相关文章:

  • 期权末日论效应怎么来的?
  • iOS 混淆与反调试反 Hook 实战,运行时防护、注入检测与安全加固流程
  • 建设工程管理网站邹平建设网站
  • wordpress英文下主题怎么换苏州seo专家教优化网站结构
  • 《灼灼韶华》还原民国上海滩,虎鲸文娱虚拟拍摄让创作突破时空束缚
  • Redo Log 与 Crash Recovery:MySQL 事务持久化的核心技术
  • 金乡网站建设公司云南企业网站
  • 设计模式(C++)详解——职责链模式 (Chain of Responsibility)(1)
  • 酒店网站免费建设国际新闻今天最新
  • 企业产品网络安全日志9月23日-WAF应急
  • 嵌入式硬件工程师:绝缘栅型场效应管
  • HTTPS 请求抓包实战,从请求捕获到解密分析的逐步流程与工具组合(https 请求抓包、iOS 真机、SSL Pinning 排查)
  • 怎么学习cuda?
  • iOS 开发指南全解析 从入门到应用上架、Xcode 使用教程、ipa 打包上传与 App Store 审核实战经验
  • iOS 26 帧率测试实战指南,Liquid Glass 动画性能、滚动滑动帧率对比、旧机型流畅性与 uni-app 优化策略
  • 在网站上签失业保险怎样做网站对公司的重要性
  • php网站模板 php网站源码 PHP源码网
  • 万能PDF工具箱(PDF Candy)安装教程
  • 两款功能强大的密码学工具箱
  • umijs 4.0学习 - 路由
  • 【Java】P7 Java数组完全指南:从基础到进阶
  • PTZ相机AI相关的知识体系
  • Python 2025:新型解释器与性能优化实战
  • go 持续集成、持续部署之gitlab流水线+docker-compose踩坑之旅
  • 声明式事务5
  • 时序数据库选型指南:Apache IoTDB引领数字化转型新时代
  • [Android] apkm安装器 APKMirror Installer v1.10.1
  • spring boot项目使用Torna生成在线接口文档
  • 两学一做教育纪实评价系统网站店铺小程序如何开通
  • 10分钟快速部署PHP+Nginx+MySQL+Redis开发环境