
方法、代码与状态
智能合约中的“方法”通常可以理解为函数,用来表达某项操作的规则。以太坊合约由代码和状态数据组成,部署后位于特定地址。函数定义如何处理输入,状态则记录合约需要保存的信息。
例如,库存管理可以拆成“库存数量”和“补充库存的方法”:前者描述当前情况,后者定义谁能改变数量、需要满足什么条件。理解方法时,需要同时看输入、条件和状态变化。

交易、编译与虚拟机
以太坊用户账户可以提交交易,调用合约函数。Solidity、Vyper 等语言编写的程序需要经过编译,才能由以太坊虚拟机执行。部署本身也是交易,需要支付 Gas。

这些概念对应不同层次:语言表达业务规则,编译生成可执行形式,虚拟机执行规则,交易承载链上交互,Gas 用于计量执行所需的资源。具体机制不能直接套用于所有区块链。
合约组合与外部数据
合约可以调用其他合约,也可以部署新合约,这构成可组合性。合约自身不能直接获取链外事件信息,需要通过预言机等机制引入外部数据。
适用条件取决于规则所需的信息:如果所需数据已经在链上,可以围绕链上状态处理;如果依赖现实事件,就需要额外考虑数据如何进入链上。代码按规则执行,并不能单独证明外部输入真实可靠。
所有权、角色与管理权限
OpenZeppelin 的 Ownable 支持单一所有者管理,AccessControl 则按角色划分权限。角色持有者能够执行获准操作,但不因此自动获得授予或撤销该角色的权限;角色管理由相应管理员控制。
单一管理职责可以使用所有权模型;多种职责需要分别授权时,角色模型更便于表达最小权限原则。例如,负责某项业务操作的账户,不必同时拥有管理其他账户权限的能力。
常见问题与权限边界
公开部署是否意味着任何人都能执行所有方法?公开可交互与操作获准是两个概念,关键操作仍可检查调用者身份和角色。
转移或放弃所有权有什么区别?两步转移要求新所有者接受;放弃所有权会使受 onlyOwner 保护的管理功能无法再被调用。涉及多人共同管理时,多签合约可通过签名门槛控制执行,但具体方法仍需定义清楚授权条件。