Solana 数据账户与程序账户对比
作者 Tau
Solana 是一个去中心化的区块链平台,通过独特的账户模型来编排流程,从而实现快速、安全和可扩展性。一个完整的 Solana dApp 通常由三种账户类型组成:原生账户、数据账户和程序账户。
本文重点介绍 Solana 数据账户和程序账户,以及它们在 Solana 区块链上如何协同工作,同时对比它们与 Ethereum 智能合约——Ethereum 上对应的账户概念——之间的差异。
什么是 Solana 数据账户?
Solana 数据账户是 Solana 区块链上的一种账户类型,用于存储数据,例如代币、文档或其他类型的信息。 数据账户可以存储状态,但不可执行。
数据账户与其他区块链平台上的账户类似,具有余额,并能接收和发送交易。这些账户与元数据一起,标识了其所有者以及运行时可能发生的交互类型。钱包账户、mint 账户和代币账户就是数据账户的典型例子,因为它们持有价值,并归属于某个用户和程序账户。
什么是 Solana 程序账户?
程序账户是 Solana 区块链上的智能合约,用于执行代码,通常由传入的交易或时间的推移触发。 程序账户可以与数据账户交互,从而读写区块链上的数据。程序账户本身无法存储可变状态,而是从数据账户中调用这些状态。
Solana 数据账户与程序账户之间的一个关键区别在于:程序账户只能由其他程序账户创建,而数据账户可以由任何开发者或用户创建。不过,程序账户可以用来创建更多程序账户,从而在 Solana EVM 上构建复杂的多层智能合约系统。
数据账户与程序账户如何协同工作?
数据账户可用于存储程序账户所使用的数据,而程序账户可以与数据账户交互来读写这些数据。数据账户与程序账户在 Solana 区块链上共存并协作,支撑起广泛的 dApp 功能和服务。
例如,一个程序账户可以用来创建一个简单的代币合约,允许用户在数据账户之间转移代币。在这种情况下,程序账户负责执行合约逻辑,而数据账户则用于存储代币余额。
大致如下:
在这个例子中,我们创建了一个名为 "transfer_tokens.wasm" 的程序账户,其中包含将代币从一个账户转移到另一个账户的逻辑。然后,我们可以使用 invoke 方法将数据账户与程序账户连接起来,把数据账户和转账所需的参数作为数组传入。
当程序账户被执行时,它会使用数据账户中存储的数据来完成代币转账。在这个例子中,程序账户会将 100 个代币从代币账户转移到接收账户。
你可以用上述示例中演示的程序流程来测试你选择的任何其他程序,或是 Solana Program Library (SPL) 中一些预制的程序。
Solana 账户与 Ethereum 智能合约
Solana 数据账户和程序账户与 Ethereum 智能合约类似,但在存储方式、调用方式、执行模型、gas 等方面存在一些关键区别。
Solana 数据账户和程序账户在哪些方面与 Ethereum 智能合约不同?
Solana 数据账户和程序账户与 Ethereum 智能合约的区别在于数据存储方式、合约调用方式、执行模型、语言支持以及 gas。
1. 数据存储
在 Solana 区块链上,数据账户用于存储数据;而在 Ethereum 区块链上,数据存储在智能合约内部。这意味着在 Solana 上,数据与操作数据的逻辑是分离的,而在 Ethereum 上,数据和逻辑合并在同一个智能合约中。
2. 合约调用
在 Solana 区块链上,程序账户由传入的交易、来自其他程序的调用(即跨程序调用)或时间的推移触发。在 Ethereum 区块链上,智能合约由传入的交易触发,也可以被其他智能合约调用。
3. 执行模型
Solana 数据账户和程序账户由 Solana 网络中的验证者执行,而 Ethereum 智能合约由各个节点上的 Ethereum Virtual Machine(EVM)执行。
4. EVM gas 与数据的关联
Solana 数据账户可以存储无限量的数据,而 Ethereum 的 智能合约存储空间 有限,受执行过程中消耗的 gas 量限制。
5. 语言支持
Solana 程序账户可以用任何能编译成 WebAssembly(WASM)的语言编写,而 Ethereum 智能合约通常用 Solidity 或 Vyper(一种基于 Python 实现的 Solidity)编写。
Solana 数据账户和程序账户在哪些方面与 Ethereum 智能合约相似?
Solana 数据账户和程序账户在智能合约功能、去中心化、不可变性、透明性和可编程性方面与 Ethereum 智能合约相似。
1. 智能合约功能
Solana 账户和 Ethereum 智能合约都可以用于促成交易、自动化流程,例如转移资产或管理供应链物流。
2. 去中心化
Solana 账户和 Ethereum 智能合约都部署并执行在去中心化的公共区块链网络上。
3. 不可变性
Solana 数据账户、程序账户或 Ethereum 智能合约一旦部署到区块链上,就无法修改或删除。
4. 透明性
Solana 数据账户、程序账户以及 Ethereum 智能合约中存储的代码和数据都是公开可访问的,从而具备透明性和可审计性。
5. 可编程性
Solana 数据账户、程序账户以及 Ethereum 智能合约都是可编程的,这意味着它们可以包含逻辑,并根据特定条件执行相应的功能。在 Solana 上,程序账户可以创建其他程序账户;而在 Ethereum 上,智能合约可以调用其他智能合约。
Neon Labs 的 Solana EVM 如何处理程序、账户和智能合约?
Neon Labs 的 Solana EVM 是一个允许开发者使用 Solidity/Vyper 编程语言来构建并将 Ethereum 智能合约部署到 Solana 区块链的工具,使得将现有的 Ethereum 应用移植到 Solana 变得容易。在 Neon EVM 于 Solana devnet 和主网上线之前,Ethereum 应用与 Solana 生态系统是不兼容的。
Neon EVM 为智能合约提供了一个平台,让它们能够像在 Ethereum 区块链上那样执行,同时享受账户在 Solana 区块链上通常具备的特性,例如低 gas 费用和高吞吐量。
Solana EVM 的工作原理是在 Solana 区块链上模拟 Ethereum Virtual Machine,使 Ethereum 智能合约能够在 Solana 上执行,其执行方式与在 Ethereum 区块链上的执行方式类似。这意味着开发者可以利用已有的 Solidity 编程语言知识和 Ethereum 生态系统经验,在 Solana 上发布应用。
借助 Alchemy 构建 Solana 账户
一个基于 Solana 构建的去中心化应用通常由原生账户、数据账户和程序账户组成。原生账户代表 Solana 上的程序,数据账户存储信息,程序账户则在 Solana 上执行代码。如果你想开始构建,现在就在 Alchemy 上注册一个免费的 Solana 开发者账户!
相关概览
Solana2026年7月27日
Solana 节点:验证者节点、RPC 节点与自建节点
Solana 节点是什么,验证者节点、RPC 节点与辅助数据系统有何区别,以及何时应自建节点、何时应使用第三方服务。
Solana2026年7月22日
Solana 归档数据:如何查询完整的区块与交易历史
Solana 归档数据详解:节点为何修剪历史数据、哪些 RPC 方法需要归档访问权限,以及如何大规模查询完整的区块与交易历史。
Solana2026年5月28日
Solana Agent Kit 与 GOAT 与 ElizaOS:该选哪个框架?
对比 Solana Agent Kit、GOAT 与 ElizaOS:Solana 原生深度、多链广度还是完整的 agent 运行时。包含代码示例与决策框架。

构建区块链应用
Alchemy 将最强大的 Web3 开发者产品和工具与资源、社区及专业支持结合在一起。