什么是Solidity?

中级Nov 23, 2023
探索以太坊智能合约语言 Solidity 的本质及其对区块链创新的影响。
什么是Solidity?

任何开启探索区块链冒险之旅的人都需要了解为去中心化应用程序和智能合约世界提供动力的主要编程语言之一——Solidity,这是基本要求。

Solidity不仅仅是一种编码语言,而且是在以太坊区块链和各种其他平台上创建自动执行合约和去中心化应用程序背后的驱动力。本文将深入探讨 Solidity 的工作原理、其意义、功能和实际应用。

关于Solidity

Solidity 是一种高级的基于对象的编程语言,用于在区块链上编写和运行智能合约。Solidity 因其与 DeFi 的基地以太坊有联系而闻名,它由以太坊开发人员创建,用于创建与网络上的以太坊虚拟机一起运行的智能合约。

在 web3 开发人员领域,尽管Solidity具有来自其他通用语言(如 Javascript、C++ 和 Python)的元素,但它是使用多的编程语言之一。Solidity 是一种统计类型语言,支持继承、复杂的用户定义类型和库以及智能合约功能所必需的元素。Solidity 是智能合约开发人员的热门选项,这是因为它易于使用。编程语言(高级)的本质是其使用字母和数字组合来代替输入位码(一和零)。

Solidity编程语言的背景

尽管 Solidity 目前被誉为智能合约领域使用最广泛的编程语言之一,但它的历史可追溯到2014年。当时,Gavin WoodsChristian Reitwissner 和以太坊基金会的其他开发人员创建了Solidity,以为将推出的以太坊网络的开发提供支持。开发人员创建了 Solidity 作为一种语言,并发现这种语言易于使用、富有表现力,并且与以太坊虚拟机兼容,以太坊虚拟机是运行智能合约的核心运行时环境。

Solidity 的创作灵感来自于 Python、C++ 和 JavaScript 等现有语言。尽管如此,它的原创性仍基于专门为处理智能合约、状态变量、修饰符和事件而嵌入的独特概念和语法。

Solidity如何运作?

Solidity 主要用于编写智能合约。智能合约是以太坊网络的支柱,它是在以太坊虚拟机(EVM)上运行并具有多种功能的程序,主要负责将网络上交易的自动化。EVM 是以太坊“全球计算机”的记录保存者,这意味着 EVM 负责维护网络的全局状态,包括地址、账户余额和代币持有量。

Solidity合约被编译成字节码并由EVM读取,这意味着理论上开发者可直接用字节码编写以太坊智能合约。然而,他们几乎不直接用字节码编写,因为这样做的技术性更强,而且容易出错。因此,使用像 Solidity 这样的高级语言可让开发人员专注于代码的逻辑和功能,而不受处理字节码编写所具有的复杂性的干扰。因此,开发人员能更有效地编码,并更加专注于创建更易于理解、编写和维护的智能合约。

Solidity 会定期更新版本,并在 Github 上发布。智能合约是不可变的,这意味着一旦它被部署到链上,就无法逆转。由于 Solidity 本身在不断迭代,智能合约的不变性会对其产生影响,这是因为合约代码中的任何错误或漏洞一旦激活就无法被轻易修复。而这是由于每个版本都有不同的行为和特征,这可能会影响合约的功能以及它与以太坊生态系统中其他元素的交互方式。

近年来,开发人员更喜欢使用代理(Proxy)合约和可升级合约。代理合约可执行另一个合约的代码。其中代理充当中介,将调用和交易转发到预期的合约,同时支持附加功能,例如访问控制或日志记录。本质上,可升级合约是指能在不丢失原始状态的情况下升级的智能合约。

必须指出的是,创建智能合约时使用的 Solidity 版本也很重要,因为版本能决定智能合约的行为和功能。每个 Solidity 智能合约上的每一行源代码,无论它们多么简单,都必须以声明该特定代码段应使用哪个版本的 Solidity 编译器为开头。该声明就是所谓的“版本编译指示”。

Solidity语言的主要功能

Solidity 被认为是通往去中心化应用程序和基于区块链的智能合约世界的门户。Solidity是一种高效的编程语言,它包括以下的一些重要功能。

内置函数和数据类型

开发人员无需要编写条件语句或一套重复的指令来根据某些条件执行操作。相反,他们能直接在源代码中指定条件,并且智能合约仅在满足这些条件时才会执行特定操作。这使得编码过程更加易于管理。

Solidity 还支持最常见的数据类型,如整数、浮点数、字符串、数组和映射。开发人员还可定义自己的数据类型并在智能合约中使用它们。

编码环境

Solidity 的编译器会在您编写代码时持续检查代码是否有错误,并就任何可能的问题向您发出通知。这在开发大型且复杂的 dApp 和智能合约时特别有用。

Solidity 编程语言的用例

Solidity 通常可用于创建智能合约,以增强供应链管理的透明度和可追溯性。Solidity 驱动的智能合约还能记录交易并验证产品的真实性,以此来帮助防止伪造并提高供应链流程的可信度。

人们经常使用 Solidity 语言开发基于区块链的游戏和虚拟世界,这些游戏和虚拟世界具有资产所有权、游戏经济和可证明的稀缺性。Solidity 为独特的数字资产和玩家交互开辟了新的可能性。开发人员还使用 Solidity 创建去中心化交易逻辑、拍卖机制、借贷协议、有条件支付机制等。

此外,Solidity 还用于实施 NFT。它还推动 DAO 的创建,DAO 是基于智能合约运行的自治组织,从而实现透明的决策和治理。

支持使用 Solidity 的项目

Avalanche

Avalanche 是一个尖端的区块链平台,在 DeFi 和智能合约领域有一定的知名度。在 Avalanche 上,交易可在几秒钟内处理完毕,因此它是 DeFi 应用和代币交换的高效平台。其 EVM 兼容性使其能够与 Solidity 编写的智能合约无缝协作,这也有助于 Avalanche 被开发人员采用。

Monax

Monax 是一个领先的区块链项目,致力于彻底改变、精简和优化企业处理法律协议的方式。该平台可创建具有法律约束力的协议,并使将合约执行和管理的各个方面自动化。这对企业尤其有利,因为 Monax 为他们提供了一种安全有效的方式,可用于管理整个合约生命周期。

Solidity 能协助创建自动执行的智能合约,而 Monax 将这项技术扩展到法律协议,允许企业以可编程和自动执行的格式定义其合约规则。

Solidity 与 Rust 的比较

Solidity 和 Rust 有一些基本的相似之处。其一,两种编程语言都提供多链兼容性。虽然 Solidity 主要是为以太坊设计的,但它支持第2层区块链、侧链,当然还有与 EVM 兼容的第1层区块链,例如 Moonbeam 和 Avalanche-C 链。Rust 还支持 Near 和 Solana 等区块链术语表,同时仍是提供创建 Move 和 Sui 语言的灵感的编程语言。

此外,这两种语言都是图灵完备的语言。这意味着,者两种语言都能解决任何计算问题,无论其复杂程度如何。编程语言继承了艾伦·图灵(Alan Turing)开发的图灵机的这一功能。

相反,Solidity 和 Rust 有着明显的差异。例如,Solidity 是一种高级语言,提供计算机系统架构的高级抽象。因此,Solidity 更容易学习和使用,这使其成为一种更加面向用户的语言。相反,Rust 是一种更接近计算机硬件的低级语言,可提供良好的内存效率和速度,这使其成为一种更面向机器的语言。

不仅如此,这两种编程语言都使用不同的编程范式。编程范式是解决问题时使用的方法。Solidity 是一种面向对象的语言,因为它使用基于对象的范式来解决问题。相反,Rust 是一种多范式语言,这意味着它支持使用不同的范式或方法来解决问题。Rust 支持的一些范式是基于对象的、函数式的、命令式的等等。

Solidity 与 JavaScript 的比较

Solidity 和 Javascript 都是两种最常见的编程语言,但相似之处却很少。Javascript 是为 Solidity 的创建提供最大灵感的编程语言之一,但现在它们唯一显著的相似之处是,Solidity 使用“function”关键字来定义函数。Solidity 的语法也具有类似 JavaScript 的外观,但这看上去不是那么回事,因为 Solidity 和 JavaScript 的操作方式完全不同。

相反,这两种语言有很大的不同。JavaScript能直接运行,而Solidity则需要编译,因为JavaScript是解释型语言,而不是像Solidity那样是编译型语言。此外,Solidity 还具有转账功能。然而,这不是内置功能,因此开发人员必须利用外部应用程序编程接口 (API)来实现这一点。

两种语言之间的另一大区别是,若使用 Solidity,在智能合约部署在以太坊上后,它就是不可变的,并且不能再编辑代码。JavaScript 也不允许与其他服务器上运行的代码直接交互,但如果服务器提供允许访问的 API,则开发人员可编辑代码。

学习Solidity的最佳资源

学习 Solidity 语言是成为 web3 开发人员的第一步,因为它是那些想要在以太坊网络上创建和部署智能合约的开发人员要掌握的基本编程语言。在选择学习 Solidity 的课程时,要评估所提供的主题、格式和其他补充资源,这一点很重要。要获得有关 Solidity 的最有知识资源,您可以考虑以下资源:

Gate Learn

Gate Learn 上线了题为《区块链开发平台和智能合约》的课程,其中概述了流行的区块链开发平台及其主要功能。虽然这是一门综合课程,但是它在使用 Solidity 开发基本区块链应用程序的过程方面提供了重要的观点。

通过本课程,您将了解如何设置开发环境、编写智能合约、定义合约的状态变量、创建与合约交互的函数、编译和部署合约等知识。

Gate Learn 还提供了题为《智能合约开发》的课程。通过本课程,您能了解智能合约的基础知识及其跨行业的用例,还可与外部合约交互并使用 MetaMask 部署您自己的智能合约

WTF学院

WTF学院是一个开源、由社区驱动的区块链学习平台,提供与 Web 和区块链开发相关的全面课程,例如 JavaScript、链上分析、EVM 操作码和 Solidity语言等。它由以太坊基金会StarkWareOptimism 赞助。它还受到了 GitcoinMirror 的资助。

WTF学院共为新手提供了五门 Solidity 课程(Solidity 101, 102, 103, Solidity 104 安全, 和 Solidity 104 Tx 分析)。这些课程都是免费的,并在完成后可获得学习证书。

The Complete Solidity Course – Blockchain – Zero to Expert [Udemy] (《Solidity综合知识课程-区块链-从小白进阶老手》Udemy)

这是一门付费 Udemy 课程,是学习 Solidity 的一站式方法。该课程将帮助您从最基本的主题开始,并将带您接触高阶知识,您可在其中构建复杂的智能合约和 dApp。这是一门综合课程,因此您无需其它任何补充资源即可获得所有必要的信息。

在本课程中,您将学习 Solidity 编程语言、如何编写智能合约,并了解 EVM、以太坊区块链以及其他区块链平台的工作原理。您还可将所学知识应用于30多项作业并解决所提供的问题。

Learn Solidity: Programming Language for Ethereum Smart Contracts [Blockchain Council] (《学习Solidity:以太坊智能合约的编程语言》[区块链委员会]

区块链委员会最近开发了学习 Solidity 课程,以帮助开发人员在几个小时内了解这一预言的基础知识。通过这个免费课程,您能对以太坊区块链上的 dApps 开发有一个清晰的了解。

通过该课程,您将获得以太坊、智能合约和其他区块链平台的基础知识。您还将学习如何安装和设置 Solidity 开发环境、构建实时应用程序以及在 Solidity 中部署智能合约。

Ethereum Blockchain Developer Bootcamp With Solidity [Udemy](《以太坊区块链Solidity开发者培训课程》[Udemy]

您无需要任何先验知识即可完成学习本课程。该课程将带您了解智能合约的理论和实践,并且您将学习如何使用以太坊的主要核心开发工具。它还提供详细的视频教程,以方便更好地理解。

本课程为付费课程,适用于那些想成为以太坊开发者的人。学完成本课程,您将能精通 Solidity、Web3、Remix、Metamask、Truffle 和其他区块链概念。

learn.articles.author Tamilore
learn.articles.translator Cedar
learn.articles.reviewer Matheus、KOWEI、Ashley He
learn.articles.copyrightNoticeOne
learn.articles.copyrightNoticeTwo
learn.articles.start.now
learn.articles.start.now.voucher
learn.articles.create.account