Solana和Ethereum对比
Solana 的重要概念:共识机制、账户模型、程序、交易、指令等等
一、共识机制
Solana 的创新共识机制
Proof of History (PoH)
PoH 是 Solana 区块链的核心创新之一,它为区块链提供了一个去中心化的时间源。PoH 本质上是一个高频可验证延迟函数 (VDF),它能够创建历史记录,证明某个事件发生在特定时刻之前或之后。
PoH 是一种创新的时间记录机制,通过加密散列函数生成一个可验证的时间顺序,使得区块链中的事件可以按时间线性顺序排列。这减少了节点之间的时间同步需求,使得节点能够迅速达成共识,而无需等待整个网络确认。
PoH 工作流程:
- 使用哈希函数将事件序列化,每个哈希值都依赖于前一个哈希值
- 通过计数器记录哈希计算的次数,可以推断出时间的流逝
- 当需要记录事件时,将事件数据插入到 PoH 序列中,后续所有哈希值都会因此变化
- 这种机制确保了事件的顺序性和时间戳的可验证性
Proof of Stake (PoS)
验证者需要抵押一定数量的 SOL 代币,持有更多代币的验证者有更高的概率被选中生成区块。PoS 提供了经济激励,确保验证者行为诚实。
PoH 与 PoS 的结合 :PoH 确保区块的时间戳和顺序,PoS 则确保网络的安全性和抗攻击性,两者结合使得网络能够达到每秒数千笔交易处理速度。 虽然权益证明(PoS) 确保网络中达成共识,但 Solana 将历史证明 (PoH) 纳入其 PoS 共识机制中,从而实现连续区块生产的同步。
以太坊从 PoW 到 PoS 的转变
以太坊 2.0 的升级(The Merge)将共识机制从能源密集的 PoW 转为 PoS,大幅降低了能耗。验证者通过锁定 ETH 参与共识,取代了矿工的角色,提升了网络的安全性和可持续性。
Solana 与以太坊共识机制的比较
在非分区状态下,Solana 网络中始终都只有一个领导者。每个验证器节点和领导者拥有相同的硬件能力,且验证器可以被选举为领导者,这种选举是基于 PoS 的。这种网络设计,在出块速度上相比于以太坊将会有大幅度提升,但是,在去中心化程度上,却不如以太坊。
二、交易处理能力
Solana 的并行处理
通过将交易分解为多个子集,利用不同的验证节点并行处理,提高了吞吐量。Solana 的架构支持高达每秒数千笔交易,平均出块时间为 400 毫秒,平均每秒 2000+ 笔交易,在高负载时保持较低的交易费用。
低延迟和低费用
Solana 的架构设计使其能够快速确认交易,通常在一秒以内完成。即使在高负载下,交易费用仍保持低廉,适合需要高频交易的应用。
海湾流(Gulf Stream)和海平面(Sealevel)技术
Solana 在技术底层架构上,不得不提到的两个技术层面一个就是海湾流(Gulf Stream) 以及海平面(Sealvel),这两个技术相辅相成,是支撑 Solana 成为新的世界级公链的两大支柱。
- 海湾流 (Gulf Stream):无内存交易转发协议,解决了传统区块链内存池(MemPool)造成的网络瓶颈问题
- 海平面 (Sealevel):允许智能合约并行运行的技术,大幅提高了交易处理效率
以太坊的串行执行
以太坊的智能合约在虚拟机(EVM)中按顺序执行,每笔交易必须等待前一笔完成才能开始。虽然这种方式确保了状态的一致性,但也限制了以太坊吞吐量长期维持在每秒 15 笔~30 笔,以牺牲性能换来安全性和一致性。
Layer 2 和 Rollup
Layer 2 解决方案通过将大量交易在链下处理,然后将结果提交到主链,显著提高了交易速度和降低了成本。Rollup 是其中一种常见的技术,能够将数百笔交易合并为一个批次,能够将燃料费减少多达 100 倍。
三、交易费用(Gas 费)
Solana 的交易费用机制
Solana 的交易费用是根据交易的复杂度和大小动态计算的,这意味着,交易费用会根据交易的执行成本而变化,而不是根据网络上的交易量变化。
Solana 的平均交易费用通常低于 0.01 美元,平均为 0.00025 美元,这使得进行小额交易更具成本效益。
基础手续费结构
基础手续费目前设定为每个签名 0.000005 SOL(5,000 lamports),构成了交易成本的基础。这是由一个地址支付的费用,以便获得使用网络资源的权利。这是一个一次性的总费用,无论实际使用多少资源来执行交易(或者交易是否执行),都需要预先支付给网络。
计算单元
Solana 交易会预先请求指定数量的计算单元(CUs),如果超出这个数量,交易将失败。这意味着开发者目前几乎没有任何财务激励来最小化计算单元的请求。
以太坊的交易费用
以太坊的交易费用因网络拥堵而波动,这是一种纯粹的市场机制,网络中交易拥堵情况下你的交易要想被确认,就需要支付高昂的手续费。目前一笔转账交易的手续费大概在 1 ~ 10 美元左右。
四、智能合约
Solana 的程序模型
Solana 中一切皆账户,它的智能合约(Solana 中称之为程序 program)也是账户,但细分为可执行账户和数据账户,前者存储程序的代码,用来执行特定的逻辑,后者存储状态,即程序运行时的数据。
在 Solana 生态系统中,"智能合约" 被称为程序。每个程序都是一个链上账户,存储可执行逻辑,组织成特定的函数,称为指令 (instructions)。
程序的特点
- 程序是包含可执行代码的链上账户
- 代码组织成不同函数,称为指令
- 程序可以由升级权限更新。当升级权限设置为 null 时,程序变为不可变
- 可验证的构建使用户能够验证链上程序是否与公开的源代码相匹配
程序开发方法
Solana 程序主要用 Rust 编程语言编写,开发有两种常见方法:
- Anchor:专为 Solana 程序开发设计的框架。它提供了一种更快、更简单的编写程序的方式,使用 Rust 宏来显著减少样板代码。对于初学者,建议从 Anchor 框架开始。
- 原生 Solana 程序库 :直接使用 Solana 程序的标准库 solana_program 进行开发
这种分离的模式,使得程序的升级更加简单,因为程序本身无状态,可以直接升级为新的代码逻辑。
以太坊的智能合约
以太坊的智能合约本身就包含了合约的逻辑代码,以及状态数据。因此合约部署之后,就不支持直接的升级,只能通过代理的方式间接升级,即重新部署一套合约代码,生成新的合约地址,代理再指向这个新的合约地址。
五、账户
Solana 的账户模型
Solana 中一切皆账户,它的账户就像一个容器(或者电脑中的文件夹),可以包含程序代码、状态数据以及账户元数据。
账户类型
按照功能可划分为可执行账户和数据账户:
- 可执行账户 :存储程序代码的账户,也称为程序账户
- 数据账户 :包括普通用户账户和其他非程序账户,这些账户存储了用户的余额、交易历史和其他相关数据,但它们本身不包含程序代码
账户结构
每个账户都有一个地址(一般情况下是一个公钥)以及一个所有者(程序账户的地址)。账户存储的完整字段包括:
- 地址(公钥)
- 所有者(程序账户的地址)
- 余额
- 数据(可以是程序代码或状态数据)
- 是否可执行
- 租金状态
PDA 账户
PDA(Program Derived Address)账户,也就是程序的派生账户,是 Solana 中一种特殊的账户类型,允许程序在没有私钥的情况下控制账户。
对于熟悉以太坊账户的同学来说,这种划分方式也许有点奇怪,不过随着了解的深入,就会认识到 Solana 的单一账户模型,使得多个交易能够并行处理,这正是 Solana 高性能的基础。
以太坊的账户模型
以太坊分为 EOA 账户和智能合约,前者是普通用户在以太坊网络中的账户,用于存储以太币(ETH)和进行交易。后者是包含智能合约代码和状态的账户,这些账户由合约创建并部署在以太坊区块链上。通过这两种账户类型的结合,以太坊提供了一个灵活且功能强大的去中心化应用开发平台。
六、交易与指令
交易结构
在 Solana 中,交易是由一组指令组成的,每个指令包含以下内容:
- program_id:程序是基于账户来运行的,被标记为 "可执行的账户" 会分配给 BPF Loader。此帐户的地址称为 'program_id',该地址将用于在所有的未来交易中引用程序
- accounts:存放着读取和写入的账户地址数组
- instruction_data:与关联的程序定义并解析
指令(Instructions)
指令(Instructions)是 Solana 中最基本的操作单元。在 Solana 程序中,指令处理函数通常返回 ProgramResult 类型,它是 solana_program 中的一个结构体,代表着 Solana 程序中指令处理函数的返回值。该类型代表 Transaction 交易中指令的处理结果,成功时为单元类型 (),即返回值为空,失败时返回值为 ProgramError。
交易执行流程
- 创建交易:组装一组指令,指定需要操作的账户和程序
- 签名交易:使用私钥对交易进行签名
- 提交交易:将签名后的交易发送到网络
- 验证与执行:验证者节点验证交易签名并执行指令
- 确认交易:交易被打包进区块并获得确认
七、租金机制
Solana 的租金
Solana 的租金(也称为交易费用或 gas 费用)是根据执行智能合约或进行其他操作所需的计算和存储资源的量来计算的。
租金计算因素
通常来说,Solana 的租金由以下几个因素决定:
- 程序执行的复杂性:如果智能合约需要更多的计算资源来执行,那么相应的租金将更高
- 账户大小:账户占用的存储空间越大,需要支付的租金越高
- 租金豁免:如果账户余额超过两年租金的最低余额,则可以免交租金
租金收取周期
Solana 链上程序的部署是按其账户大小进行定期收费的,目前的费用是 2 天一收,1K 大小约 0.01 SOL。如果账户无法支付租金,系统将清除该账号。为了防止账户被删除,用户必须支付租金,也就是存储费。如果用户钱包中持有相当于两年租金的最低余额,那么这个账户可以免交租金。
八、Solana 的优势与挑战
优势
- 高吞吐量 :Solana 的架构支持高达每秒数千笔交易,远超大多数区块链
- 低交易费用 :即使在高负载下,交易费用仍保持低廉,适合需要高频交易的应用
- 创新的共识机制 :PoH 与 PoS 的结合提供了高效的时间同步和网络安全
- 程序升级灵活性 :程序与数据分离的设计使得升级更加简单
挑战
- 网络稳定性 :Solana 曾经历多次网络宕机,2021 年 9 月 14 日,Solana 的网络崩溃,脱机 17 小时
- 去中心化程度 :为了追求高性能,Solana 在去中心化程度上不如以太坊
- 生态系统规模 :相比以太坊,Solana 的 DApp 生态系统仍在发展中,根据数据,在 Solana 上构建了 350 多个 DAPP,相比之下,以太坊上有近 3000 个 DAPP
总结
Solana 通过创新的技术架构和设计理念,为区块链世界带来了高性能、低成本的解决方案。它的 PoH 共识机制、账户模型、程序设计和交易处理方式都与传统区块链有着显著差异,这些差异使得 Solana 能够实现每秒数千笔交易的处理能力,同时保持较低的交易费用。
虽然 Solana 在去中心化程度和网络稳定性方面仍面临挑战,但其技术创新和性能优势使其成为区块链开发者的重要选择,特别是对于需要高吞吐量和低延迟的应用场景。随着技术的不断完善和生态系统的发展,Solana 有望在区块链领域发挥更加重要的作用。
正如 Solana 的账户模型所体现的那样,Solana 的账户模型不仅仅是一种存储机制,更是一种控制执行、构建权限边界、提升性能的系统设计哲学。这种设计哲学贯穿了 Solana 的整个技术架构,使其成为一个独特而强大的区块链平台。
参考文章:
Solana 基础概念