合约生命周期
设计和实现方案
背景
当前所有节点都可以部署合约,从而执行一个合约。
目标
智能合约的部署、升级、冻结、解冻、吊销都需要受控。
合约部署之后需要经过投票生效后才能调用,同样升级、冻结、解冻,吊销等均需要进行投票后才会生效。
投票规则:达到2/3见证节点同意或者1/3见证节点反对,投票立即结束(尚未进行投票的见证节点无需投票),合约状态发生流转。
2/3 这个比例要参考具体的共识。
总体设计
生命周期流程图
解释说明
- 合约部署之后,会自动发起部署投票。2/3见证节点同意后,合约变更为生效状态,所有账户均可对该合约进行调用。
- 生效状态下的合约可进行升级、冻结、吊销投票。
- 解冻投票仅能在合约冻结状态下发起。
- 仅在投票通过情况下,才能发生合约状态变化。
- 除了部署之外,升级、吊销、冻结、解冻均可多次发起投票(合约的上一轮投票需要结束)。
模块设计
状态设计
合约分为未生效状态(吊销状态属于未生效状态),生效状态,冻结状态。
未生效状态合约不可调用,生效状态可正常调用,冻结状态合约不可调用。
状态流转
合约状态
0 | 禁止执行 | |
1 | 允许执行 | |
2 | 冻结状态 |
查询
latc_getContractState