Solana SPL与以太坊ERC-20 - 深入探讨状态、可扩展性和架构

  • thogiti
  • 发布于 2025-02-28 22:41
  • 阅读 43

本文深入探讨了以太坊的ERC-20和Solana的SPL代币标准在状态和代码分离的不同哲学,及其对交易吞吐量、数据管理和可扩展性的影响。通过分析各自的设计架构,本文揭示了代币创建和持有的数量差异,实时处理能力以及未来可能的发展方向。

概述

同质化代币构成了现代区块链生态系统的基础——为去中心化金融 (DeFi)、稳定币、NFT、游戏等提供支持。然而,一个链如何处理状态与代码的分离可以对状态增长、数据管理和可扩展性产生深远的影响。两个主要的代币标准——以太坊的 ERC-20 和Solana的 SPL——在这方面体现了不同的哲学。

ERC-20 合约在每个代币的基础上一起存储余额和代码,而 SPL 代币依赖于一个共享的程序和许多较小的独立“账户”数据结构。本文深入探讨了 为什么 这两种方法会有所不同,以及 这些差异如何 影响交易吞吐量、链上存储、开发者体验,以及最重要的不断增长的区块链状态。在此过程中,我们将研究代码重复、基于租金的修剪、并发以及现实中的压力——提供一个技术视角,探讨每个生态系统的设计决定如何塑造代币化的未来。


两种迥异的哲学

ERC-20: 合约中心化

在以太坊中,每个代币都有自己的智能合约。开发者通常会部署一个实现 ERC-20 接口的 Solidity(或 Vyper)合约,其中包含像 balanceOf、transfer、approve 等函数。这些合约维护一个内部账簿——例如,mapping(address \=> uint256)——以存储用户余额。

// 简化的 ERC-20 接口(示例)
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    // 等等。
}

因为每个 ERC-20 代币使用自己的代码和状态,开发人员可以引入如可暂停转账、黑名单或通货紧缩销毁等功能。然而,在数十万个合约中重复代码可能会膨胀以太坊的全局状态并导致高昂的部署成本。

SPL: 一个通用程序

Solana的 SPL 代币采用了截然不同的方法。Solana并不为每个代币部署代码,而是托管了一个单一的链上代币程序,该程序处理标准代币逻辑。创建一个新代币仅仅是初始化一个表示网络上唯一代币且存储全局元数据(如总供应量)的 Mint 账户——这是一个小的数据结构,包含总供应量、精度和授权等字段。每个用户的余额保存在一个独立的 Token Account(由该用户的密钥对拥有)中,而不是跟踪特定 mint 账户的代币的合约映射。

Solana 代币程序 Solana代币程序

Solana Mint 账户 Solana Mint 账户

Solana 关联 Token 账户 Solana关联 Token 账户

Solana 账户关系 Solana账户关系

Solana 账户关系扩展 Solana账户关系扩展

// 伪代码:创建一个 SPL mint 账户
let mint_account = create_account_for_rent_exemption(...);
initialize_mint(
    &token_program_id,
    &mint_account,
    &mint_authority,
    &freeze_authority,
    decimals,
);

代币程序: Solana的每个代币最终都是由代币程序管理。这个链上程序包含所有指令(例如 InitializeMint, MintTo, Transfer),允许用户创建和操作代币数据。它拥有相关的代币账户和 mint 账户,强制执行其逻辑和规则。

Mint 账户: Mint 账户是一小部分链上数据,存储关于特定代币的全局元数据:其总供应量、小数精度以及可以铸造或冻结它的权威。只有代币程序可以修改 Mint 账户,确保诸如最大供应量或出资权威等规则得到正确执行。

Token 账户: Token 账户跟踪所有者拥有的特定 Mint 的单位数量。Solana不是在单个合约中使用一个大的映射,而是使用独立的账户:每个 Token 账户引用一个单一的 Mint 和一个所有者(你的钱包)。余额存储在该 Token 账户的数据中(amount 字段)。

关联 Token 账户: 关联 Token 账户只是一个地址由用户的钱包地址和代币的 Mint 地址确定性衍生出的 Token 账户。因为它使用程序衍生地址 (PDA),可以在没有额外链上存储的情况下重新创建或查找。

程序衍生地址 (PDA): 程序衍生地址是由Solana程序使用某些输入(如用户的钱包密钥、Mint 密钥和种子)创建的地址。PDA 不能由标准私钥签名;它们以编程方式“拥有”。对于关联代币程序,使用基于 PDA 的地址确保每对(钱包,mint)都有一个唯一的、可发现的代币账户。

基本上,代币程序是处理代币的通用代码库,Mint 账户定义每个独特的代币,Token 账户保存用户余额,关联 Token 账户是通过 PDA 衍生出的具有可预测地址的特殊 Token 账户,而系统程序负责正常的钱包地址(如你的主要 SOL 余额)。它们共同形成了Solana上同质化和非同质化代币生态系统的基础。

因为没有合约部署,铸造创建的成本通常只需几分钱,尽管每个新持有者的 Token 账户需要一个小的租金豁免存款(\~0.002 SOL)。

关键架构差异:

  • ERC-20:为每个代币部署一个新的智能合约 → 代码中心化
  • SPL:重用一个通用程序;新代币只是数据“账户” → 数据中心化

“每个代币 = 新合约”与“一个共享程序与多个小账户”的底层模型对状态增长、可扩展性和执行成本产生了根本不同的模式。


状态与数据:合约与账户模型

以太坊:在全球 Trie 中存储合约

在以太坊中,每个 ERC-20 合约通常维护一个 mapping(address \=> uint256),将用户地址映射到余额。每个新持有者需要 32 字节的存储。随着时间的推移,随着代币数量的激增,这些映射占据了以太坊全局状态的很大一部分。分析表明,ERC-20 和 ERC-721 代币共同占据了大约 50% 的以太坊状态,其中 ERC-20 单独占 \~27%(来源:Paradigm,2024)。由于没有租金机制,这些存储槽在没有明确清零的情况下会无限期保留——大多数代币往往不这样做。

在 2021年的 NFT 热潮中,以太坊的状态快速膨胀,达到每月约 6 GB,截至 2024 年初降至 \~2.6 GB/月(Paradigm,2024)。虽然以太坊会修剪历史区块数据,但每个全节点必须存储整个 最新 状态 trie。一个显著的例子是 2017 年 CryptoKitties 热潮的影响,它使网络拥堵并推高了 Gas 费用。

存储退款机制

在以太坊,如果将一个存储槽从非零值设置为零,则可以获得部分 Gas 退款(最大退款不能超过交易 Gas 使用的一半)。这一机制可以稍微缓解状态膨胀——例如,如果用户的余额设置为零,合约可以释放这 32 字节的槽——但实际上,除非有项目明确编码,否则很少发生大规模状态清理。合约的 SELFDESTRUCT 也可能存在,但在 ERC-20 代币中很少使用,因为它完全删除代币逻辑。

Solana:基于账户和租金经济学

Solana将其链上数据结构分为多个账户。对于 SPL 代币,每个代币都有一个 Mint 账户(\~82 字节)和每个持有者的 Token 账户(165 字节)。尽管 165 字节比以太坊的 32 字节槽要大,但不需要代码重复——所有 SPL 代币仅有一个代币程序。

租金机制鼓励用户仅在需要时保持账户活跃。使 Token 账户租金豁免目前需要大约 0.002 SOL(可退款)(Solana Stack Exchange,2023)。如果用户放弃了一个账户或未能保持足够的 SOL,该账户可能最终会被清除,从全局状态中删除。然而,在实践中,许多账户保持开放并长期豁免租金。

租金成本细分

Solana的协议通过账户大小(以字节为单位)、每个纪元的租金费率和预存款覆盖多少个纪元的系数来确定租金。通常,存入足够的 SOL 以覆盖两年的租金(或更多)会使该账户“豁免”,确保其无限期留在链上,除非用户明确关闭它。用户可以通过关闭账户来回收他们的 SOL 存款,有效释放那部分的全球状态。虽然直观,但许多空气分发和迷因币的现实导致数以千万计的小 Token 账户未被关闭。

尽管积极修剪历史账本数据——使节点通常只存储较新的槽——Solana的实时账户状态依然可能增大。这种增长因几乎为零的交易费用而加剧,使得每天铸造 35,000–40,000 个新代币(DuneAnalytics)或进行大规模空投变得微不足道。


代币创建与持有者数量:定量快照

指标 以太坊 (ERC-20) Solana (SPL)
代币总数 \~148 万 ERC-20 合约(2025年2月) [Etherscan] \~2900 万 SPL 代币(2025年2月) [DuneAnalytics],创建峰值达 2 万/天
创建成本 高 Gas 费用部署新合约(拥堵时数百美元) 可忽略的成本:初始化一个 Mint 账户 (\~$0.001–0.01),但每个持有者需要租金存款
每个持有者的存储 合约存储中的 32 字节(在清除之前持续存在) 165 字节的 Token 账户,租金豁免存款 \~0.002 SOL(可退款)
持有者地址 数千万个 ERC-20 持有者(一些地址持有多个代币) 数千万个代币账户,许多余额微不足道
垃圾邮件与质量 高 Gas 成本限制垃圾邮件;较少的无聊代币,但进入门槛较高 最低成本促进了许多实验性/垃圾邮件代币,大量小账户造成高开销

到 2024 年中旬,Solana已在大约一半的时间内达到了以太坊的 ERC-20 代币数量。截至 2025 年 2 月,Solana超过 2900 万个独特的 SPL 代币(DuneAnalytics)。虽然以太坊的 Gas 费用阻止了一些垃圾邮件,但Solana几乎为零的费用则诱使大量代币的激增——有时是短暂的或纯粹为了投机。


铸造与低级机制

以太坊:部署智能合约

推出一个 ERC-20 代币意味着编写(或重用)一个 Solidity 实现,自定义函数(铸造、销毁、暂停等),并支付 Gas 将该代码存储在链上。一旦部署,每次转账或铸造操作涉及 SLOAD / SSTORE 操作码来读取/写入合约的存储 trie。大规模空投或将代币分配给数千个新持有者的费用可能过高,因为每个新存储槽的成本是相当可观的。

Solana:在代币程序下初始化账户

在Solana中,你不为每个代币部署代码。相反,你调用现有的代币程序来初始化一个 Mint 账户。供应量和元数据存储在那个小的 Mint 账户中,而每个用户的余额则存储在一个独立的 Token 账户中。因此,代币创建是非常便宜的,但每个新持有者必须资助或获得租金豁免。


交易执行:顺序与并行

以太坊的 EVM

以太坊在每个块内顺序处理交易。如果许多用户同时与一个流行的 ERC-20 代币合约交互,它很容易成为瓶颈;一次只能有一笔交易修改合约的存储。这通常会导致 Gas 费用飙升。下面是一个展示典型 ERC-20 转账的 Mermaid 图。

该图展示了每笔交易是如何广播、包含在块中并按顺序执行——最终执行 SSTORE 更新单一合约的存储。

flowchart TB
    A["用户签名交易(转账/铸造)"] --> B[广播到以太坊网络]
    B --> C[验证人包含在区块中]
    C --> D["EVM 执行合约代码<br/>(顺序)"]
    D --> E[SLOAD/SSTORE 在 ERC-20 存储中]
    E --> F[全球状态 Trie 更新]
    D --> G[Gas 计算]
    G --> H["交易收据(日志等)"]

Solana的 Sealevel 运行时

Solana的执行模型称为 Sealevel,试图对不访问重叠账户的交易进行并行处理。代币转账通常仅接触发送者和接收者的 Token 账户,因此如果两个转账涉及不同的账户集,它们就可以并行运行:

以下是一个图表,展示了 SPL Mint 或 Transfer 指令的并行执行,只要账户没有重叠。

flowchart TB
    A["用户签名交易(SPL 指令)"] --> B[发送到Solana节点]
    B --> C[Sealevel 检查重叠]
    C --> D[如果没有重叠则并行执行]
    D --> E["SPL 代币程序 (BPF)"]
    E --> F["在 AccountsDB 读/写代币账户"]
    F --> G[租金计算、余额更新]
    E --> H["指令结果(成功/失败)"]

如果许多交易针对相同账户(例如,单个 Mint 的供应量),那么这些交易必须排队。然而,通常情况下,这种并发性推动了代币操作的更高吞吐量,并降低了垃圾邮件或空投的成本。


现实世界示例:DeFi 热潮与迷因币空投

两个不同的事件展示了每个链的架构在压力下的反应:

  1. 以太坊的 DeFi 夏季(2020):随着 Uniswap 和 Compound 等协议获得关注,用户不断与各种 ERC-20 代币交互。Gas 费用在活动高峰时飙升至几十美元——甚至超过 100 美元——由于顺序交易处理和有限块容量,迫使块空间竞争加剧。
  2. Solana的空投与迷因币季节 (2023–2024):像 BONK 这样的代币在短时间内空投给数万地址。虽然Solana的并行模型处理了大量转账的总体量,但数百万新的 Token 账户出现了,膨胀了链的实时状态,并迫使节点运营商升级硬件。很多账户之后未被使用但仍然保持租金豁免——仅当用户明确关闭它们时才能回收。

这两个事件都强调了可扩展性限制依然是现实,无论是在以太坊上的 Gas 成本还是在Solana上的账户泛滥。


历史趋势与优化

以太坊

  • 2017 ICO 热潮:数以千计的 ERC-20 代币出现,推动了一波新的去中心化应用。
  • DeFi 和 NFT 时代(2020–2021):流动性挖矿和 NFT 疯狂大幅增加链上活动,某些时期推动状态增长至 \~6 GB/月。
  • 状态管理辩论:提出状态租金或数据过期的方案,但截至 2024 年尚无重大协议更改。
  • Layer-2 转移:许多项目在滚动链(优化、ZK)上部署代币,减少主网的 L1 Gas 费用和状态使用。

Solana

  • 早期采用(2020–2021):SPL 代币由 Serum、Raydium 和新兴 NFT 场景使用。
  • 迷因币与空投热潮 (2022–2024):超低费用使得每日铸造 15,000–20,000 个代币在高峰时成为现实,Token 账户的数目飞速增长达数千万。
  • 状态压缩与租金:Solana对 NFT 引入了压缩(存储 Merkle 树),可能将类似理念推广到同质化代币。租金机制存在,但通常通过使每个账户租金豁免来规避。
  • 高性能硬件:该链依赖于频繁升级硬件,以支持并行执行,但需要强大的验证者资源。

关键要点

对比方法,共通挑战

以太坊的顺序合约中心化代币模型提供了深度定制与成熟的 DeFi 流动性,但可能面临高 Gas 费用和无限制的状态增长。Solana的并行、基于程序的设计则允许快速转账与廉价代币创建,却面临账户膨胀和大量琐碎代币的挑战。

潜在未来发展

  • 以太坊的 L2 扩张:随着滚动链的发展,更多 ERC-20 代币活动可能迁移到主链之外,减少 L1 拥堵与状态负载。关于未来实施某种状态租金或“无状态性”的讨论仍在持续,但尚未形成明确计划。
  • Solana的租金与压缩:租金机制可能变得更加严格,迫使真正不活动的 Token 账户消失。压缩技术最初用于 NFT,可能会扩展到同质化代币。适度的费用增加可能会遏制生成数以万计的短暂代币。
  • 收敛?:我们可能会看到每个生态系统从彼此借鉴。例如,以太坊在 L2 解决方案上采用更通用的代币逻辑,或Solana提高最低费用以遏制垃圾邮件。

结束语

决定在哪里部署一个代币取决于用户基础、费用容忍度、流动性需求和期望的吞吐量等因素。ERC-20 仍然是行业标准,由以太坊强大的 DeFi 和开发者生态系统支持。SPL 解锁了近乎瞬时、低成本的转账,并具有更统一的代码足迹。两者都面临着在保持可及性的同时管理状态的持续挑战。

最终,这两种标准照亮了设计可持续的、用户友好的区块链的复杂性。通过理解代币的创建、存储与转移方式所涉及的权衡,我们对将塑造下一代链上资产与应用的力量有了更深入的理解。


参考文献

  1. Paradigm (2024): 如何提高 Gas 限额,第一部分:状态增长 - 详细分析以太坊状态膨胀及代币占比。
  2. Solana Cookbook使用代币程序的指南
  3. Solana Stack Exchange (2023)租金豁免详细信息
  4. Etherscan 代币追踪器ERC-20 代币统计
  5. DuneAnalytics: 报告 >40,000 新代币/天 在Solana高峰时铸造。
  6. 测量基于以太坊的 ERC20 代币网络 (FC19):2019 年研究显示 1945 万个 ERC-20 地址。
  7. Cointelegraph: Solana拥有 1 亿活跃钱包,但大多数为空账户 - Solana SPL 代币唯一地址的报道。
  8. 以太坊开发者的Solana开发完整指南
  9. Solana上的代币
  • 原文链接: github.com/thogiti/thogi...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
thogiti
thogiti
https://thogiti.github.io/