
误区一:智能合约能够理解现实条件
以太坊开发文档将智能合约解释为链上的代码与状态。所谓“智能”,主要体现为按预设规则执行。它能判断输入是否满足程序条件,却不能自行理解合同文字中的意图、例外或争议。
例如,程序记录了某项条件成立,只能说明它接受的输入满足了规则。现实情况是否准确地转化成输入,仍是另一个问题。以下解释以以太坊为主,升级部分限定于代理式设计。

误区二:自动执行意味着无需触发、免费运行
自动执行描述的是规则执行过程。改变链上状态通常需要交易触发,合约也可以在交易执行过程中调用其他合约;部署和相关执行需要支付 Gas。不能把它理解为部署后便会自行定时运行的免费服务。

误区三:合约能直接知道链外发生了什么
合约自身不能直接获取现实世界数据,需要预言机等机制把链外信息提供到链上。因此,程序按规则运行与输入信息可靠,是两个需要分别判断的问题。例如依赖外部事件的流程,其结果也受数据传递机制影响。
误区四:部署后不能修改,所以业务逻辑永远不变
OpenZeppelin 的升级文档说明了代理式升级的约束。这类设计可通过更换代理调用的实现合约改变逻辑,同时保留代理中的状态。它不意味着能够任意改写已经部署的代码或撤销历史交易。
常见问题是:升级是否等于重新部署后直接替换?并非如此。新逻辑必须正确解释已有数据;在文档讨论的存储布局中,随意调整原有变量顺序或类型可能造成数据错读。
误区五:可升级合约沿用普通初始化方式即可
代理使用的状态不能依靠实现合约的构造函数完成初始化,通常需要专门的初始化函数,并防止其被重复调用,还要处理父合约初始化。初始化不是无关紧要的准备工作,它决定了程序从什么权限和状态开始运行。
误区六:上链或采用多签,就没有权限风险
开放部署不等于所有功能都开放调用。合约可以限制某些操作由指定角色执行,因此理解一个合约,需要区分公开可见、允许调用与允许管理。
多签通过要求多个有效签名分担控制责任,但不会自动纠正业务逻辑或升级设计中的错误。判断其作用时,应分别看签名门槛、授权范围和程序规则,不能仅凭“多签”名称推断整体安全性。