Solidity是什么?一种智能合约编程语言
曾经,一行粗心的 Solidity 代码就让攻击者窃取了 360 万个 ETH。这段代码完全按照指令执行。这正是令人不安的地方。Solidity 直接用于资金流动。它的源代码通常就暴露在外。一旦合约上线,就没有所谓的“安全补丁”——漏洞依然存在,资金也始终暴露在外,而且全世界都能看到。它是以太坊以及所有 EVM 区块链上编写智能合约的主流编程语言。抛开那些晦涩难懂的术语,大多数 DeFi 和 NFT 的底层都是 Solidity。它功能强大,但也容不得半点差错。本文将介绍 Solidity 的本质、代码的实际运行方式、第一个合约的示例,以及为什么安全始终是重中之重。
什么是 Solidity 编程语言
所有指南都说同样的话:Solidity 是一种用于智能合约的高级语言。好吧。但这几乎没什么用。那么,它到底是什么类型的语言呢?静态类型。面向对象。花括号和分号,语法借鉴自 JavaScript、C++ 和 Python。如果你用这些语言写过代码,那么十分钟之内你就能轻松读懂 `.sol` 文件。
Gavin Wood在 2014 年构思了 Solidity,当时有一个以太坊小团队协助他,其中包括 Christian Reitwiessner。他们的目标很明确:让人们能够为公共区块链编写智能合约。Solidity 的核心单元是“合约”。你可以把它想象成一个存在于链上的“类”——它保存状态、公开函数、继承其他类。关键在于合约的运行方式。将其编译成字节码后,同一个合约会在去中心化网络中的每个节点上以完全相同的方式执行,并且所有节点都会互相验证。正是这一个需求解释了为什么 Solidity 会显得如此局限。
| 坚固性一览 | |
|---|---|
| 首次发布 | 2014 |
| 首席设计师 | Gavin Wood(以太坊) |
| 范例 | 面向对象,面向契约 |
| 打字 | 静止的 |
| 编译为 | EVM字节码 |
| 最新编译器 | v0.8.35(2026年4月) |
| 文件扩展名 | .sol |
Solidity 的工作原理:从代码到 EVM
Solidity 的精髓不在于语法,而在于其流水线。可读性强的代码能够被成千上万台机器以相同的方式运行。确定性是其核心所在。如果两个节点运行同一个合约却得到不同的结果,网络就无法就任何节点的余额达成一致。正是这一要求解释了该语言诸多奇特的限制:不能获取随机数,也不能在执行过程中调用外部 Web API。所有操作都必须在链上可复现。
编译器和字节码
你编写一个 `.sol` 文件,它是一种人类可读的高级代码。Solidity 编译器 `solc` 会将其转换为 EVM 字节码,这是一长串底层操作,外加一个列出合约函数的 ABI。最终上链的就是字节码。没有人会手动阅读它。它是机器的目标,就像 C 代码最终会变成汇编代码一样。
EVM和气体
以太坊虚拟机运行着这些字节码。每个以太坊节点都运行着一个。它执行的每一次操作都需要消耗 gas,一种以 ETH 支付的费用。Gas 并非无关紧要。它是网络计算成本和自我保护的机制:失控的循环不会冻结整个链——它只会消耗掉发送者的 gas 并回滚。优秀的 Solidity 代码能够有效降低 gas 消耗。
美国商业指数
应用程序二进制接口 (ABI) 是与已部署合约通信的 JSON 映射。像 MetaMask 这样的钱包或前端 dApp 会使用 ABI 将函数调用编码成 EVM 期望的格式,然后解码返回的数据。可以将 ABI 理解为用户看到的界面与区块链上某个地址的合约之间的桥梁。

编写你的第一个 Solidity 智能合约
理论就讲到这里。理解 Solidity 最快的方法是阅读一个简短的合约并识别其组成部分。
合同剖析
固
// SPDX 许可证标识符:MIT
pragma solidity ^0.8.20;
合约计数器 {
uint256 public count;
event Incremented(uint256 newCount);
function increment() public {
count += 1;
emit Incremented(count);
}
}
```
几个组件就能完成整个功能。`pragma` 指令用于锁定编译器版本,防止不兼容的版本悄悄地重新编译你的代码。`contract Counter` 指令用于打开合约,类似于打开一个类。`count` 是一个状态变量,永久存储在链上。`increment()` 是一个任何人都可以调用的公共函数。`event Incremented` 会记录每次更改,以便链下应用程序可以做出响应。这是面向对象的代码,底层基于区块链。
你实际使用的工具
你无需安装任何软件即可开始使用。Remix 是一个浏览器集成开发环境 (IDE):只需点击几下即可编写、编译和部署 Solidity 代码,这使其成为学习 Solidity 的标准平台。实际项目则会迁移到本地框架。Hardhat 和 Foundry 负责编译、测试和部署。几乎所有人都依赖 OpenZeppelin,这是一个经过审计、可重用的代币和访问控制合约库,而不是从头开始编写风险较高的代码。
从代码到实时地址
部署是指通过交易发送编译好的字节码。建议先在免费测试网上进行测试。Sepolia 是 2026 中常用的测试网。连接 MetaMask 等钱包。只有当合约运行正常时才推送到主网。部署也需要支付 gas 费,以 ETH 支付。还有一句值得牢记的话:一旦部署,代码就不可更改。您无法编辑已部署的合约。正是这一点——而非任何语法怪癖——构成了下一节内容的意义所在。
哪些区块链支持 Solidity
Solidity 多年前就不再是“以太坊的语言”了。许多网络都采用了 EVM 来复用以太坊的工具,以至于 Solidity 成为了整个链族的通用语言。ChainList 追踪了超过 385 个与 EVM 兼容的区块链(2026)。其中不乏一些知名的区块链:Polygon、BNB Chain、 Arbitrum 、Base 和 Avalanche,它们都运行着与你的 `.sol` 文件编译后相同的字节码。
以太坊仍然是DeFi的核心。据DeFiLlama统计,其锁定总价值约为450亿美元,超过DeFi总价值的一半。而且,以太坊的活跃度还在不断攀升:据Token Terminal统计,仅在2025年第四季度,就将有约870万个新的智能合约部署。对于开发者而言,这种覆盖范围才是选择Solidity而非局限于单一区块链的语言的真正原因。
那么,哪些应用是用 Solidity 构建的呢?几乎所有你听说过的去中心化应用(DeFi)都离不开它。DeFi 借贷和交易协议、大多数代币背后的 ERC-20 合约、NFT 背后的 ERC-721 合约,DAO 用 Solidity 编写投票规则,稳定币用它管理供应量,链上游戏也用它运行。当一个项目声称它“基于以太坊”时,几乎可以肯定有人编写并部署了 Solidity。
为什么 Solidity 智能合约的安全很难
Solidity之所以强大,正是因为它的特性也使得它的漏洞代价高昂。代码中存储着资金。源代码通常是公开的。它无法通过补丁修复。攻击者可以随意读取你的合约,资金就直接存在于地址中。这并非一种适合快速迭代和随意破坏的语言。我从未见过“能够编译”和“安全”之间差距如此之大的软件。
重入攻击和DAO黑客攻击
Solidity 的经典漏洞是重入漏洞。合约在更新自身内部余额之前,会向外部地址发送 ETH,而接收合约会在第一次调用完成之前再次调用该漏洞进行提现,如此反复。2016 年 6 月,正是这个漏洞导致The DAO损失了约 360 万枚 ETH,当时价值约 6000 万美元。此次事件导致以太坊分裂为 ETH 和以太坊经典(Ethereum Classic),后者至今仍在交易。而修复方法呢?简直简单得令人难以置信:先更新自身状态,最后发送资金。这种模式甚至还有一个专门的名称:检查-影响-交互(checks-effects-interactions)。
整数溢出和 SafeMath
在 Solidity 0.8 版本之前,算术运算可能会悄无声息地发生回绕。例如,将 1 加到 `uint256` 的最大值上,结果就会回绕到零。攻击者利用这一漏洞来伪造巨额代币余额,例如 2018 年的 BeautyChain (BEC) 事件。多年来,开发者们一直使用名为 SafeMath 的库来防范此类漏洞,该库一度是 Solidity 中导入量最高的库之一。后来,0.8 版本将溢出和下溢检查集成到了语言本身。现在,最常见的算术错误默认会被回绕,无需额外的库。
审计及其成本
由于错误是永久性的,严肃的项目会付费进行审核。它们基于 OpenZeppelin 经过审计的组件进行开发,然后聘请公司对整个系统进行审计。根据Sherlock的市场数据,专业的智能合约审计费用通常在 2.5 万美元到 10 万美元以上(针对 DeFi 协议)。Solidity 的审计费用通常比同等的 Rust 审计费用低 25% 到 40%,原因很简单,Solidity 的人才库更广。优秀的审计公司档期也很紧张。一个中等规模的协议可能需要等待数周才能获得审计名额,然后再等数周才能拿到审计报告。这一切都不快捷,而且都不是可选项。
| 漏洞 | 出了什么问题 | 著名案例 | 使固定 |
|---|---|---|---|
| 重新进入 | 外部调用在状态更新之前重新进入 | DAO,2016 | 检查-效应-交互作用 |
| 整数溢出 | 算术运算超出了它的极限 | BeautyChain (BEC),2018 | 内置检查(Solidity 0.8+) |
| 访问控制 | 任何人都可以调用特权函数 | 各种各样的 | `onlyOwner` / 角色守卫 |
| 未检查的外部呼叫 | 调用失败已被忽略,逻辑继续执行。 | 各种各样的 | 验证返回值 |
好消息是,损失正在减少。据Immunefi 预测,到 2025 年,DeFi 特定漏洞造成的加密货币损失将降至约 6.8 亿美元,较 2022 年 26.2 亿美元的峰值下降约 74%。更完善的工具和编译器内置的安全检查是部分原因。

Solidity 与其他智能合约语言的比较
Solidity并非没有竞争对手,甚至它并非其中最安全的。Vyper简洁高效,类似Python,其设计初衷就是为了减少潜在的安全隐患;Curve就运行在Vyper之上。Rust为Solana和NEAR上的合约提供支持,在某些方面更安全,但学习难度更高,审计成本也更高。那么,Solidity为何依然胜出?并非语言设计,而是网络效应。最完善的工具链、经过最多审计的库、以及由链和钱包组成的完整的EVM生态系统,所有这些都已与Solidity兼容。
| 语言 | 链条 | 语法基础 | 最适合 | 权衡 |
|---|---|---|---|---|
| 固体 | 以太坊 + 所有 EVM | JavaScript/C++ | 最大覆盖范围,成熟的工具 | 很容易编写不安全的代码 |
| 蝰蛇 | 电子生产系统 | Python | 安全关键型简易合同 | 功能较少,社区规模较小 |
| 锈 | 索拉纳,附近 | 锈 | 高性能,高安全性 | 曲线陡峭,审计成本更高 |
如果你想在用户和资金已经聚集的地方发布产品,Solidity 是务实的默认选择,即使竞争对手在技术上更安全。
你应该在2026学习Solidity编程吗?
围绕加密货币的投机热潮有所降温,但对能够编写正确 Solidity 代码的人才的需求却并未减少。据Electric Capital统计,以太坊在 2025 年 1 月至 9 月期间新增了约 16,181 名开发者,而所有多链开发者中约有 74% 都在 EVM 链上工作。这才是高薪工作和可复用库的来源所在。
学习 Solidity 编程的合理路径:从 Remix 入手,阅读 Solidity 官方文档,然后研究 OpenZeppelin 的合约,了解专业人士如何构建代币和访问控制。将小型项目部署到测试网上,直到安全模式成为一种本能反应,而不是死记硬背。真正稀缺的技能不是编写能够编译的 Solidity 代码;很多人都能做到这一点。Solidity 开发者真正获得报酬的是编写能够抵御攻击者攻击的代码——攻击者已经阅读了你的合约,并且投入了资金。
为什么 Solidity 仍然是默认语言
Solidity之所以成为默认语言,是有充分理由的,并非炒作。它覆盖了所有EVM链,拥有最丰富的工具集,并且是大多数DeFi和NFT的基础。但首先要掌握的并非语法,而是:在区块链上,已部署的代码就是法律,漏洞将永远存在。学习语言和安全模式的同时,务必认真对待,因为两者密不可分。下一步其实很简单,而且完全免费。打开Remix,编写一个十行代码的合约,并在本周将其部署到测试网上。