P-Token:Solana 下一个效率大提升

  • Helius
  • 发布于 2天前
  • 阅读 36

P-token是Solana现有SPL Token Program的计算优化替代方案,它通过Pinocchio库减少了计算单元(CU)的使用,同时保持与现有SPL Token的完全向后兼容。

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

介绍

Solana 迅速普及的一个不太受重视的因素是其安全、直接且标准化的代币方法。与许多其他区块链不同,在 Solana 上创建代币不需要部署自定义合约。相反,一切都通过经过大量审计SPL 代币程序(又名 Tokenkeg)运行,该程序最初由 Solana Labs 部署。这种方法使得诸如铸造、销毁和转移代币等常见操作变得非常简单。例如,部署 Solana 代币只需一个 CLI 命令即可实现。

SPL 代币程序是 Solana 上使用最多的程序(系统程序除外)。在过去的六个月中,每周通过 SPL 代币程序创建新的同质化代币的数量平均在 200,000 到 300,000 之间。这比两年前的 2023 年 9 月增加了 20 倍,当时每周新创建的 SPL 代币数量通常低于 10,000。总的来说,除了 2023 年,Solana 自推出以来的每一年都记录了新发行的代币数量的显著增加,如下图所示。

Solana 每周创建的同质化代币数量

SPL 代币转账的增长更为明显。在过去的三个月中,每周的转移量一直超过 6.5 亿,并在 7 月下旬达到 8.678 亿的峰值。这个峰值比 2023 年 8 月初记录的每周 4940 万次转移的低点增加了 17.5 倍。

Solana 每周代币转账量

进入 P-Token

P-token 是当前 SPL 代币程序的计算优化、即插即用替代品,由 Anza 团队于 3 月通过 SIMD-0266:高效代币程序 首次提出。它在与现有 SPL 代币完全向后兼容的同时,显着减少了计算单元 (CU) 的使用。

由于 p-token 镜像了 SPL 代币程序的精确指令集和账户布局,因此可以将其作为直接替代品进行替换。这意味着 p-token 不是 一个新的代币标准。客户端代码继续像以前一样运行,确保过渡在无需应用程序或用户进行任何调整的情况下,释放出显著的效率提升。

采用 p-token 的驱动力与 Solana 为提高程序和框架效率所做的更广泛的努力相一致,这与增加网络容量的工作相辅相成,最显著的是通过 2025 年 将可用区块空间翻倍 的目标。

Solana 上专有 AMM 最近的成功 展示了降低计算成本的影响以及高效程序的好处。例如,HumidiFi 等平台上的预言机更新已 经过高度优化,降至仅 143 个 CU。BlueShift 的一个新开源预言机程序 Doppler 将成本进一步降低至仅 21 个 CU

p-token 计划已经获得了领先的生态系统开发人员的强烈认可。

Pinocchio

p-token 中的“p”代表 Pinocchio,这是一个由 Anza 开发的优化、高性能、零依赖的用于编写 Solana 程序的库。Pinocchio 作为标准 solana-program crate 的替代品,该 crate 广泛使用零拷贝类型来处理指令和账户数据。使用零拷贝时,数据在读取或写入时不会复制到新的内存位置。相反,状态直接通过指针访问。这种设计通过避免不必要的内存操作来实现显著的计算节省,同时还减少了运行时开销。

Pinocchio 也是 no_std,这意味着它不依赖于 Rust 的标准库或堆分配,因为 Solana 虚拟机 (SVM) 已经提供了运行时环境。这进一步简化了执行并减少了依赖项,从而确保了更精简、更快速的程序。

效率提升

CU 衡量了 Solana 运行时中的执行成本。最小的操作,例如两个整数的加法或按位运算,消耗 1 个 CU。程序限制为每个指令 20 万个 CU,每个交易 140 万个 CU。

P-Token 提供了显著的效率提升,将标准 SPL 代币交易的 CU 消耗量减少了大约 95%(效率提高了 19 倍)。这种更快的执行速度转化为更流畅的用户体验,同时释放计算能力允许每个区块容纳更多的交易,直接提升网络吞吐量。

如今,代币程序指令 约占整个区块 CU 使用量的 10%。通过将其成本降低到当前水平的 5%,p-token 可以将该份额从 10% 降低到 0.5%,从而为其他交易释放额外的 9.5% 的区块容量。P-token 还有利于下游程序,通过减少总体 CU 使用量和降低跨程序调用 (CPI) 的成本来提高可组合性。

以下是详细说明 p-token 指令与当前 SPL 代币程序相比获得的 CU 效率的数据,以图表和表格形式呈现。

P-token 与 SPL 代币程序 CU 消耗量比较 1

指令 P-token CUs Spl-token CUs P-token 节省
initialize_mint 105 2,967 93%
initialize_account 155 4,527 94%
initialize_multisig 193 2,973 88%
transfer 79 4,645 95%
approve 124 2,904 91%
revoke 99 2,677 91%
set_authority 136 3,167 92%
mint_to 123 4,538 95%
burn 133 4,753 93%
close_account 125 2,916 91%
freeze_account 149 4,265 93%
thaw_account 146 4,267 93%

P-token 与 SPL 代币程序 CU 消耗量比较 2

指令 P-token CUs Spl-token CUs P-token 节省
transfer_checked 111 6,200 98%
approve_checked 171 4,458 96%
mint_to_checked 172 4,545 96%
burn_checked 136 4,754 97%
initialize_account2 172 4,388 96%
initialize_account3 248 4,240 94%
initialize_multisig2 319 2,826 89%
initialize_mint2 226 2,827 92%
amount_to_ui_amount 461 2,499 82%
ui_amount_to_amount 694 3,161 78%
initialize_immutable_owner 38 1,404 97%
sync_native 62 3,045 98%

另一个值得注意的优化,主要由 `no_std` 启用,是将程序二进制文件大小从 131 KB 减少到 95 KB。

附加指令

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

提取多余的 Lamports

与当前的 SPL Token-2022 实现类似,` withdraw_excess_lamports ` 允许恢复在 mint 账户中“砖化”的多余 SOL。这通常发生在用户错误地将 lamports 发送到代币 mint 账户时。

提款需要 mint authority 的授权,标准 mint 账户的指定签名者或多重签名账户的多重签名者。由于大多数 SPL 代币都撤销了其 mint authority,因此可以使用 mint 账户本身作为签名 authority 来提供授权,并使用 mint 的私钥对指令进行签名。

在所有的 SPL 代币 mint 账户中,约有 869,000 个持有的 SOL 多于 0.0014616 SOL 的最低租金豁免阈值。总的来说,这相当于 176,961.5 SOL 锁定在代币 mint 账户中,按今天的价格计算价值 3600 万美元。锁定在代币 mint 账户中的最大 SOL 金额通常与 memecoin、传统代币和主要的蓝筹资产相关。锁定在代币 mint 账户中的单笔最大 SOL 金额是 BOOK OF MEME ($BOME),一种 memecoin,拥有 6,328 SOL。采用 p-token 可能会解锁这些余额,从而为这些代币背后的团队带来意外之财。

按不可恢复的 SOL 划分的前 10 个代币 mint 账户

批量处理

第二个新指令是 ` batch `,它简化了与 p-token 程序的 CPI 交互。`batch` 允许在单个调用中执行可变数量的代币指令,而不是多次调用代币程序。这意味着 1,000 个单元的基本 CPI 成本仅产生一次,而不是为每个单独的指令产生一次。

其结果是,对于依赖单个指令中的多个代币 CPI 的协议(Solana DeFi 中的常见模式)来说,计算使用量显着减少。例如,AMM 可能会在交换中执行两次转移,或者流动性池存款可能涉及转移和铸造。通过使用 `batch`,程序可以在这些场景中实现有意义的 CU 节省。

解包 Lamports

`unwrap_lamports` 指令(最近在一个单独的 PR 中添加)允许直接将 lamports 转移到目标账户,从而无需创建临时原生代币账户。

以前,从包装的 SOL 账户中解包 lamports 需要为接收者创建然后关闭关联的代币账户 (ATA)。通过此更新,现在可以直接从原生 SOL 账户中转移 lamports,从而简化了流程。

转移指令的快速通道

对主网 代币程序使用情况的分析表明,存在围绕转移指令的强烈集中,这些指令加起来几乎占所有活动的一半。 五个最常用的指令是:

  • 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 现在默认对所有新程序强制执行此操作,除非明确禁用。

审计

p-token 程序的审计已经在进行中,以确保完全的向后兼容性和安全性。为了采用 p-token,它必须严格遵守当前代币程序的精确指令和账户布局,精确地复制其行为。任何偏差都会带来风险,这正在通过广泛的测试和独立审计来解决。

审计师 Neodyme 通过重放最近几个月以来的每个主网交易两次,一次使用原始代币程序,一次使用 p-token,进行了等效性测试。结果证实了相同的输出,同时也证明了显着的 CU 节省。

根据他们的分析,在 2025 年 8 月 3 日至 8 月 11 日期间,启用日志记录的 p-token 将减少 8.9 万亿个 CU 的开销,而禁用日志记录的 p-token 将减少 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 就会使账户更难达到此限制,从而降低热状态瓶颈的频率。

每个区块中最具争议的账户的 CU 使用量

如今,几乎所有交易都包含优先级费用或 Jito 小费,以激励验证器将其包含在区块中。由于优先级由每个 CU 的费用决定,因此消耗更少 CU 的 p-token 交易应在所有条件相同的情况下,以相同的费用或小费获得更高的优先级。也就是说,由于所有 SPL 代币交易都将受益于 p-token 升级,因此对交易优先级排序的总体影响仍有待观察。

结论

假设 p-token 通过治理投票,那么它的采用代表着在提高 Solana 的效率和可扩展性方面迈出的重要一步。通过大幅减少计算使用量并简化 CPI 交互,它加强了网络中使用最多的程序的基础,同时也扩展了整体区块容量。如果成功,p-token 可以作为开发 Pinocchio 优化的其他广泛使用程序(例如关联代币账户 (ATA) 程序甚至系统程序)的蓝图,从而为更快、更高效的运行时铺平道路。

更多资源

  • 原文链接: helius.dev/blog/solana-p...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Helius
Helius
https://www.helius.dev/