Vyper、Solidity 和 Scrypto:智能合约语言的比较

了解区块链网络的三种不同编程语言以及它们的比较。

以太坊网络将智能合约带入区块链领域,提出了诸如 分散式金融(DeFi) 可能。 

一旦满足某些条件,智能合约可以自动执行流程。 随着这项新技术的出现,一种名为 Solidity 的新编码语言也被开发出来。

随着区块链行业的不断发展和新的区块链网络的出现,更多的编程语言正在被引入该领域,特别是 Vyper 和 Scrypto。

编程语言 是一组将文本和数字字符串转换为机器可读代码的规则。 简而言之,编程语言使计算机能够理解人类输入的指令。 在区块链行业中,Solidity、Python 和 Javascript 是最常用的一些语言,但它们的工作原理各不相同。

什么是坚固性?

Solidity 是一种面向对象的高级编程语言,用于在以太坊区块链和 BNB 智能链和 Avalanche 等其他区块链网络上构建智能合约。 该语言于 2014 年开发,与 JavaScript、C++ 和 Python 等编程语言有相似之处。

由于 Solidity 是一种高级语言,因此计算机代码以易于理解和人类可读的方式输入,而不是 XNUMX 和 XNUMX。 例如,Solidity 代码将包含“函数”和“合约”等单词和短语,以及大括号和数字。

作为一种面向对象的编码语言,意味着 Solidity 围绕使用“对象”而展开,“对象”是可以重用以创建类似代码片段的代码片段,而无需每次都重新编写原始代码。

Solidity 还使用编译器将人类可读的高级代码转换为在以太坊虚拟机 (EVM) 上执行的机器可读代码。

什么是 Vyper?

Vyper 是一种面向合约的 Python 编程语言,用于设计与 EVM 一起使用的智能合约。 该语言旨在通过提高代码的安全性和可读性来改进 Solidity。 Vyper 非常注重其代码的可听性。 因此,其原则之一是人类应该能够阅读尽可能多的 Vyper 代码。 

Vyper 还旨在让任何人尽可能难以编写误导性代码。 对于读者(即审计员)来说简单性比对于编写者(即开发人员)来说简单性更重要。 这样,就可以更轻松地识别智能合约或去中心化应用程序(DApp)中的恶意代码。

什么是加密货币?

Scrypto 是一种面向资产的智能合约语言。 该语言由 Radix 开发,基于 Rust,保留了 Rust 的大部分功能,同时添加了 Radix Engine v2 的特定功能和语法。 由于 Scrypto 是面向资产的,因此它可以与代币等资产进行交互,代币是该语言中的一种资源。 

在 Solidity 等编码语言中,ERC-20 代币作为 EVM 上的智能合约存在。 Scrypto 中的资产是存在于容器和保管库中的资源。 简单来说,这就像有一个桶(容器)并装满硬币(资产),然后可以将其存储在存钱罐(金库)中。

最近: 随着行业的成熟,对加密领域人才的需求减少对市场的依赖

Scrypto 还注重对开发人员友好,允许他们在与容器和资源交互时仅编写必要的代码,以在 DApp 中启用功能。 安全性是另一个原则,开发人员能够向 DApp 发出具体指令,而不是授予一揽子权限。

智能合约语言如何比较

Solidity 由于在以太坊等主要区块链网络中的使用,拥有广泛的在线学习资源和大量社区支持。 Solidity 还具有来自面向对象编程 (OOP) 的广泛功能,使其模块化,并且在出现问题时更容易排除故障。 例如,如果某个类的某个对象出现故障,则可以追溯到该类的起源。 

这是可行的,因为 Solidity 使用封装,这意味着每个对象都是独立的,每个函数都独立工作。 编码语言的模块化还允许开发人员同时处理多个对象,从而更有效地构建、修复和部署智能合约。

Vyper 是一种比 Solidity 更简单的编码语言,强调语言结构的透明度、简单性和可听性。 Vyper 的功能也比 Solidity 少,这是出于安全原因故意这样做的。 有限的功能集减少了恶意行为者可以利用的漏洞数量。

例如,Solidity 使用修饰符来指示在执行进程之前和之后已执行检查。 然而,Vyper 不使用修饰符,因为开发人员认为这样更容易编写误导性代码。 它还鼓励个人开发在整个文件中跳动的代码,从而降低可听性。 由于 Vyper 中不存在修饰符,因此不可能向代码添加任何状态更改。

Vyper 排除的另一个功能是继承。 在 Solidity 中,多个合约可以继承父合约的功能。 如果存在分歧,也需要个人理解优先规则。 Vyper 不使用类继承,因为它消除了代码中潜在的复杂性来源,这有助于提高可听性。 总的来说,Vyper 是一种更加简约的编码语言,它牺牲了一些功能来提高安全性并更好地检查其代码库,以更好地保护基于 Vyper 的智能合约的用户。

虽然 Solidity 可能是区块链领域最流行和最知名的编程语言之一,但某些语言对于开发人员来说具有更容易的学习曲线。 此外,更简单的编程语言更容易吸引新的开发人员进入该行业。

Radix 背后的开发商 RDX Works 的首席战略官 Adam Simmons 告诉 Cointelegraph,“拥有适合工作的合适工具会带来很大的不同 - 而现在,区块链开发人员没有合适的工具。 这不仅仅是为了让语言变得更简单,而是为了让开发者工具变得直观和安全,”继续说道:

“在巅峰时期,DeFi 在短短两年内就增长到了超过 200 亿美元的 TVL——很明显,需求水平非常高。 然而,尽管资本增长了 200 倍,但开发人员数量仅增加了 2 倍,总数约为 19,000 名(全球开发人员数量约为 30 万)。”

尽管去中心化金融领域出现了高水平的增长,但开发商数量的增长却未能满足需求。 Simmons 认为,开发人员可能发现 Solidity 太难让他们转向区块链开发:

“由于 Solidity 的学习曲线陡峭且安全风险较高,开发人员对于是否全职投入 Web3 犹豫不决。 尽管开发人员才华横溢,并且在安全审计上花费了数百万美元,但 DeFi 仍然因黑客和漏洞而损失惨重。 仅此一点就足以阻止开发商进入该领域。”

“拥有正确的语言和工具将使开发人员能够更快地发展整个行业。 正如游戏引擎在 90 年代为开发者提供了彻底改变视频游戏制作的工具一样,正确的 Web3 语言和工具将使开发者能够加速 Web3 的发展。”Simmons 补充道。

Scrypto 还注重安全性、简单性和用户友好性。 Scrypto 交易专注于资产。 它们定义用户希望如何分配系统资源。 它们还可以指示用户或多组件事务中的另一个组件应如何处理返回的资源。

以太坊上的交易通常是对智能合约的调用(因为以太坊上的 DApp 和代币都是智能合约)。 相比之下,Scrypto 上的交易涉及将资产从一个组件转移到另一个组件。

例如,如果用户 A 想要向用户 B 发送 10 个自定义代币,他们的交易将显示他们正在尝试从包含这些代币的金库中提取 10 个代币。 该交易还将显示他们会将这些代币发送到用户 B 帐户组件的存款方式。 由于资源(在本例中为代币)需要位于某处,因此将使用存储桶(容器)将代币从用户 A 转移到用户 B。

在上面的示例中,用户将包含资源(代币)的存储桶转移到第二个用户的存款方法,而不是调用代币智能合约。 与 DApp 交互的工作原理类似,用户从其帐户中提取代币并将其传递给他们希望交互的相关组件。 综上所述,Scrypto 采用基于资产的方法,由用户存储和传递实际资产。 基于资产的方法还使开发人员更容易编写 DApp,因为更容易与代币(资源)、代币池(金库)和用户(组件)进行交互。

再比如,如果一个交换DApp(如Uniswap)是用Scrypto编写的,那么开发者只需要编写交换的交易方法即可。 首先,DEX 需要识别用户接收的 Token A 容器,然后计算汇率。 接下来,传入的代币将被存入,DEX 会将正确数量的代币 B 发送回用户。

区块链开发者应该选择哪种编程语言?

开发人员可以使用传统的编程语言(C++、Python、JavaScript)进行区块链开发,也可以使用专门构建的解决方案,例如 Solidity、Vyper 和 Scrypto。 多种编程语言对区块链领域是有益的,因为它为开发人员提供了一系列可供使用的工具。 

例如,熟悉 C++、JavaScript 和 Python 的开发人员可能会发现 Solidity 很有吸引力。 熟悉 Python 的开发人员可能会倾向于 Vyper,而熟悉 Rust 的开发人员可能会选择使用 Scrypto 语言。

最近: 从粉丝群到激励,社交代币将成为 Web3 的引擎

Simmons 对此表示同意,他告诉 Cointelegraph,“随着越来越多的语言进入 Web3,我们可能会看到一段时间内出现相当多的竞争方法。 随着这些语言找到适合开发人员的产品市场,最重要的是使这些开发人员能够构建强大、有用且安全的 DApp,我们可能会看到行业倾向于那些能够提供最佳结果的语言。”

Solidity 自然会成为想要在以太坊和类似区块链网络上工作的开发人员的选择。 同时,Vyper 和 Scrypto 可以吸引喜欢简单性和额外安全性的开发人员。 由于 Scrypto 更加简单且以资产为导向的方法,因此也可能更适合开发人员。

资料来源:https://cointelegraph.com/news/vyper-solidity-and-scrypto-how-the-smart-contract-languages-compare