这篇文章介绍了Solidity作为以太坊智能合约编程语言的背景、优势和使用方法,详细阐述了其历史、与其他语言的相似性、在以太坊及其他兼容区块链上的应用,以及学习资源,提供了丰富的内容和实际案例,是学习Solidity的良好资料。
Written by Alchemy
Reviewed by Brady Werkheiser
Published on September 22, 2023 7 min read
随着 web3 行业的发展,开发者面临着更多关于 web3 编程语言 的选择。每种语言都设计了不同的优势和权衡,以用于编写智能合约。语言可能通过支持特定的区块链而有所不同,或具有速度、可读性或安全性等不同特征。
作为以太坊区块链的智能合约语言,Solidity 是一种强大的编程语言,用于创建去中心化应用(dApps),服务于区块链行业中最大的开发者生态系统。
在本文中,我们将通过 Solidity 的历史、语言影响及其使用情况来介绍 Solidity。在最后,我们将提供一些最佳开发者资源,帮助继续通过 免费 Solidity 课程 和 学习 web3 开发的资源 进行学习。
Solidity 是一种面向对象的高级编程语言,用于实现在 以太坊虚拟机 (EVM) 上运行的智能合约,它于 2014 年提出。 Solidity 的灵感来自于知名编程语言,如 C++ 和 JavaScript。作为 web3 开发者,使用 Solidity 有助于学习 web3 开发。
本节将介绍 Solidity 的历史,建立 Solidity 与其他编程语言之间的相似性,并解释 Solidity 的主要使用场景。
2014 年,以太坊的首席技术官 Gavin Wood 提出了 Solidity,作为满足以太坊对于编写智能合约的图灵完备编程语言的需求。
以太坊的创始人 Vitalik Buterin 提出了以太坊,作为扩展比特币所开创的区块链功能的协议,并增加了 智能合约 的功能。在他的愿景中,以太坊能够运行一套复杂的智能合约网络,这些智能合约是在全球计算机的分布式网络上运行的符条件执行的代码。智能合约使开发者能够创建新的加密货币、构建去中心化金融应用等。
Solidity 项目团队由 Christian Reitwiessner 领导,他们成功创建了一种图灵完备、面向对象的编程语言,用于实现智能合约。作为一种高级语言,开发者可以在不必操纵系统级信息(如内存或字节码)情况下创建智能合约,以执行计算。
图灵完备性指的是一个数据操作系统(在此例中为编程语言)模拟图灵机行为的能力。从理论上讲,Solidity 需要能够执行开发者可能需要的任何计算。
在开发过程中,Solidity 基于并受多种现有编程语言的影响,包括 C++、Python 和 JavaScript。
Solidity 在变量声明和循环方面使用与 C++ 相同的语法。此外,还支持 C++ 风格的 函数重载,当两个函数具有相同名称但在接受参数上有所不同时,这种功能是必要的。
最后,Solidity 允许隐式和显式类型转换。这意味着变量类型可以通过显式的开发者代码进行转换,或者在计算时自动转换(如果需要的话)。
Solidity 曾在很大程度上受到 JavaScript 的影响。现在,Solidity 与 JavaScript 的主要可见相似之处在于 Solidity 使用 'function' 关键字定义函数。
对于熟悉 Solidity 一些伟大影响的开发者来说,了解 Solidity 将相对直接。此外,Solidity 是静态类型的,允许使用库以及创建复杂类型。
Solidity 对 Python 的影响在语法上不太明显,然而,像 Python 一样,Solidity 使用 C3 线性化、多重继承,并保留了 'super' 关键字。
使用 Pythonic 语法,Vyper 与 Solidity 的相似性 且故意设计以增加在 EVM 兼容区块链上使用的智能合约的安全性。
由于其作为区块链编码语言的性质,Solidity 被专门创建为可在以太坊虚拟机(EVM)上编译。因此,Solidity 能够为任何 EVM 兼容区块链编写安全的以太坊兼容智能合约。
这种广泛的兼容性,加上其易于理解和灵活的功能,使 Solidity 成为行业中最广泛使用的区块链开发语言。
Solidity 开发者编写智能合约,这些是运行在 EVM 上的程序。类似其他语言中的类,智能合约可以有多个函数、内部状态和公共声明。
Solidity 合约被 编译成字节码,供 EVM 读取。编译后,Solidity 合约看上去与使用其他 EVM 智能合约语言(如 Vyper 或 Huff)编写的合约没有区别。
像任何其他开发者工具一样,Solidity 会定期进行版本更新。请注意,由于智能合约一旦部署便不可逆转,Solidity 的版本约束仅在创建时才重要。
虽然 Solidity 开发者 理论上可以直接用字节码编写以太坊智能合约,但像 Solidity 这样的高级语言让工程师能够在不进行任何底层操作的情况下更高效地编写合约。
以下是 Solidity 如何影响 EVM 状态的总结:
用 Solidity 编写智能合约
Solidity 智能合约被编译为字节码
字节码被转换为 EVM 操作码
EVM 操作码改变 EVM 的状态
EVM 是以太坊的“全球计算机”的 虚拟状态机 和记录者。简单来说,EVM 维持网络的全球状态,包括地址、账户余额和代币持有情况。
Solidity 智能合约的编写旨在对 EVM 的全球状态进行更改。EVM 的全球状态通过诸如铸造代币、发送和接收代币或释放资产等操作进行更改。
众多 EVM 操作,编码成 EVM 操作码,促使这些全球状态的更改。每个 EVM 操作码被设计用于提示 EVM 执行特定类型的状态更改,例如从一个地址向另一个地址发送代币、铸造代币,甚至销毁智能合约。
在最后一步,EVM 将智能合约的字节码转换为 EVM 操作码,从而对区块链做出必要的更改。
每个操作码都有一定的 Gas 费用,以 ETH 收取,以缓解恶意行为者通过大量请求堵塞网络的风险。交易的总 Gas 成本因此通过每单位 Gas 的价格乘以交易操作码的总 Gas 成本来计算。
Solidity 能够为任何 EVM 兼容的区块链编写智能合约,包括如 Polygon、Arbitrum 和 Optimism 等二层区块链。由于 Solidity 的灵活和易用性,因此受到了许多其他区块链的支持。以下是一些最大项目,支持 Solidity:
Polkadot 是一个专注于将多个区块链(即平行链)集成到一个链中的链,使用中继链。Polkadot 的目标是让平行链具有互操作性,以实现可扩展性并增加带宽。Polkadot 的一 个平行链示例是 Astar,得到 Alchemy 的支持。
Avalanche 是一个支持 Solidity 开发的以太坊竞争者。Avalanche 架构基于三条区块链的网络:一条用于发行和交易资产 (X Chain),一条用于协调网络的验证者 (P-Chain),一条允许创建智能合约 (C Chain)。
Binance Smart Chain 最初是以太坊上的 ERC-20 代币,为了支持其不断增长的 dApps 生态系统,创建了 Binance Smart Chain (BSC) 网络。BSC 及其代币在其智能合约中使用 Solidity。如今,Binance Smart Chain 已被称为 BNB Chain。
Solidity 是区块链行业中最受欢迎的智能合约编程语言。 Solidity 是创建 EVM 兼容智能合约的原生语言。即使在 EVM 之外,还有一些项目内置支持以太坊虚拟机,例如 Neon Labs 的 Solana EVM。
由于区块链行业仍在增长,Solidity 似乎与所有其他编程语言相比使用较少。然而,在行业内部,Solidity 是适用性最广的智能合约语言。Solidity 在许多区块链和最快增长的 web3 dApp 生态系统中都具有强大的使用案例。
根据 The Next Web 的 Hard Fork 报告,Solidity 出现在两倍于其第二大竞争对手的区块链标签问题中。JavaScript 的使用量仅为 Solidity 的 4.8%。
看到一些 Solidity 在以太坊中的使用示例将使你对创建灵活智能合约的 Solidity 代码的简单性有个良好的感受。官方的 Solidity 文档 中找到的代码示例是了解该语言的重要介绍。
以下是来自 Solidity 文档的一个简单代码示例,创建了一个简单的货币在以太坊上。
此代码创建了一种货币。
注意功能声明、合约的私有和公共变量。函数允许合约在链上执行不同操作,在这种情况下,是将代币从一个地址发送到另一个地址和铸造代币。
公共变量可以从合约外部访问,并自动生成 getter 函数,用于检索这些变量的值。event 关键字允许客户端应用程序 监听合约造成的更改。
在此示例中,客户端将看到 sent 事件,指示给监听者,地址 msg.sender 向地址 receiver 发送了 amount 数量的代币。
支持 Solidity 智能合约设计的基础是 ERC(以太坊请求评论)标准,这些标准旨在改善和标准化不同类型以太坊代币的实现。
ERC 标准由 EIPs(以太坊改进提案)提出。一旦 ERC 标准得到批准和最终确定,它们便成为编写 Solidity 合约的标准。这允许一个通用的 Solidity 接口 模板用于构建智能合约。当 Solidity 开发者构建遵循现有 ERC 标准的代币时,他们就能清楚知道其代币在区块链上的行为。
一些最广泛使用的 ERC 标准包括:
你已经了解了什么是 Solidity,但如何开始学习 Solidity?作为最受欢迎的智能合约语言,在线有大量资源可用于开始学习 Solidity 开发。
学习 Solidity 的最佳方法之一是参加 Alchemy 大学的 7 周 Solidity 启动营,该课程最初由领先的 web3 工程团队 ChainShot 创建,2022 年 8 月 Alchemy 收购 ChainShot 后进行了重新设计。
以太坊开发者启动营最初是一个价值 3,000 美元的认证课程,现在是免费的。确保你在排队中占有一席之地,以加入 Alchemy 大学。
本节将为你提供一些最佳在线资源,以学习 Solidity 开发。
官方 Solidity 文档 - 使用文档作为学习 Solidity 开发的主要资源。
Solidity 示例 - 编译了从‘Hello World’程序到钱包应用和 DeFi 的 Solidity 示例。
清晰合约 - 编写安全和可预测智能合约的指南,包含 Solidity 代码示例。
OpenZeppelin 的 Ethernaut - 一个基于智能合约的战争游戏,每个级别都涉及破解一个智能合约。
本文介绍了 Solidity 并为你提供了开始学习 Solidity 开发的资源。Solidity 是一种极其灵活和强大的语言,用于在以太坊和 EVM 兼容区块链上开发去中心化应用。
一旦你对自己的知识感到满意,不妨在 Goerli 测试网部署一个应用程序,参加一个 web3 黑客马拉松,尝试建立一个 web3 初创公司吧!
Supercharged | Alchemy | Substack
来自 web3 领先开发者平台的最新消息
By Alchemy · 超过 111,000 名订阅者
Subscribe
订阅即表示你同意 Substack 使用条款、我们的隐私政策 及 我们的信息收集通知
加入 Alchemy 大学,开始免费学习 Solidity 开发 立即注册
📚 目录
Share:
\
\
学习 Solidity\
\
什么是 Solidity 中的 selfdestruct?\
\
它是什么,如何工作,以及如何入门
\
\
学习 Solidity\
\
2024 年学习 Solidity 开发的 7 个最佳课程\
\
探索学习 Solidity 开发的最佳免费和付费课程
\
\
学习 Solidity\
\
什么是 Solidity 数组?\
\
获取你开始使用 Solidity 数组的指南——函数、声明和故障排除
Alchemy 将最强大的 web3 开发者产品和工具与资源、社区和传奇支持结合在一起。
- 原文链接: alchemy.com/overviews/so...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!