本文介绍了EVM开发者如何转向Solana平台,包括Solana的架构、技术优势、开发工具及账户模型的不同,强调程序的无状态特性以及数据存储的外部化。同时,文章比较了Ethereum和Solana的交易处理模型、费用机制及开发工具,帮助开发者顺利过渡。
以太坊虚拟机(EVM)多年来一直是去中心化应用(dApp)开发的基础,但 Solana 的创新架构提供了诸如高吞吐量、低延迟和成本效率等独特优势。本指南旨在为希望在 Solana 上构建应用的 EVM 开发者设计。通过利用你对以太坊和 EVM 的现有知识,本指南将帮助你理解 Solana 的关键概念、工具和工作流程。
在本指南结束时,你将对 Solana 的架构有一个清晰的理解,并了解其与以太坊的不同之处。你将学习账户、执行模型和交易处理等关键概念如何与 EVM 进行比较,帮助你将开发思维从基于 Solidity 的智能合约转变为 Solana 的无状态 Rust 程序。
不需要有 Rust 或 Solana 的先前经验。我们将以适合以太坊开发者的方式解释关键差异。
作为以太坊开发者,探索 Solana 提供了独特的机会,得益于其技术优势和相当明显的生态系统增长。
高吞吐量的并行执行:Solana 利用 Sealevel,一个并行执行引擎,允许多个交易同时处理,而不是以太坊的顺序执行模型。这使得在没有网络拥堵的情况下实现更高的吞吐量。
无状态程序:与以太坊智能合约不同,后者存储自己的状态,Solana 程序是无状态的,并通过外部账户进行数据存储。这种代码和状态的分离提高了效率并减少了链上存储成本。
单体设计:与以太坊的模块化路线图不同,Solana 旨在原生扩展,无需依赖 rollup 或分片。这意味着更简单的开发、更少的跨链复杂性、没有流动性分散,更好的用户体验。
成本效率:Solana 的 Layer 1 架构被设计为低交易费用,为开发者和用户提供了经济可行的环境,而无需依赖附加的扩展解决方案。
链 GDP 增长:在 2024 年第四季度,Solana 的总应用收入(称为链 GDP)环比增长 213%,从 2.68 亿美元增长到 8.4 亿美元。值得注意的是,仅 11 月,当月的应用收入就达到了 3.67 亿美元。
DeFi 总锁定价值(TVL):在 2024 年第四季度末,Solana 成为第二大 DeFi TVL 区块链,达到 86 亿美元,标志着环比增长 213%。
去中心化交易所(DEX)主导地位:Raydium 作为 Solana 的一家领先 DEX,在 2024 年第四季度的平均日交易量达 32 亿美元,较去年大幅增长。Raydium 在全球 DEX 交易量的份额也环比上升超过 66%,使其成为按交易量计算的第二大 DEX,仅次于 Uniswap。
流动性质押增长:Solana 的流动性质押率环比上升 33%,达到了 11.2%。作为一家领先的流动性质押提供商,Sanctum 现在支持超过 100 种流动性质押 Token(LST)。
网络的技术能力,加上不断扩展的生态系统,使其成为开发者的一个吸引人选择。通过学习如何在 Solana 上构建应用,你可以利用这些机会并为网络的增长做出贡献。
如需详细分析,请参考 Messari 的 State of Solana Q4 2024 报告。
在开始之前,熟悉以太坊和 Solana 的术语差异至关重要。
以太坊 (EVM) | Solana (SVM) | 描述 |
---|---|---|
智能合约 | 程序 | 在以太坊中,智能合约存储逻辑和状态。在 Solana 中,程序是包含可执行代码但无状态的账户,数据存储在单独的账户中。 |
Wei | Lamports | 在以太坊中,wei是ETH的最小单位,其中1 ETH = 10¹⁸ wei。在 Solana 中,lamports是SOL的最小单位,其中1 SOL = 1,000,000,000 lamports。 |
Gas | 计算单位 | 在以太坊中,Gas 测量交易所需的计算工作量,其中费用 = gas 使用量 ×(基础 + 优先级) 。在 Solana 中,计算单位(CUs)充当类似角色,其中费用 = 固定基数(每签名)+(CU × CU 价格) 。 |
ABI | IDL(接口描述语言) | 在以太坊中,ABI(应用程序二进制接口)定义了合约与外部应用的交互方式。在 Solana 中,IDL(接口描述语言)具有相同的目的,定义程序如何为客户端交互暴露函数。 |
代理合约 | 程序 | 在以太坊中,代理合约用于启用智能合约更新。在 Solana 中,程序是默认可升级的。 |
Nonce | 区块哈希 / 持久性 Nonce | 以太坊交易使用逐增的每账户 nonce来防止重放攻击。Solana 主要使用最近的区块哈希进行交易验证,但也支持 Durable Nonces 用于离线签名和更长的交易有效期。 |
交易 | 指令 | 在以太坊中,交易通常调用单个合约函数,即使涉及复杂的合约逻辑。在 Solana 中,交易由一个或多个指令组成,每个指令调用一个程序以执行特定操作。 |
ERC20 Token | SPL Token | 在以太坊中,ERC-20 Token 是为每个 Token 部署的单独智能合约。在 Solana 中,SPL Token 通过一个共享的 Token 程序进行管理,消除了为每个 Token 部署单独合约的需求。 |
如果这些概念仍有些不清晰,别担心。我们将在本指南后续部分对其进行更详细的覆盖。
在以太坊中,智能合约存储自己的状态,这意味着存储和执行是捆绑在一起的。在 Solana 中,程序根本不存储任何状态。所有状态都存储在与合约本身分开的账户中。
以太坊账户有两种形式:
当你在以太坊上部署智能合约时,它存储在合约账户中,并且所有状态修改都会发生在该账户内。
在 Solana 上,一切都是账户。但它们分为两类:
程序账户可以通过分配来自另一个程序的账户或使用程序衍生地址(PDAs)模型在数据账户中存储其数据。开发人员可以通过将程序设置为账户所有者并使用种子生成地址来生成这些数据账户。
从下图可以看出,一个账户有五个字段:lamports
、owner
、executable
、rent_epoch
和 data
。
_图片来源_
程序衍生地址(PDA)是一种特殊类型的账户地址,程序可以控制而无需私钥。它们允许程序签名。如果 PDAs 是基于其程序 ID 生成的,程序可以用于签署。此外,它们允许确定性数据存储,以确保相同的种子值将始终生成相同的 PDA。
PDA 可用作链上账户的地址(唯一标识符),提供方便存储、映射和提取程序状态的方法。 来源
开发人员可以使用种子和 bump 生成 PDA,确保它们不会与用户控制的地址发生冲突。bump 是一个额外值(介于 0 和 255 之间),加到种子上以生成唯一地址。
例如,假设我们的程序有一个 increment
函数,用于递增计数器。我们可以为每个用户创建一个单独的 PDA,而不是将所有用户计数器存储在单个账户中,其中 PDA 的种子基于用户的公共密钥。
increment
,程序定位并更新用户 A 的计数器 PDA。increment
,程序定位并更新用户 B 的计数器 PDA。authority
字段来设计权限检查,以根据程序的逻辑给予用户间接控制。这消除了每次写入时显式授权的需要,使 Solana 程序的高效性显著提高。
Solana 的账户模型带来了一些关键优势,改善了用户体验,使在 Solana 上构建变得更加容易。让我们探讨一些这些好处。
Solana 的账户模型通过要求每个交易预定义将要读取和写入的账户,启用了并行执行。这使得非冲突交易可以并行处理,提高了网络效率并减少了拥堵。
其工作原理:
Solana 优先费 API
QuickNode 的 Solana Priority Fee API 允许开发人员获取最新费率的优先费用。
交易 1 | 交易 2 | Solana 上的执行模型 |
---|---|---|
Alice 向 Bob 发送 SOL | Alice 向 Charlie 发送 SOL | 顺序 |
Alice 向 Bob 发送 SOL | Charlie 向 Carol 发送 SOL | 并行 |
为什么这很重要:
Solana 账户模型的其他关键优势是程序可重用性。Solana 允许多个应用程序与共享链上程序进行交互。这减少了代码重复、部署成本和执行效率低下,使 Solana 更加可扩展和可组合。
在以太坊中,每个新用例(Token、NFT、DeFi 协议)通常需要:
例如,如果你创建一个新的 ERC-20 Token,你必须部署一个全新的智能合约,尽管大多数 ERC-20 合约在功能上是相同的。
Solana 程序设计为可共享和可重用的。开发者可以在现有程序下创建新账户,而不是为每个用例部署新程序。
例如,Solana Token Program 管理所有 SPL Token(Solana 的 Token 标准),消除了为单个 Token 创建单独合约的需要:
这些示例还可以扩展到 DAO、NFT 等其他用例。
本指南无法覆盖 Solana 账户模型的所有细节。如果你希望了解更多关于 Solana 账户模型的信息,请查看我们的 Solana 账户模型简介 指南。
在以太坊和 Solana 之间转变时,理解交易费用的工作原理至关重要,因为它们的处理方式由于架构选择的不同而存在显著差异。虽然它们有一些相似之处,例如有优先费用和基础费用,但费率结构却不同。
全球费用市场:以太坊运行着一个通用费用市场,其中某一领域(如 NFT 铸造)的高需求可能会推动所有交易的 gas 价格上涨。Gas 测量计算工作量,而你设置的 gas 价格决定交易的优先级,导致费用高峰和网络拥堵期间成本增加。
基础费用:以太坊的每个区块有一个基础费用,由当前区块之前的区块确定。
优先费用:优先费用是为了激励验证者优先处理交易。用户可以支付更高的优先费用以确保其交易优先于其他交易包含在一个区块中,这可能导致在网络拥塞期间的费用峰值。
Gas 测量计算工作量,类似于 Solana 的计算单位,总费用计算为gas 使用量 * gas 价格
,而 gas 价格由基础费用和优先费用组成。
Solana 的费用结构确保只有与同一账户交互的交易相互竞争优先级,而其他交易不受高需求操作的影响。
基础费用:
优先费用:
总费用取决于用户愿意支付的优先费用以及交易所需的总计算(更复杂的交易需要更多的计算单位)。
租金(存储成本):
Solana 和以太坊都支持原子交易,这意味着如果交易的任何部分失败,整个交易将被回滚。然而,Solana 和以太坊的交易处理方式略有不同。
在以太坊中,交易通常是对智能合约的单一函数调用。因此,开发者可能需要创建自定义函数以处理特定用例。
以太坊使用增量 nonce(与你的账户相关联的计数器)确保交易唯一,并防止重放攻击。交易等待在内存池中,等待验证者选择,但这可能导致抢跑交易或在网络拥堵时期的高 gas 费用。
Solana 采取滚动,而事务可以捆绑多个指令(可视为小函数调用),使你能够链式操作(例如,转移 tokens 和更新余额)一次完成。
然而,限制了可以包括在单个交易中的指令数量:
Solana 的计算单位
限制 | 计算单位 |
---|---|
每个区块的最大计算 | 4800 万 |
每个账户每个区块的最大计算 | 1200 万 |
每个交易的最大计算 | 140 万 |
默认交易计算 | 20 万 |
随着你对 Solana 的进一步了解,你可能会遇到这些交易限制。有一些工具,例如 Lil' JIT Jito Bundles,使多交易的原子批处理成为可能,从而允许复杂的执行超出标准的 CU 限制。
Solana 使用最近的 blockhash
而不是 nonce
来验证交易。此 blockhash 对 150 个区块有效,之后交易失效。
另外,Solana 支持 持久性 Nonces,允许事务离线签名后随时提交。持久性 Nonces 是唯一和顺序的,可以防止重放攻击,确保延迟交易的安全执行。
没有内存池,但优先费用仍然在订单排序中发挥作用。交易直接发送到验证者和领导者,减少了开销并缩短了延迟,但需要验证者向领导者转发交易,直到它们被处理。
领导者负责生成区块,每 4 个区块进行一次轮换。
Solana 交易
Solana 交易由以下组成:
有关 Solana 交易的更多详细信息,请查看我们的 指南。
以下是对以太坊(EVM)和 Solana(SVM)之间的一些常用开发工具的比较表,以帮助你顺利过渡。
以太坊工具 | Solana 对应工具 | 描述 |
---|---|---|
Solidity | Rust、C、TypeScript、Assembly | Rust(有或没有 Anchor)是 Solana 的标准。C、Assembly 和 TypeScript 也用于 Solana。 |
Hardhat/Foundry | Solana 测试验证器、LiteSVM、Luzid | 类似于 Hardhat 节点的本地区块链,用于测试程序和账户。 |
Hardhat/Foundry | Program-test、BankRun.js | Rust 和 JS 测试框架,用于程序测试 |
Ethers.js / Viem | @solana/kit(前身为 Solana Web3.js 2.x)、Solana Web3.js 1.x(不推荐使用) | 用于客户端 dApp 交互的 JavaScript SDK,类似于 Ethers.js。 |
Remix | Solana Playground | 基于 Web 的 IDE,编写、测试和部署 Rust 程序,类似于 Remix 的便利性。 |
ABI | Codama、Shanks、Anchor | 标准化的 IDL 和客户端生成工具,替代以太坊的 ABI,进行程序交互。 |
Etherscan | SolanaFM、Solana Explorer、Solscan | 用于检查账户和交易的区块链浏览器,类似于 Etherscan。 |
scaffold-eth | create-solana-dapp | 用于快速 dApp 设置的模板生成器,类似于 scaffold-eth。 |
RainbowKit | Solana Wallet Adapter | 处理钱包连接的框架,类似于以太坊中的 wagmi 或 RainbowKit。 |
不准备使用 Rust?
如果你还没有准备深入学习 Rust,可以使用 Neon,在 Solana 程序中部署的 EVM。它允许你编写 Solidity 合约并将其部署在 Solana 上。你可以在 这里 找到更多 Neona 信息,查看我们的 Neon 指南。
在智能合约(程序)开发中,Solana 采取不同的方法,程序是无状态的,数据存储在单独的账户中。
本节将帮助你理解以太坊和 Solana 智能合约开发之间的关键差异,而不深入研究。
mapping(address => uint256) balances;
)在合约内部存储数据。想问题时,不要以映射为思路,而是要以创建可以存储每个用户或实体所需数据的单独账户为思路。
msg.sender
和 tx.origin
处理授权msg.sender
调用函数的用户是谁,以及通过 tx.origin
得到发起交易的用户。示例:要将 Token 从一个用户转移到另一个用户,交易必须包括:
在设计 Solana 程序时,总是要以账户为思考对象。你必须传入程序交互的每个账户。
Solana 只有一个中心化的 Token 程序,管理所有 SPL(Solana 程序库)代币。
相较于以太坊(例如 ERC-20),不需要为每种代币部署新合约,你只需在 Token 程序下创建一个铸造账户。
Token 程序处理所有核心代币功能,包括:
每个用户的代币余额存储在专用代币账户中——一个与用户的钱包地址和 Token 的铸造地址Hook的 关联代币账户(ATA)。
Solana 还引入了 SPL Token 2022,增强了原 Token 程序的高级功能,例如元数据、转移保护、转移费用等。
尽管 本指南没有涵盖所有差异,但这些是转变时应牢记的一些关键区别。
接下来,我们将探索使用 Solana 开发的基础知识,包括钱包和命令行工具。
尽管可以通过库以编程方式创建钱包,但以太坊开发者通常会使用浏览器钱包(如 MetaMask 或 Rabby)来创建其钱包。这些钱包生成外部拥有账户(EOA),允许用户签署交易和管理资金。
在 Solana 上,你可以通过浏览器扩展(例如 Phantom、Solflare)或通过命令行(Solana CLI)创建钱包。
如果你希望用于开发目的的钱包,可以使用 CLI 生成密钥对:
solana-keygen new --outfile ~/.config/solana/id.json
这将创建一个密钥对 JSON 文件(id.json
),其中包含你的私钥(数组形式)。此外,你将有一个助记词,可用于恢复你的密钥对。
保护你的密钥对
保持 id.json
文件的安全和私密。绝不要分享其内容或你的助记词,因为它们给予完全访问钱包和资金的权限。
如果你在浏览器扩展中有一个钱包(即 Phantom),但希望在 CLI 中使用它,则需要从扩展中导出其私钥。
我们将涵盖如何将 Phantom 钱包导出到 Solana CLI 以及反向操作。
solana-keygen recover 'prompt://?key=0/0' -o my-wallet.json
id.json
文件。[12, 34, 56, ...]
)。这将把你在 CLI 生成的钱包恢复到 Phantom 中。
开发者通过 RPC 端点与 Solana 网络交互。你可以配置与哪个网络交互(主网络、测试网或开发网)。
QuickNode RPC
为更快的发展,QuickNode 提供 Solana 的 RPC 端点。你可以使用这些 RPC 与 Solana 网络交互,而无需设置自己的节点或使用公共 RPC。 要获取 RPC 端点,请在 这里 注册一个免费帐户。
检查你的当前配置:
solana config get
设置你的 RPC 端点(例如,devnet):
solana config set --url devnet
验证你的钱包地址:
solana address
空投测试 SOL 以供开发:
solana airdrop 2
solana balance
这将为你提供 2 SOL 以便在开发网进行测试。此外,你还可以使用 QuickNode Faucet 获取测试 SOL。
有关更多信息,请查看 在 Solana 上空投测试 SOL 的完整指南。
尽管以太坊和 Solana 在其技术设计上存在显著差异,但 QuickNode 提供了一个强大、统一的基础设施,方便开发者在这些生态系统之间桥接。以下是 QuickNode 如何支持以太坊(及其他 EVM 兼容链)和 Solana 之间无缝切换的技术概述,以及提升开发体验的关键特色。
链特定优化:
QuickNode 提供针对每个区块链独特要求的专门产品和工具,包括 核心 RPC API、实时数据流、无服务器功能和附加服务。
QuickNode 的基础设施旨在满足任务关键应用的需求,确保安全性、正常运行时间和对开发者的支持。- SOC合规性:遵循SOC 1和SOC 2 Type 2标准,确保安全可靠的操作。
凭借其强大的基础设施和以开发者为中心的工具,QuickNode简化了在Ethereum和Solana上构建的复杂性。
为了帮助你实际操作Solana,以下是一些涵盖基础知识的基础指南:
从Ethereum(EVM)过渡到Solana(SVM)需要思维方式的转变,尤其是在程序架构、执行模型和账户管理方面。Solana将执行(程序)与存储(账户)分开,而不是智能合约存储自己的状态,这导致了更高的效率和更好的可扩展性。
虽然Solana开发与Ethereum不同,但许多概念可以映射,以便更轻松地进行过渡。通过理解关键差异并利用现有知识,你可以探索Solana的生态系统,构建高效的去中心化应用程序,并为网络的增长做出贡献。
想要看到更多类似内容吗?在下方留下你的反馈!
告知我们 你的反馈或新主题请求。我们非常乐意听取你的意见。
订阅我们的时事通讯,获取更多关于Web3和区块链的文章和指南。如果你有任何问题或需要进一步的帮助,请随时加入我们的Discord服务器或使用下面的表格提供反馈。关注我们在Twitter(@QuickNode)和我们的Telegram公告频道以了解最新动态。
对于那些希望深入了解Solana开发的人,以下是一些有用的资源:
- 原文链接: quicknode.com/guides/sol...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!