跳至内容
0%

免费学习 Solidity 的最佳方式(2025)

作者 Frederik B

发布于 2023年9月22日2 分钟阅读

Solidity 是一种面向对象的高级语言,用于编写智能合约。学习 Solidity 可以让你创建智能合约和去中心化应用

本文介绍了学习 Solidity 最常见的几种方法,并介绍了成为 Ethereum 开发者需要掌握的重要 Solidity 概念。

为什么学习 Solidity 很重要?

Solidity 是用于在 Ethereum 和兼容 EVM 的区块链上编写智能合约的编程语言,是区块链开发者最重要的技能之一。随着 Ethereum 及其他智能合约平台生态的增长,对Solidity 开发者的需求也在增长。

高级 Solidity 开发者的平均年薪为 12 万至 22.5 万美元,这还不包括基于代币的股权或员工期权。根据 cryptocurrencyjobs.co 的数据,美国 Solidity 开发者的平均基本工资为 127,500 美元,最低为 80,000 美元,最高为 180,000 美元。相比之下,远程开发者的年薪为 111,000 至 200,000 美元。而美国开发者的平均工资为 103,000 美元,可见区块链专业技能的需求之高。

以下是按地区划分的 Solidity 开发者年薪结构(单位:美元):

  • 北美 - $125K-$200K
  • 欧洲 - $80K-$135K
  • 亚洲 - $46K-$116K
  • 大洋洲 - $85K-$120K
  • 南美洲 - $49K-$150K
  • 非洲 - $49K-$75K
  • 远程 - $111K-$200K

学习 Solidity 不仅能带来可观的经济回报,还能让你构建对世界产生巨大影响的出色应用。事实上,仅 Ethereum 一条链上就有近 3,000 个应用,覆盖从普惠金融到可持续能源的各类目标。

学习 Solidity 的方法

学习 Solidity 的方法有很多,包括在线课程、训练营、教程,以及阅读 Hardhat 等常用 Solidity 开发工具的文档。

通过在线课程学习 Solidity

如果你希望获得比教程更多的结构和指导,在线课程是学习 Solidity 的好方式。市面上有许多高质量的课程,包括Alchemy University 的免费 Solidity 开发课程

教程通常是自主安排进度的,而在线课程往往有固定的课时和截止日期,为学习者提供有时间约束的动力,帮助他们保持进度。此外,Solidity 课程通常还包含测验和其他作业,用于检验你的学习成果。

通过 Ethereum 训练营学习 Solidity

如果你想在结构化、沉浸式的环境中学习 Solidity 和其他区块链开发技能,Solidity 训练营可能是适合你的选择。区块链训练营提供高强度的实践培训,帮助你成为具备上岗能力的区块链开发者。

在 Alchemy 收购 ChainShot 后,Alchemy 重新设计了 ChainShot 为期 7 周、原价 3,000 美元的 Ethereum 开发者训练营,并在 Alchemy University 下向公众免费开放。如果你想跟随专业讲师、与积极进取的同学一起学习 Solidity,可以抢先预约 Alchemy University 的 Ethereum 训练营名额。

如果开发者完全没有编程基础,在开始 Ethereum 训练营之前,Alchemy University 的3 周 JavaScript 速成课程是很好的先修内容。

通过教程学习 Solidity

如果你喜欢自主学习、按自己的节奏推进,教程是学习 Solidity 的好方式。网上有许多高质量的Solidity 教程,从入门到进阶各个级别都有覆盖。

官方的Ethereum 开发者资源中收录了 53 篇标注为 "Solidity" 的教程,内容涵盖从智能合约基础到Gas 优化、安全签名等更进阶的主题。

需要掌握的重要 Solidity 概念

选定学习方法后,接下来就要开始学习如何用 Solidity 编写代码了。理解一些核心 Solidity 概念,对于编写有效的代码非常重要。

Solidity ABI

应用二进制接口(ABI)是一套规则,用于让两个不同的软件相互交互。在 Solidity 中,ABI 使智能合约之间能够相互交互,也使智能合约能够与钱包等外部软件交互。

ABI 使你能够编写与任意合约交互的代码,而无需持有该合约的源代码。这之所以可行,是因为 ABI 包含了在合约之间编码和解码数据所需的全部信息。

智能合约

智能合约是运行在 Ethereum 区块链上的一段代码,在满足一组条件时执行特定操作。智能合约可用于创建数字代币、去中心化应用等。

一个常见的智能合约用例是创建 ERC20 代币,仅需几行代码即可完成。更复杂的智能合约包括代币交换、流动性挖矿和合成资产。这些合约会通过 Solidity 编译器编译,输出用于部署合约的字节码。

ERC20 代币

ERC20 代币是运行在 Ethereum 区块链上的一类数字资产,通常用于代表大宗商品或法定货币等现实世界资产。

ERC20 代币是 Ethereum 上最常见的数字资产类型。由于 ERC20 代币也是最容易编写的合约类型之一,学会创建它们是需要掌握的重要技能。

合约接口

接口用于规定一个合约必须具备哪些函数。接口使你能够创建可轻松复用和扩展的合约。例如,你可以为代币合约创建一个接口,之后任何实现该接口的合约都可以当作代币使用。

继承

继承是 Solidity 中复用代码的一种方式。继承允许你创建"子"合约,继承"父"合约的全部代码。这让开发者无需重复编写代码,也让智能合约的维护变得容易得多。

继承是面向对象编程中的重要概念,也是 Solidity 强大之处之一。学会创建可轻松扩展和修改的标准化合约,是需要掌握的重要 Solidity 课程。

函数

和其他编程语言一样,函数是 Solidity 的关键组成部分。Solidity 函数是接收输入、执行某些操作并返回输出的代码段。

函数可以写入 Solidity 智能合约来执行各种操作,从发送代币到存储数据不等。用于复用的函数集合称为库(library)。

编程中有一条基本原则叫 "D.R.Y. 原则",即 "Don't Repeat Yourself"(不要重复自己)。该原则要求开发者不应两次编写同一段代码,而应将某个功能写成函数,之后每次需要执行该操作时直接调用该函数。

函数可见性

关于 Solidity 函数,一个需要注意的重要事项是它们具有可见性设置。可见性决定了谁可以查看和执行该函数。Solidity 中有四种可见性级别:public、external、internal 和 private。

  • public 函数:任何人都可以查看和执行。
  • external 函数:任何人都可以查看,但只能由其他合约调用执行。
  • internal 函数:只能被同一合约内的其他函数查看和执行。
  • private 函数:只能被合约自身查看和执行。

Call 函数

call 函数允许你执行另一个合约中的代码。这是 Ethereum 上合约之间相互交互的方式。

call 函数使你能够编写与任意合约交互的代码,而无需持有该合约的源代码。这之所以可行,是因为 ABI 包含了在合约之间传递数据所需的全部编码和解码信息。

Delegatecall 函数

delegatecall 函数与 call 方法类似,但有一个重要区别:它是在调用者的上下文中执行代码的。这意味着被调用合约所做的任何存储变更,都会作用到调用者的存储上。

delegatecall 函数使你能够编写可被其他合约复用的合约。例如,你可以编写一个实现某接口的合约,然后其他合约通过 delegatecall 调用该合约来使用该接口。

修饰器(Modifiers)

修饰器与函数类似,但有一些重要区别。首先,修饰器只能用于函数。其次,修饰器会在函数执行之前被调用。payable 就是一个修饰器示例,它允许函数向合约接收 Ether。

修饰器使你能够在不改动实际代码的情况下改变函数的行为。例如,一个修饰器可以在函数执行前检查用户余额是否充足,或者在函数被调用时添加一个触发的事件。

数组

数组是一种线性数据结构,用于存储固定数量、类型相同的元素,这些元素存储在连续相邻的内存位置中。数组可以是固定大小的,也可以是动态大小的。动态数组在声明时不预先指定大小,而固定数组则有预先设定的大小。

如果开发者需要遍历一组数据(例如使用循环),则应使用数组。如果不需要遍历数据集,而是可以通过已知的键来获取值,则可以考虑使用映射(mapping)。

结构体(Structs)

结构体是在 Solidity 合约中存储数据的一种方式。结构体适合用来创建具有多个属性的更复杂的数据类型。

映射(Mappings)

映射是在 Solidity 合约中存储数据的一种方式。映射与数组类似,但其键可以是任意类型,而不仅限于整数。这一特性使映射既灵活又强大。映射使你能够以灵活、易用的方式在合约中存储数据。

事件

事件是一种在满足特定条件时触发代码执行的方式。例如,开发者可以编写一个在用户购买代币时触发的事件,或者在区块链上某笔交易被确认时触发的事件。

Solidity 事件使开发者能够编写响应现实世界事件而执行的代码。这也是许多应用能够与现实世界交互的方式,例如在满足某个条件时发送电子邮件或短信。

Require(错误处理)

"require" 关键字是三个特殊函数之一,另外两个是 assertrevert。Require 用于检查某个条件是否为真,如果不为真,则回滚交易并返回错误信息。

使用 require 可以防止合约中出现错误。例如,你可以用 require 检查用户余额是否充足以完成购买,或者在发送交易之前检查地址是否有效。

可升级智能合约

可升级智能合约是一种无需重新部署即可升级的合约类型。可升级智能合约使你能够在合约部署后对其进行修改,而不会影响区块链上已有的数据或代码。

代理合约

代理合约是一种可更新的路由合约,用于将函数调用转发到最新的实现合约。

通过这种方式,协议可以升级其实现,而无需要求所有用户将代码更新到新地址。使用代理合约,开发者可以为其函数提供一个静态地址。

代理合约有一个更新函数,团队可以调用它来将函数路由路径更新到新的实现合约地址。

多签合约

多签合约是一种需要多个签名才能执行其代码的合约类型。当开发者希望在交易执行前要求多人批准时,Solidity 多签合约十分有用。

多签合约在需要限制某段时间内可支出金额的场景中也很有用。例如,你可以使用多签合约,要求任何超过 1,000 美元的交易都必须有两个签名。

重入攻击

重入攻击是一种可能发生在 Solidity 合约中的攻击方式:当一个合约调用另一个合约,而后者又在前一个合约完成执行之前,回调该合约或另一个不受信任的合约。

重入攻击可用于利用合约中的漏洞。例如,攻击者可以利用重入攻击将合约中的所有 Ether 转走。

学习 Solidity 的最佳方式

无论你的目标是什么,总有一种适合你的方式来学习 Solidity。如果你想快速上手,教程是不错的选择,你也可以参考我们的 Solidity 入门介绍。如果你想要更多结构和指导,在线课程可能更适合你。而如果你想要沉浸式的实践体验,训练营可能是更合适的选择。

选定学习方式之后,还有一些重要概念需要牢牢掌握,包括智能合约、函数、事件等等。理解这些概念后,你就已经在成为一名熟练的 Solidity 开发者的路上迈出了坚实的一步。

Background gradient

构建区块链应用

Alchemy 将最强大的 Web3 开发者产品和工具与资源、社区及专业支持结合在一起。