aboutsummaryrefslogtreecommitdiffstats
path: root/test/compilationTests/corion/module.sol
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2017-07-05 18:28:15 +0800
committerchriseth <chris@ethereum.org>2017-07-05 18:39:55 +0800
commitac84b36144f746662e5ddb984d283e053c7d06ba (patch)
treef50ee438a384e60574a4c28ea32d2b6ae2315795 /test/compilationTests/corion/module.sol
parent05a26fc98c1201057c618c536ca0537e456c9b15 (diff)
downloaddexon-solidity-ac84b36144f746662e5ddb984d283e053c7d06ba.tar.gz
dexon-solidity-ac84b36144f746662e5ddb984d283e053c7d06ba.tar.zst
dexon-solidity-ac84b36144f746662e5ddb984d283e053c7d06ba.zip
Added various contracts for testing.
Diffstat (limited to 'test/compilationTests/corion/module.sol')
-rw-r--r--test/compilationTests/corion/module.sol143
1 files changed, 143 insertions, 0 deletions
diff --git a/test/compilationTests/corion/module.sol b/test/compilationTests/corion/module.sol
new file mode 100644
index 00000000..d64044cb
--- /dev/null
+++ b/test/compilationTests/corion/module.sol
@@ -0,0 +1,143 @@
+pragma solidity ^0.4.11;
+
+contract abstractModuleHandler {
+ function transfer(address from, address to, uint256 value, bool fee) external returns (bool success) {}
+ function balanceOf(address owner) public constant returns (bool success, uint256 value) {}
+}
+
+contract module {
+ /*
+ Module
+ */
+
+ enum status {
+ New,
+ Connected,
+ Disconnected,
+ Disabled
+ }
+
+ status public moduleStatus;
+ uint256 public disabledUntil;
+ address public moduleHandlerAddress;
+
+ function disableModule(bool forever) external onlyForModuleHandler returns (bool success) {
+ _disableModule(forever);
+ return true;
+ }
+ function _disableModule(bool forever) internal {
+ /*
+ Disable the module for one week, if the forever true then for forever.
+ This function calls the Publisher module.
+
+ @forever For forever or not
+ */
+ if ( forever ) { moduleStatus = status.Disabled; }
+ else { disabledUntil = block.number + 5760; }
+ }
+
+ function replaceModuleHandler(address newModuleHandlerAddress) external onlyForModuleHandler returns (bool success) {
+ _replaceModuleHandler(newModuleHandlerAddress);
+ return true;
+ }
+ function _replaceModuleHandler(address newModuleHandlerAddress) internal {
+ /*
+ Replace the ModuleHandler address.
+ This function calls the Publisher module.
+
+ @newModuleHandlerAddress New module handler address
+ */
+ require( moduleStatus == status.Connected );
+ moduleHandlerAddress = newModuleHandlerAddress;
+ }
+
+ function connectModule() external onlyForModuleHandler returns (bool success) {
+ _connectModule();
+ return true;
+ }
+ function _connectModule() internal {
+ /*
+ Registering and/or connecting-to ModuleHandler.
+ This function is called by ModuleHandler load or by Publisher.
+ */
+ require( moduleStatus == status.New );
+ moduleStatus = status.Connected;
+ }
+
+ function disconnectModule() external onlyForModuleHandler returns (bool success) {
+ _disconnectModule();
+ return true;
+ }
+ function _disconnectModule() internal {
+ /*
+ Disconnect the module from the ModuleHandler.
+ This function calls the Publisher module.
+ */
+ require( moduleStatus != status.New && moduleStatus != status.Disconnected );
+ moduleStatus = status.Disconnected;
+ }
+
+ function replaceModule(address newModuleAddress) external onlyForModuleHandler returns (bool success) {
+ _replaceModule(newModuleAddress);
+ return true;
+ }
+ function _replaceModule(address newModuleAddress) internal {
+ /*
+ Replace the module for an another new module.
+ This function calls the Publisher module.
+ We send every Token and ether to the new module.
+
+ @newModuleAddress New module handler address
+ */
+ require( moduleStatus != status.New && moduleStatus != status.Disconnected);
+ var (_success, _balance) = abstractModuleHandler(moduleHandlerAddress).balanceOf(address(this));
+ require( _success );
+ if ( _balance > 0 ) {
+ require( abstractModuleHandler(moduleHandlerAddress).transfer(address(this), newModuleAddress, _balance, false) );
+ }
+ if ( this.balance > 0 ) {
+ require( newModuleAddress.send(this.balance) );
+ }
+ moduleStatus = status.Disconnected;
+ }
+
+ function transferEvent(address from, address to, uint256 value) external onlyForModuleHandler returns (bool success) {
+ return true;
+ }
+ function newSchellingRoundEvent(uint256 roundID, uint256 reward) external onlyForModuleHandler returns (bool success) {
+ return true;
+ }
+
+ function registerModuleHandler(address _moduleHandlerAddress) internal {
+ /*
+ Module constructor function for registering ModuleHandler address.
+ */
+ moduleHandlerAddress = _moduleHandlerAddress;
+ }
+ function isModuleHandler(address addr) internal returns (bool ret) {
+ /*
+ Test for ModuleHandler address.
+ If the module is not connected then returns always false.
+
+ @addr Address to check
+
+ @ret This is the module handler address or not
+ */
+ if ( moduleHandlerAddress == 0x00 ) { return true; }
+ if ( moduleStatus != status.Connected ) { return false; }
+ return addr == moduleHandlerAddress;
+ }
+ function isActive() public constant returns (bool success, bool active) {
+ /*
+ Check self for ready for functions or not.
+
+ @success Function call was successfull or not
+ @active Ready for functions or not
+ */
+ return (true, moduleStatus == status.Connected && block.number >= disabledUntil);
+ }
+ modifier onlyForModuleHandler() {
+ require( msg.sender == moduleHandlerAddress );
+ _;
+ }
+}