新消息:Helius 收购 Light Protocol
P-Banner
博客/研究

P-Token:Solana 的下一个重大效率突破

研究员X 上的 Lostin
阅读需 11 分钟

衷心感谢 Febo、Jacob Creech 和 0xIchigo 审阅本文的早期版本。

引言

Solana 得以快速普及,一个常被低估的因素是其安全、直接且标准化的代币处理方式。与许多其他区块链不同,在 Solana 上创建代币无需部署自定义合约。相反,一切都通过最初由 Solana Labs 部署、经过严格审计和实战检验的 SPL token program(又称 Tokenkeg)运行。这种方式让铸造、销毁和转移代币等常见操作变得非常简单。例如,只需一条 CLI 命令即可部署 Solana 代币。

SPL Token Program 是 Solana 上使用最广泛的程序(System program 除外)。过去六个月,通过 SPL token program 每周创建的新同质化代币平均在 20 万至 30 万枚之间。与两年前的 2023 年 9 月相比,这一数字增长了 20 倍;当时每周新创建的 SPL 代币通常不到 1 万枚。总体而言,除 2023 年外,自 Solana 推出以来,每年新发行的代币数量都显著增加,如下图所示。

SPL 代币转账量的增长更加显著。过去三个月,每周转账量持续超过 6.5 亿笔,并在 7 月下旬达到 8.678 亿笔的峰值。与 2023 年 8 月初录得的每周 4940 万笔低点相比,这一峰值增长了 17.5 倍。

P-Token 登场

P-token 是针对计算进行优化、可直接替代当前 SPL Token 程序的方案,由 Anza 团队于 3 月通过 SIMD-0266:高效代币程序首次提出。它能大幅减少计算单元(CU)用量,同时与现有 SPL 代币完全向后兼容。 

由于 p-token 完全复刻了 SPL Token 程序的指令集和账户布局,因此可以直接替换原程序。这意味着 p-token 并非新的代币标准。客户端代码会像以前一样正常运行,应用和用户无需进行任何调整,即可通过此次迁移获得显著的效率提升。

推动采用 p-token 与 Solana 提升程序和框架效率的整体方向一致,并与扩大网络容量的工作相辅相成,其中最值得关注的是 2025 年将可用区块空间翻倍的目标。

Solana 上专有 AMM 近期取得的成功展示了更低计算成本带来的影响,以及高效程序的优势。例如,HumidiFi 等平台上的预言机更新已经高度优化至仅需 143 CU。BlueShift 推出的全新开源预言机程序 Doppler 进一步将成本降至仅 21 CU。

Pinocchio

p-token 中的“p”代表 Pinocchio。这是由 Anza 开发的一个经过优化、高性能且零依赖的 Solana 程序开发库。Pinocchio 可替代标准的 solana-program crate,后者在处理指令和账户数据时大量使用零拷贝类型。采用零拷贝后,读取或写入数据时不会将其复制到新的内存位置,而是通过指针直接访问状态。此设计避免了不必要的内存操作,从而显著节省计算资源,并减少运行时开销。

Pinocchio 还支持 no_std,这意味着它不依赖 Rust 标准库或堆分配,因为 Solana Virtual Machine(SVM)已经提供了运行时环境。这进一步简化了执行过程并减少依赖,让程序更加精简、快速。

效率提升

CU 用于衡量 Solana 运行时中的执行成本。最小的操作(如两个整数相加或一次按位运算)会消耗 1 CU。每条指令的上限为 20 万 CU,每笔交易的上限为 140 万 CU。

P-Token 带来了显著的效率提升,将标准 SPL 代币交易的 CU 消耗降低约 95%(效率提升 19 倍)。更快的执行速度可带来更流畅的用户体验,而释放出的计算资源能让每个区块容纳更多交易,直接提高网络吞吐量。

目前,Token 程序指令约占整个区块 CU 用量的 10%。p-token 将其成本降至当前水平的 5%,可使这一占比从 10% 降至 0.5%,为其他交易额外释放 9.5% 的区块容量。p-token 还能惠及下游程序,通过降低整体 CU 用量和跨程序调用(CPI)成本,改善可组合性。

以下图表和表格详细展示了与当前 SPL Token 程序相比,p-token 指令带来的 CU 效率提升。

指令P-token CUSpl-token CUP-token 节省比例
initialize_mint1052,96793%
initialize_account1554,52794%
initialize_multisig1932,97388%
transfer794,64595%
approve1242,90491%
revoke992,67791%
set_authority1363,16792%
mint_to1234,53895%
burn1334,75393%
close_account1252,91691%
freeze_account1494,26593%
thaw_account1464,26793%
指令P-token CUSpl-token CUP-token 节省比例
transfer_checked1116,20098%
approve_checked1714,45896%
mint_to_checked1724,54596%
burn_checked1364,75497%
initialize_account21724,38896%
initialize_account32484,24094%
initialize_multisig23192,82689%
initialize_mint22262,82792%
amount_to_ui_amount4612,49982%
ui_amount_to_amount6943,16178%
initialize_immutable_owner381,40497%
sync_native623,04598%

另一项值得注意的优化主要由 `no_std` 实现,它将程序二进制文件的大小从 131 KB 降至 95 KB。

新增指令

P-token 提议向代币程序添加三条原始 SPL token program 中没有的新指令(`withdraw_excess_lamports`、`batch` 和 `unwrap_lamports`)。

提取多余 Lamport

与当前的 SPL Token-2022 实现类似,`withdraw_excess_lamports` 可取回“卡死”在铸币账户中的多余 SOL。这通常发生在用户误将 lamport 发送到代币铸币账户时。

提款需要获得铸币权限方的授权:对于标准铸币账户,由指定签名者授权;对于多签账户,则由多签授权。由于大多数 SPL 代币已撤销铸币权限,也可以改用铸币账户本身作为签名权限方,并使用该铸币账户的私钥签署指令来完成授权。

在所有 SPL 代币铸币账户中,约 86.9 万个账户持有的 SOL 超过最低免租金门槛 0.0014616 SOL。这些账户合计有 176,961.5 SOL 锁定在代币铸币账户中,按当前价格计算价值 3600 万美元。锁定 SOL 数量最多的代币铸币账户通常与模因币、旧版代币和主要蓝筹资产相关。在单个代币的铸币账户中,锁定 SOL 最多的是模因币 BOOK OF MEME ($BOME),共计 6,328 SOL。采用 p-token 后,这些余额有望解除锁定,为代币背后的团队带来一笔意外收益。

批处理

第二条新指令是 `batch`,它简化了与 p-token 程序的 CPI 交互。`batch` 无需多次调用代币程序,而是允许在一次调用中执行数量可变的代币指令。这意味着 1,000 单元的基础 CPI 成本只需支付一次,而非每条指令都支付一次。

对于在一条指令中依赖多次代币 CPI 的协议,这可以大幅降低计算用量,而这种模式在 Solana DeFi 中十分常见。例如,AMM 可能会在一次兑换中执行两次转账,流动性池存款也可能同时涉及转账和铸造。在这些场景中,程序可通过使用 `batch` 显著节省 CU。

解包 Lamport

`unwrap_lamports` 指令(最近通过单独的 PR 添加)可将 lamport 直接转移到目标账户,无需创建临时原生代币账户。

此前,要从封装 SOL 账户中解包 lamport,必须为接收方创建并随后关闭一个关联代币账户(ATA)。此次更新后,lamport 可直接从原生 SOL 账户转出,从而简化流程。

转账指令的快速路径

对主网**代币程序使用情况的分析显示,活动高度集中在转账指令上,这些指令合计占所有活动的近一半。**使用最频繁的五条指令是:

  • transfer_checked(36.33%)
  • transfer(13.22%)
  • close_account(12.23%)
  • initialize_account3(9.98%)
  • initialize_immutable_owner(9.78%)

这种使用模式表明,可以进一步针对转账优化 p-token 并减少 CU 消耗。这项优化工作很大一部分由 Temporal 的 Cavey 贡献(如需深入了解其方法,请观看他的 X 直播)。

为实现这些提升,p-token 引入了带有转账指令快速路径的自定义入口点,并更新处理器以优先处理 `sync_native` 和 `initialize_immutable_owner`。这些改动结合起来,可根据观察到的使用模式显著提升 CU 效率。

日志记录

随着 p-token 的推出,一个尚未解决的问题是是否保留当前的日志记录行为。**最新版本的提案建议移除日志。**在 Solana 上,日志是从程序中提取调试、监控和事件数据的主要机制。现有代币程序的日志非常精简,仅输出正在执行的指令名称。例如:

代码
Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA invoke [1],
Program log: Instruction: TransferChecked,
Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA consumed 6281 of 7738 compute units,
Program TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA success

然而,这条看似简短的日志 `Instruction: <name>` 会消耗约 103 个计算单元。实际上,这部分开销可能几乎与指令本身的计算量相当。例如,对于一次简单转账,日志记录约占所需总计算量的 40%。

除了成本问题,这些日志也并非始终可靠;它们可能被截断,也可能通过日志注入遭到操纵,从而误导下游解析器。另一方面,彻底移除日志可能会破坏当前依赖这些日志的开发者和应用工作流。

移除日志后,团队发布 IDL 对于提高程序行为的可见性会更加重要。例如,Anchor 现在默认发布所有新程序的 IDL,除非明确禁用,以此强制落实该做法。

审计

p-token 程序的审计工作已经开始,以确保完全向后兼容并保障安全性。要采用 p-token,它必须严格遵循当前 Token 程序的确切指令和账户布局,并精确复现其行为。任何偏差都可能带来风险,因此目前正通过广泛测试和独立审计来应对。

审计机构 Neodyme 进行了等效性测试,将最近数月的每笔主网交易重放两次,一次使用原始代币程序,另一次使用 p-token。结果确认两者输出完全相同,同时也显示 CU 得到了显著节省。

根据其分析,在 2025 年 8 月 3 日至 8 月 11 日期间,启用日志时,p-token 可减少 8.9 万亿 CU 的开销;禁用日志时,则可减少 9.14 万亿 CU。这两个数字分别相当于总区块空间用量的 12.0% 和 12.3%。

P-token 目前正在接受 Zellic 的第二轮审计,以及 Runtime Verification 的形式化验证。

推出流程

p-token 计划采用分阶段方式推出。首先完成审计、模糊测试和形式化验证。随后,验证者将就采用 p-token 和正式接受 SIMD 266 进行治理投票。之后,p-token 功能将部署到集群,并置于功能门控之后。

该程序将首先部署到指定账户(ptokN…UkkZ2)。在 epoch 边界激活功能门控后,所有验证者的运行时将使用 Upgradable Loader v3,以新实现替换现有代币程序(Tokenkeg…VQ5DA)。

另一种方式是将 p-token 程序部署到新地址,并要求用户和应用手动迁移。但这种方式并非首选,因为许多用户可能不愿切换或切换缓慢,这很可能会阻碍采用并削弱整体收益。

经济影响

采用 p-token 是一系列改进措施的一部分,这些措施有望显著扩大 Solana 的整体容量,让每个区块容纳更多交易。其他值得关注的升级包括将区块空间翻倍至 1 亿 CU,以及将每个账户的 CU 上限从固定的 1200 万提高到区块容量的 40%。

目前,单个账户在每个区块中的上限为 1200 万 CU。如下方 Anza 的图表所示,每个区块中争用最激烈的账户经常达到这一上限。仅 p-token 一项改进就能让账户更难达到该上限,从而减少热点状态出现瓶颈的频率。

如今,几乎所有交易都会包含优先费或 Jito 小费,以激励验证者将其纳入区块。由于优先级由每 CU 费用决定,在其他条件相同的情况下,消耗更少 CU 的 p-token 交易应能以相同费用或小费获得更高优先级。不过,由于所有 SPL 代币交易都会从 p-token 升级中受益,其对交易优先级排序的整体影响仍有待观察。

结论

如果 p-token 通过治理投票并获得采用,将成为提升 Solana 效率和可扩展性的重要一步。它大幅减少计算用量并简化 CPI 交互,既巩固了网络中使用最广泛程序的基础,也扩大了整体区块容量。如果取得成功,p-token 可以为其他常用程序开发 Pinocchio 优化版本提供蓝图,例如关联代币账户(ATA)程序,甚至 System program,从而推动构建更快速、更高效的运行时。

更多资源

订阅 Helius

及时了解 Solana 开发的最新动态,并在我们发布新内容时收到更新

放大图片