Solana 中的函数修饰符与 Fallback 函数:为何不存在

0xE 发布于 2025-03-28 阅读 2771

本文分析了 Solana 和 Anchor 框架为何缺乏 Solidity 中的 Fallback、view、pure、payable 函数及修饰符,指出其设计上账户预声明、数据公开性及 Rust 语言特性导致的差异,并提及缺乏内置单位的问题。

Solana 无 Fallback 或 Receive 函数

在 Solidity 中,fallback 和 receive 函数处理未定义操作或直接 ETH 转账。Solana 则不同,其交易需预先声明所有涉及的账户。若引入类似 Fallback 函数,访问未指定的账户会导致交易失败,用户需提前预测账户调用,增加复杂性。因此,Solana 直接禁止此类函数,简化设计。


Solana 无 view 或 pure 函数

Solidity 中的机制

Solidity 的 view 和 pure 函数通过编译器约束状态访问:

  • view:禁止状态修改,所有外部调用使用 staticcall(若修改状态则回滚),编译器检测 SSTORE 等操作码时抛错。
  • pure:更严格,禁止读取状态(如 SLOAD),仅限纯计算。

Solana 的差异

Anchor 未实现类似编译器检查。Solana 程序的状态访问由 Context 结构定义,未列明的账户无法直接读写,间接提供一定约束。但这并非强制:

  • 外部程序可通过独立逻辑读取账户数据并传递结果。
  • Solana 运行时无 staticcall 等原生支持。

其他框架如 [Seahorse](https://seahorse-l...

剩余50%的内容订阅专栏后可查看

该文章收录于
Solana 学习开发之旅
39 订阅 38 篇内容

0 条评论