---
title: "免费学习 Solidity 的最佳方式（2025）"
description: "从初学者到 Solidity 开发大神"
---

# 免费学习 Solidity 的最佳方式（2025）

[Solidity](https://www.alchemy.com/overviews/solidity) 是一种面向对象的高级语言，用于编写智能合约。学习 Solidity 可以让你创建智能合约和[去中心化应用](https://www.alchemy.com/dapps/top/defi-dapps)。

本文介绍了学习 Solidity 最常见的几种方法，并介绍了[成为 Ethereum 开发者](https://www.alchemy.com/overviews/how-to-become-a-solidity-developer)需要掌握的重要 Solidity 概念。

## **为什么学习 Solidity 很重要？**

Solidity 是用于在 Ethereum 和兼容 EVM 的区块链上编写智能合约的编程语言，是区块链开发者最重要的技能之一。随着 Ethereum 及其他智能合约平台生态的增长，对[Solidity 开发者](https://www.alchemy.com/overviews/solidity-developer)的需求也在增长。

高级 Solidity 开发者的平均年薪为 **12 万至 22.5 万美元**，这还不包括基于代币的股权或员工期权。根据 cryptocurrencyjobs.co 的数据，美国 Solidity 开发者的[平均基本工资](https://www.alchemy.com/overviews/solidity-developer-salary)为 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 开发课程](https://www.alchemy.com/university/courses/solidity)。

教程通常是自主安排进度的，而在线课程往往有固定的课时和截止日期，为学习者提供有时间约束的动力，帮助他们保持进度。此外，[Solidity 课程](https://www.alchemy.com/overviews/solidity-course)通常还包含测验和其他作业，用于检验你的学习成果。

### **通过 Ethereum 训练营学习 Solidity**

如果你想在结构化、沉浸式的环境中学习 Solidity 和其他区块链开发技能，[Solidity 训练营](https://www.alchemy.com/overviews/solidity-bootcamp)可能是适合你的选择。区块链训练营提供高强度的实践培训，帮助你成为具备上岗能力的区块链开发者。

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

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

### **通过教程学习 Solidity**

如果你喜欢自主学习、按自己的节奏推进，教程是学习 Solidity 的好方式。网上有许多高质量的[Solidity 教程](https://www.alchemy.com/overviews/solidity-tutorial)，从入门到进阶各个级别都有覆盖。

官方的**Ethereum 开发者资源**中收录了 53 篇标注为 "Solidity" 的教程，内容涵盖从智能合约基础到[Gas 优化](https://www.alchemy.com/overviews/solidity-gas-optimization)、安全签名等更进阶的主题。

## **需要掌握的重要 Solidity 概念**

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

### **Solidity ABI**

[应用二进制接口](https://www.alchemy.com/overviews/solidity-abi)（ABI）是一套规则，用于让两个不同的软件相互交互。在 Solidity 中，ABI 使智能合约之间能够相互交互，也使智能合约能够与钱包等外部软件交互。

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

### **智能合约**

[智能合约](https://www.alchemy.com/overviews/solidity-smart-contract)是运行在 Ethereum 区块链上的一段代码，在满足一组条件时执行特定操作。智能合约可用于创建数字代币、去中心化应用等。

一个常见的智能合约用例是创建 ERC20 代币，仅需几行代码即可完成。更复杂的智能合约包括代币交换、流动性挖矿和合成资产。这些合约会通过 [Solidity 编译器](https://www.alchemy.com/overviews/solidity-compiler)编译，输出用于部署合约的字节码。

#### **ERC20 代币**

[ERC20](https://www.alchemy.com/overviews/erc20-solidity) 代币是运行在 Ethereum 区块链上的一类数字资产，通常用于代表大宗商品或法定货币等现实世界资产。

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

#### **合约接口**

[接口](https://www.alchemy.com/overviews/solidity-interface)用于规定一个合约必须具备哪些函数。接口使你能够创建可轻松复用和扩展的合约。例如，你可以为代币合约创建一个接口，之后任何实现该接口的合约都可以当作代币使用。

#### **继承**

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

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

### **函数**

和其他编程语言一样，函数是 Solidity 的关键组成部分。[Solidity 函数](https://www.alchemy.com/overviews/solidity-functions)是接收输入、执行某些操作并返回输出的代码段。

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

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

#### **函数可见性**

关于 Solidity 函数，一个需要注意的重要事项是它们具有[可见性设置](https://www.alchemy.com/overviews/solidity-function-visibility)。可见性决定了谁可以查看和执行该函数。Solidity 中有四种可见性级别：public、external、internal 和 private。

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

#### **Call 函数**

[_call_ 函数](https://www.alchemy.com/overviews/solidity-call)允许你执行另一个合约中的代码。这是 Ethereum 上合约之间相互交互的方式。

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

#### **Delegatecall 函数**

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

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

#### **修饰器（Modifiers）**

[修饰器](https://www.alchemy.com/overviews/solidity-modifier)与函数类似，但有一些重要区别。首先，修饰器只能用于函数。其次，修饰器会在函数执行之前被调用。[payable](https://www.alchemy.com/docs/solidity-payable-functions) 就是一个修饰器示例，它允许函数向合约接收 Ether。

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

### **数组**

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

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

#### **结构体（Structs）**

[结构体](https://www.alchemy.com/overviews/solidity-struct)是在 Solidity 合约中存储数据的一种方式。结构体适合用来创建具有多个属性的更复杂的数据类型。

### **映射（Mappings）**

[映射](https://www.alchemy.com/overviews/solidity-mapping)是在 Solidity 合约中存储数据的一种方式。映射与数组类似，但其键可以是任意类型，而不仅限于整数。这一特性使映射既灵活又强大。映射使你能够以灵活、易用的方式在合约中存储数据。

### **事件**

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

[Solidity 事件](https://www.alchemy.com/overviews/solidity-events)使开发者能够编写响应现实世界事件而执行的代码。这也是许多应用能够与现实世界交互的方式，例如在满足某个条件时发送电子邮件或短信。

### **Require（错误处理）**

["require"](https://www.alchemy.com/overviews/solidity-require) 关键字是三个特殊函数之一，另外两个是 _assert_ 和 _revert_。Require 用于检查某个条件是否为真，如果不为真，则回滚交易并返回错误信息。

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

### **可升级智能合约**

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

### **代理合约**

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

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

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

### **多签合约**

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

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

### **重入攻击**

[重入攻击](https://www.alchemy.com/overviews/reentrancy-attack-solidity)是一种可能发生在 Solidity 合约中的攻击方式：当一个合约调用另一个合约，而后者又在前一个合约完成执行之前，回调该合约或另一个不受信任的合约。

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

## **学习 Solidity 的最佳方式**

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

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