This contract's source code is verified! Compiler
0.7.6+commit.7338295f
File 1 of 5: ControllerCommon.sol
pragma solidity 0.7.6;
import "../interface/IController.sol" ;
import "../interface/IOneTokenFactory.sol" ;
abstract contract ControllerCommon is IController {
bytes32 constant public override MODULE_TYPE = keccak256 (abi .encodePacked ("ICHI V1 Controller" ));
address public override oneTokenFactory;
string public override description;
event ControllerDeployed (address sender, address oneTokenFactory, string description ) ;
event ControllerInitialized (address sender ) ;
event ControllerPeriodic (address sender ) ;
modifier onlyKnownToken {
require (IOneTokenFactory(oneTokenFactory).isOneToken(msg .sender ), "ICHIModuleCommon: msg.sender is not a known oneToken" );
_ ;
}
constructor (address oneTokenFactory_, string memory description_ ) {
oneTokenFactory = oneTokenFactory_;
description = description_;
emit ControllerDeployed(msg .sender , oneTokenFactory_, description);
}
function periodic ( ) external virtual override {
emit ControllerPeriodic(msg .sender );
}
function init ( ) external onlyKnownToken virtual override {
emit ControllerInitialized(msg .sender );
}
}
File 2 of 5: IController.sol
pragma solidity 0.7.6;
interface IController {
function oneTokenFactory ( ) external returns (address ) ;
function description ( ) external returns (string memory ) ;
function init ( ) external ;
function periodic ( ) external ;
function MODULE_TYPE ( ) external view returns (bytes32 ) ;
}
File 3 of 5: IOneTokenFactory.sol
pragma solidity 0.7.6;
pragma abicoder v2 ;
import "./InterfaceCommon.sol" ;
interface IOneTokenFactory is InterfaceCommon {
function oneTokenProxyAdmins (address ) external returns (address ) ;
function deployOneTokenProxy (
string memory name,
string memory symbol,
address governance,
address version,
address controller,
address mintMaster,
address memberToken,
address collateral,
address oneTokenOracle
)
external
returns (address newOneTokenProxy, address proxyAdmin ) ;
function admitModule (address module, ModuleType moduleType, string memory name, string memory url ) external ;
function updateModule (address module, string memory name, string memory url ) external ;
function removeModule (address module ) external ;
function admitForeignToken (address foreignToken, bool collateral, address oracle ) external ;
function updateForeignToken (address foreignToken, bool collateral ) external ;
function removeForeignToken (address foreignToken ) external ;
function assignOracle (address foreignToken, address oracle ) external ;
function removeOracle (address foreignToken, address oracle ) external ;
function MODULE_TYPE ( ) external view returns (bytes32 ) ;
function oneTokenCount ( ) external view returns (uint256 ) ;
function oneTokenAtIndex (uint256 index ) external view returns (address ) ;
function isOneToken (address oneToken ) external view returns (bool ) ;
function moduleCount ( ) external view returns (uint256 ) ;
function moduleAtIndex (uint256 index ) external view returns (address module ) ;
function isModule (address module ) external view returns (bool ) ;
function isValidModuleType (address module, ModuleType moduleType ) external view returns (bool ) ;
function foreignTokenCount ( ) external view returns (uint256 ) ;
function foreignTokenAtIndex (uint256 index ) external view returns (address ) ;
function foreignTokenInfo (address foreignToken ) external view returns (bool collateral, uint256 oracleCount ) ;
function foreignTokenOracleCount (address foreignToken ) external view returns (uint256 ) ;
function foreignTokenOracleAtIndex (address foreignToken, uint256 index ) external view returns (address ) ;
function isOracle (address foreignToken, address oracle ) external view returns (bool ) ;
function isForeignToken (address foreignToken ) external view returns (bool ) ;
function isCollateral (address foreignToken ) external view returns (bool ) ;
} File 4 of 5: InterfaceCommon.sol
pragma solidity 0.7.6;
pragma abicoder v2 ;
interface InterfaceCommon {
enum ModuleType { Version, Controller, Strategy, MintMaster, Oracle }
}
File 5 of 5: NullController.sol
pragma solidity 0.7.6;
import "../ControllerCommon.sol" ;
contract NullController is ControllerCommon {
constructor (address oneTokenFactory_ )
ControllerCommon (oneTokenFactory_, "Null Controller" )
{}
}
{
"compilationTarget" : {
"contracts/controller/null controller/NullController.sol" : "NullController"
} ,
"evmVersion" : "istanbul" ,
"libraries" : { } ,
"metadata" : {
"bytecodeHash" : "ipfs" ,
"useLiteralContent" : true
} ,
"optimizer" : {
"enabled" : true ,
"runs" : 200
} ,
"remappings" : [ ]
} [{"inputs":[{"internalType":"address","name":"oneTokenFactory_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"oneTokenFactory","type":"address"},{"indexed":false,"internalType":"string","name":"description","type":"string"}],"name":"ControllerDeployed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"ControllerInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"}],"name":"ControllerPeriodic","type":"event"},{"inputs":[],"name":"MODULE_TYPE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"oneTokenFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodic","outputs":[],"stateMutability":"nonpayable","type":"function"}]