学习视频来源:https://www.bilibili.com/video/BV1Vt411X7JF/?p=24
本博客除了包含自己的在学习过程中记录的笔记外,还包含少部分自己扩展的内容,如有错误,敬请指正。
文章目录
- [1. 智能合约并不"智能"](#1. 智能合约并不“智能”)
- [2. 不可篡改性是一把双刃剑](#2. 不可篡改性是一把双刃剑)
- [3. 没有什么是真正不可篡改的](#3. 没有什么是真正不可篡改的)
- [4. 语言设计上的反思](#4. 语言设计上的反思)
- [5. 智能合约应具备怎样的表达能力?](#5. 智能合约应具备怎样的表达能力?)
- [6. The DAO 硬分叉:去中心化中的"人为干预"](#6. The DAO 硬分叉:去中心化中的“人为干预”)
- [7. 去中心化 ≠ 分布式](#7. 去中心化 ≠ 分布式)
1. 智能合约并不"智能"
智能合约并非基于人工智能技术,它和人工智能没有关系。 本质上是一种自动执行的程序逻辑,因此更准确的名称应为"自动合约"------类似于现实中的 ATM:预设规则,条件满足即自动执行。
其"不智能"还体现在一旦部署便不可更改。代码即法律(Code is Law),写错或存在漏洞也无法直接修复,必须通过复杂的链上治理或分叉机制处理。
2. 不可篡改性是一把双刃剑
区块链的不可篡改性常被视为核心优势,适用于存证、溯源等场景,但同时也带来显著挑战:
-
漏洞无法及时修复
以 The DAO 事件为例:漏洞在攻击发生前几天已被邮件预警,但因系统去中心化,无法像中心化系统那样快速打补丁。修复需通过硬分叉,而分叉过程本身可能暴露漏洞细节,引发更大风险。
-
账户无法冻结
与传统银行不同,区块链地址无法被冻结。一旦私钥泄露或资产被盗,唯一应对方式是尽快将剩余资产转移至安全地址。
-
合约无法阻止调用
部署后的合约对任何人开放调用,无法单方面停用,除非社区共识推动分叉。
3. 没有什么是真正不可篡改的
尽管区块链设计上强调不可篡改,但在重大事件面前,修改仍是可能的。The DAO 事件最终通过硬分叉强行回滚交易,实质上是"写死代码、强改状态"。
这说明:不可篡改是相对的。在一般情况下,篡改成本极高;但在涉及重大利益时,社区仍可通过共识机制实现变更。因此,不应盲目迷信"不可篡改"的绝对性。
4. 语言设计上的反思
Solidity 的设计存在反直觉之处,是重入攻击等漏洞的根源之一。例如:
- 调用
transfer()时,竟然可能会触发接收方的fallback函数,而该函数又可能回调原合约,形成递归调用。 - 这违背了现实世界的直觉:"我给你转账,你不应再反过来操作我的账户。"
对此,有学者提议采用函数式编程语言(如 OCaml)开发智能合约:
- 函数式语言具有更强的形式化基础,副作用少,更易进行形式化验证(Formal Verification)。
- 形式化验证可数学证明合约无漏洞,被视为智能合约安全的"终极目标"。
然而,当前形式化验证仅适用于简单逻辑,复杂合约仍难以全覆盖。尽管技术已有进步,但距离实用化仍有差距。
因此,虽然 Solidity 存在设计缺陷,是否全面转向函数式语言仍需审慎评估。
5. 智能合约应具备怎样的表达能力?
Solidity 是图灵完备的,理论上可实现任何机器可以执行的任务。但表达能力过强反而增加风险:
- 图灵完备意味着潜在的无限循环、状态爆炸和不可预测行为。
- 一些观点认为,智能合约语言应限制表达能力 ,仅支持必要功能,以降低漏洞概率。所以出来智
问题在于很难找到这样的语言,因为不知道未来的应用场景。也很难预料将来的攻击。
可行路径:
- 提供标准化模板 和安全库,开发者在其基础上增删,而非从零编写。
- 利用开源生态增强透明度:智能合约通常开源,接受社区审查,提升公信力。
然而需警惕"多 eyeball 谬误"(Many Eyeballs Fallacy):
"Given enough eyeballs, all bugs are shallow."
但现实中,真正具备专业能力并仔细审查代码的人极少。The DAO 合约虽开源,漏洞仍未被及时发现。开源不等于安全,仍需严谨审计。
6. The DAO 硬分叉:去中心化中的"人为干预"
The DAO 事件后的硬分叉并非由以太坊开发团队单方面决定,而是依赖矿工共识:
- 只有当大多数矿工升级节点,新链才能成为主流;
- 不升级的节点仍可运行旧链(即 ETC)。
这说明:
- 去中心化不等于完全自动化;
- 规则可以修改,但修改过程本身需通过去中心化的手段达成共识;
- 分叉不是失败,而是民主机制的体现------社区根据利益权衡选择方向;
- 相比之下,中心化系统可直接废弃旧版本,但无法"分叉"出另一条合法路径。
7. 去中心化 ≠ 分布式
-
去中心化一定是分布式 ,但分布式不一定是去中心化 。
例如:谷歌搜索引擎部署在成千上万台服务器上,但均由单一组织控制,属于中心化系统。
-
比特币和以太坊是交易驱动的状态机 :
所有节点执行相同操作,以高昂代价(算力、Gas、时间)维护全局状态一致性。
-
这与传统分布式系统截然不同:
传统系统让不同节点处理不同任务,再聚合结果,效率更高。
-
状态机的核心原理是让所有节点重复执行相同的操作 ,以高昂的计算和通信开销为代价,确保全局状态的一致性与可验证性。
这种模式虽然能持续对外提供可信服务,但效率极低------其处理速度甚至慢于单台计算机。因此,传统状态机系统通常只部署在少量节点(常为个位数)上。
-
而比特币、以太坊等区块链则前所未有地将这一模型扩展到成千上万个无需互信的节点,牺牲性能换取去中心化共识。
正因如此,区块链并不适合用于大规模计算或存储 :不仅速度慢,而且"Gas"成本高昂。智能合约的本质是实现多方之间的可信控制逻辑,仅在需要跨实体建立信任与共识的场景下才有价值;对于高性能计算或海量存储需求,应优先选择成熟的云服务平台。