github.com/codingfuture/orig-energi3@v0.8.4/energi/contracts/src/IGovernedProxy.sol (about) 1 // Copyright 2019 The Energi Core Authors 2 // This file is part of Energi Core. 3 // 4 // Energi Core is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Energi Core is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Energi Core. If not, see <http://www.gnu.org/licenses/>. 16 17 // Energi Governance system is the fundamental part of Energi Core. 18 19 // NOTE: It's not allowed to change the compiler due to byte-to-byte 20 // match requirement. 21 pragma solidity 0.5.16; 22 //pragma experimental SMTChecker; 23 24 import { IGovernedContract } from "./IGovernedContract.sol"; 25 import { IUpgradeProposal } from "./IUpgradeProposal.sol"; 26 27 /** 28 * Genesis version of IGovernedProxy interface. 29 * 30 * Base Consensus interface for upgradable contracts proxy. 31 * Unlike common approach, the implementation is NOT expected to be 32 * called through delegatecall() to minimize risks of shared storage. 33 * 34 * NOTE: it MUST NOT change after blockchain launch! 35 */ 36 interface IGovernedProxy { 37 event UpgradeProposal( 38 IGovernedContract indexed impl, 39 IUpgradeProposal proposal 40 ); 41 event Upgraded( 42 IGovernedContract indexed impl, 43 IUpgradeProposal proposal 44 ); 45 46 function impl() external view returns(IGovernedContract); 47 function proposeUpgrade(IGovernedContract _newImpl, uint _period) 48 external payable returns(IUpgradeProposal); 49 function upgrade(IUpgradeProposal _proposal) external; 50 function upgradeProposalImpl(IUpgradeProposal _proposal) external view returns(IGovernedContract new_impl); 51 function listUpgradeProposals() external view returns(IUpgradeProposal[] memory proposals); 52 function collectUpgradeProposal(IUpgradeProposal _proposal) external; 53 54 function () external payable; 55 } 56 57