Solana程式设计模型和以太坊有什么区别?

xiaoan 943次浏览

摘要: Solana 是一个旨在支援dApps 的高效能区块链平台,以其速度和可扩展套件性闻名,而这是通过独特的共识机制和架构设计实现的。本文将以太坊作为比较对象,简要介绍Solana 智能合约程式设计模型的特点。 1.智能……

Solana 是一个旨在支援dApps 的高效能区块链平台,以其速度和可扩展套件性闻名,而这是通过独特的共识机制和架构设计实现的。本文将以太坊作为比较对象,简要介绍Solana 智能合约程式设计模型的特点。

1.智能合约、链上程式

执行在以太坊上的程式被称为智能合约,它是位于以太坊上一个特定地址的一系列程式码(函式)和资料(状态)。智能合约也是一个以太坊帐户,称之为合约帐户,它们有余额,可成为交易物件, 但是无法被人操控,被部署在网路上作为程式执行。

而执行在Solana 上的可执行程式码被称为链上程式(On-chain Program),它们能解释每笔交易中传送的指令。这些程式可以直接部署到网路核心作为原生程式,或由任何人释出为SPL 程式。

指令(Instructions):指令是Solana 链上程式的特有名词。链上程式由指令组成,是执行特定操作的最小单位:每笔Solana 交易中都包含一个或多个指令。

指令指定了要执行的操作,包括呼叫特定链上程式、传递帐户、输入列表以及提供位元组阵列。指令有计算限制,因此链上程式应该被优化为使用少量计算单元,或将昂贵的操作分成多个指令。

原生程式:提供验证节点所需功能的原生程式。其中最著名的是System Program,它负责管理建立新帐户以及在两个帐户之间转帐SOL。

SPL 程式:定义了一系列链上活动,包括代币的建立、交换、借贷,以及建立质押池、维护链上域名解析服务等。其中,SPL Token Program 用于代币操作,而Associated Token Account Program 等则常用于编写其他订制程式。

你叫智能合约,我叫链上程式,大家说法不一样,但都是指执行在区块链上的程式码。张三李四王麻子都是人名,到底素质如何还得考察其他方面。

2.帐户模型、资料解耦

与以太坊类似,Solana 也是基于帐户模型的区块链,但Solana 提供了一套不同于以太坊的帐户模型,用不同的方式储存资料。

在Solana 中,帐户可以储存钱包资讯和其他资料,帐户定义的栏位包括Lamports(帐户余额)、Owner(帐户所有者)、Executable(是否为可执行帐户)和Data(帐户储存的资料)。

每个帐户都指定一个程式作为其所有者,以区分帐户用作哪个程式的状态储存。这些链上程式是只读或无状态的:程式帐户(可执行帐户)只储存BPF 位元组码,不储存任何状态,程式会把状态储存在其他独立帐户(不可执行帐户)中,即Solana的程式设计模型将程式码和资料解耦。

而以太坊帐户主要是EVM 状态的引用,其智能合约既存在程式码逻辑,又需要储存使用者的资料。这通常被认为是EVM 历史遗留的设计缺陷。

不要小看这一区别! Solana 智能合约在根本上比具有耦合程式设计模型的区块链(如以太坊)更难攻击:

在以太坊中,智能合约「拥有者」是一个全域性变数,与智能合约一一对应。因此,呼叫某个函式可能直接改变合约「拥有者」。

而在Solana 中,智能合约的「拥有者」是与帐户关联的资料,而不是全域性变数。一个帐户可以有多个拥有者,而不是一对一关联。攻击者要利用智能合约的安全漏洞,不仅需要找到有问题的函式,还需要准备「正确」的帐户来呼叫该函式。

这一步骤并不容易,因为Solana 智能合约通常涉及多个输入帐户,并通过约束条件(例如account1.owner==account2.key )来管理它们之间的关系。从「准备正确的帐户」到「发动攻击」的过程,足够让安全监控人员可以在攻击之前主动检测到建立与智能合约相关的「虚假」帐户的可疑交易。

以太坊的智能合约就像是一个使用唯一密码的保险库,你只要得到了这个密码,就能获得完整的所有权;而Solana 的则是一个有很多个密码的保险库,但想要获取许可权,你不但要想办法搞到密码,还要弄清楚这个密码对应的编号,才能把锁开启。

3.程式语言
Rust 是Solana 上开发智能合约的主要程式语言。因为它的效能和安全特性,使其适用于区块链和智能合约的高风险环境。 Solana 同时也支援C、C++ 和其他语言(很不常见)。官方提供了Rust 和C 的SDK 来支援开发链上程式。开发者可以使用工具将程式编译成Berkley Packet Filter (BPF) 位元组码(档案以.so 为副档名),再部署到Solana 链上,通过Sealevel 并行智能合约执行时来执行智能合约的逻辑。

由于Rust 语言本身上手难度高,且并不是为区块链开发订制,导致很多需求需要重复造轮子、程式码冗余。 (生产中许多专案采用Backpack 联创Armani 创造的Anchor 框架简化开发)许多新创造的专用于区块链开发的程式语言是基于Rust 的,如Cairo(Starknet)、Move(Sui、Aptos)。

而以太坊智能合约主要用Solidity 语言开发(语法和javascript 类似,程式码档案以.sol 为副档名)。由于语法相对简单以及开发工具更加成熟(Hardhat 框架、Remix IDE …)通常我们认为以太坊的开发体验更简单爽快,而Solana 开发的上手难度高。所以尽管现在Solana 的热度很高,事实上以太坊的开发者数目仍然是远多于Solana 的。

特定路况下,顶级赛车没有改装车跑得快。 Rust 就像顶级赛车,有力地保证了Solana 的效能和安全性,但非为链上程式开发这条赛道而生,反而造成了驾驶(开发)难度的上升。采用基于Rust 、为链上开发订制语言的公链则相当于改装了这辆赛车,使其更适应路况。 Solana 在这点上处于劣势。

总结
Solana 的智能合约程式设计模型是创新的。它提供了一种无状态的智能合约开发方法,将Rust 作为主要程式语言,以及让逻辑与状态分离的架构,为开发人员构建和部署智能合约提供了强大环境,确保安全性和效能,但开发难度较大。

Solana 专注于高吞吐量、低成本和可扩展套件性,仍是寻求建立高效能dApps 的开发人员目前的理想选择。

随机内容