什么是智能合约?
什么是智能合约?了解区块链上自动执行的程序如何运作、支撑着哪些应用、有哪些局限和风险,以及在使用前如何检查。
智能合约是存储在区块链上的程序,在满足预先设定的条件时自动运行。它可以按照自身代码持有和转移资金,无需银行、经纪商或其他中间方来决定是否执行每一步。
在加密领域,几乎所有超越简单支付的功能都由智能合约驱动:代币、去中心化交易所、借贷协议、NFT 和 DAO。了解智能合约能做什么、不能做什么,有助于你判断使用它们的机会与风险。
智能合约如何运作
由代码强制执行合约的想法,是计算机科学家 Nick Szabo 在 20 世纪 90 年代提出的,他用自动售货机作比喻:投入正确的硬币,选择商品,机器就会出货,无需店员。
在区块链上,流程如下:
- 1开发者编写代码,例如为 Ethereum 使用 Solidity,或为其他一些网络使用 Rust。
- 2代码被部署,通过一笔交易上链,并获得自己的地址。
- 3用户调用合约,向该地址发送交易,通常还会附带代币。
- 4每个节点都执行代码并就结果达成共识,因此所有人看到的结果都相同。
- 5合约状态被更新——余额、所有权记录或设置在链上发生变化。
每一步都需要支付网络手续费。在 Ethereum 上,这种手续费称为 gas;其工作原理请参阅 Ethereum 中的 gas 是什么。
智能合约的用途
| 用途 | 合约的作用 | 示例 |
|---|---|---|
| 代币 | 记录余额和转账 | ERC-20 代币合约 |
| 去中心化交易所 | 持有代币池并用公式为交易定价 | 自动做市商(AMM) |
| 借贷 | 接受抵押品、发放贷款、清算高风险头寸 | DeFi 货币市场 |
| NFT | 记录独特物品的所有权 | 某个系列的 NFT 合约 |
| DAO | 统计投票并执行通过的提案 | 链上治理合约 |
| 多签钱包 | 转移资金需要多方批准 | 项目金库 |
这些合约中有许多会相互调用,这也是 DeFi 有时被称为“货币乐高”的原因。我们的 DeFi 指南介绍了这些组件如何组合在一起。
智能合约与传统合同对比
把智能合约与大多数人熟悉的纸质协议进行比较,会更容易理解。
| 传统合同 | 智能合约 | |
|---|---|---|
| 书写方式 | 人类语言 | 程序代码 |
| 执行方 | 法院、机构、各方的诚意 | 运行代码的区块链网络 |
| 灵活性 | 可以重新协商或解释 | 除非设计为可升级,否则严格按编写的方式运行 |
| 透明度 | 通常不公开 | 代码和活动通常在链上公开 |
| 争议处理 | 法官、仲裁员、律师 | 除代码本身外,没有内置的争议处理方式 |
| 速度 | 结算需要数天到数月 | 数秒到数分钟,取决于网络 |
其优势在于速度快、透明,并且去除了中间方。弱点则是僵化:代码无法权衡公平或具体情境。如果发生了开发者未曾预料的意外情况,合约只会照章执行——即使结果显然不是任何人想要的。我们在什么是测试网和主网?一文中对此有更详细的介绍。
谁编写和控制智能合约
任何人都可以部署智能合约;公有区块链上没有审批流程。这种开放性带来了快速创新,但也意味着诈骗合约与正规合约一样容易部署。部署之后,控制权取决于合约的编写方式:有些合约根本没有所有者,有些由单个钱包控制,还有些由多签或带有时间延迟的 DAO 投票控制。弄清适用哪种模式,是判断任何应用风险的关键一环。延伸阅读:智能合约漏洞攻击。
智能合约做不到的事
智能合约功能强大,但适用范围有限。
- 它们只知道链上数据。 要使用价格或体育比赛结果等现实世界的信息,它们依赖预言机,预言机将外部数据带上链,可能出现故障或被操纵。
- 它们不理解意图。 如果你把资金发送到错误的函数,或签署了恶意授权,合约只会按代码规定行事。
- 它们并不自动成为法律合同。 代码执行与法律上的可执行性是两个不同的问题。
- 它们无法撤销错误。 已完成的交易通常就是最终结果。
使用智能合约的风险
漏洞与攻击
代码由人编写,难免出错。攻击者会寻找缺陷,并可能在一笔交易中盗空资金。审计有帮助,但不能保证安全——请参阅如何评估智能合约审计报告。
管理员密钥与升级
许多合约可以升级,或带有所有者函数,能够暂停交易、修改费用或增发代币。这些功能可以在紧急情况下保护用户,但也带来了被滥用或管理员密钥被盗的可能。延伸阅读:账户抽象详解。
恶意合约
诈骗代币可能包含隐藏规则,例如禁止卖出或收取高额转账税。一个合约在代币页面上看起来可能很正常,实际运行起来却截然不同。另请参阅:ICO vs IEO vs IDO。
授权
使用 DeFi 通常需要授权某个合约动用你的代币。如果对有漏洞或恶意的合约给予无限授权,日后这些代币就可能被拿走。如果你想进一步了解,请阅读什么是内存池?
使用前如何检查智能合约
- 1核实地址:通过项目官网和独立来源进行确认。
- 2在区块浏览器中查询:查看创建日期、活动情况以及源代码是否已验证。
- 3查看审计情况:确认是否有知名机构的审计,并了解发现的问题是否已修复。
- 4弄清谁控制管理员功能——是多签、时间锁,还是单个钱包。
- 5从小额开始,并将代币授权限制在所需金额以内。
我们关于如何验证代币官方合约地址的指南详细介绍了前两个步骤。
总结
智能合约是区块链上自动执行的代码,无需中间方即可持有和转移价值。这使开放、可编程的金融成为可能,但也意味着漏洞、隐藏的管理员权限和恶意代码会即时且不可逆地产生影响。请核实地址,了解谁在控制合约,并只授权你所需要的额度。
常见问题
智能合约具有法律约束力吗?
并非自动具有。智能合约是在区块链上执行的软件,本身并不是法律协议。有些法律体系可能会承认通过代码记录或执行的协议,但这取决于国家和具体情况。如果法律上的可执行性很重要,请查阅当地法律或咨询合格的专业人士。
智能合约部署后还能修改吗?
已部署的代码本身通常无法编辑。不过,许多项目采用可升级的设计,例如代理合约,允许管理员把用户引导到新的代码。这种灵活性有助于修复漏洞,但也意味着有人掌握着修改规则的权力。请查明是谁控制着升级密钥或管理员密钥。
哪些区块链支持智能合约?
Ethereum 让通用智能合约流行起来,许多其他网络也支持智能合约,包括 BNB Chain、Solana、Avalanche、Cardano 以及 Ethereum 的二层网络。Bitcoin 在设计上只支持有限的脚本功能。每个平台都使用自己的语言和工具,因此合约不能自动在不同平台之间移植。
如果智能合约有漏洞会怎样?
代码会严格按照编写的方式运行,漏洞也不例外。攻击者可能利用漏洞盗走资金,而交易通常无法撤销。有些项目可以暂停或升级合约来限制损失,而不可变的合约则根本无法修复。审计和漏洞赏金能降低这一风险,但无法将其消除。
