
智能合约、函数与状态
区块链与合同管理相关术语如何理解,可以先从程序做什么、谁能操作、依据什么信息执行三个问题入手。这里主要讨论以太坊智能合约及相关权限机制。
以太坊开发文档将智能合约解释为部署在特定地址上的代码与数据。函数规定可执行的操作,状态保存程序当前的数据,用户通过交易调用相应功能。部署也是交易,需要支付网络计算费用,即通常所说的 gas 费用。

映射到合同管理场景,函数可以理解为预先定义的流程动作,状态可以用来表达流程进度。但程序能否支持审批、变更或终止,取决于具体代码,不能仅凭“智能合约”这个名称判断。

预言机与外部事实
以太坊开发文档还说明,智能合约不能自行取得链外事件信息,预言机用于把链外数据提供给合约。合约之间也可以相互调用,这种能力称为可组合性。
例如,涉及交付确认的流程,需要先明确谁提供交付结果,以及结果如何进入链上。程序可以按照输入执行规则,但输入是否准确仍需单独判断。适合自动执行的条件,应能够被明确表达,并有可用的数据输入。
所有权、角色与管理权限
OpenZeppelin 文档中的 Ownable 表示由指定账户承担管理权限;基于角色的访问控制则把不同操作分配给不同角色。角色持有者与角色管理员是不同概念:能够执行某项操作,不代表能够给别人授予同样权限。
这里的“所有权”是程序权限术语,不能仅据此判断合同业务中的权利归属。若一个流程有提交、复核和管理等分工,可以用角色分别表达权限;是否允许同一账户兼任,需要在权限设计中明确。
多签、权限交接与常见问题
多签要求达到预设数量的有效签名才能执行相关操作,可用于需要共同确认的管理事项。它与角色控制关注点不同:角色决定谁有资格操作,多签决定一次操作需要多少签名确认。
管理员能否直接更换?OpenZeppelin 提供所有权转移机制,其中两步转移要求接收方主动接受。放弃所有权可能使仅限所有者调用的功能无法再使用,因此交接和放弃不能混为一谈。
上链后能否随意改回?链上交互通常不可逆,不能把传统系统中的撤销按钮直接套用到链上。需要纠正业务状态时,是否存在相应操作、由谁授权以及如何保留记录,都应由具体程序规则明确。