pragma solidity ^0.5.16; // Inheritance import "./BaseOikos.sol"; // https://docs.oikos.cash/contracts/source/contracts/mintableoikos contract MintableOikos is BaseOikos { bytes32 private constant CONTRACT_SYNTHETIX_BRIDGE = "OikosBridgeToBase"; constructor( address payable _proxy, TokenState _tokenState, address _owner, uint _totalSupply, address _resolver ) public BaseOikos(_proxy, _tokenState, _owner, _totalSupply, _resolver) {} /* ========== INTERNALS =================== */ function _mintSecondary(address account, uint amount) internal { tokenState.setBalanceOf(account, tokenState.balanceOf(account).add(amount)); emitTransfer(address(this), account, amount); totalSupply = totalSupply.add(amount); } function onlyAllowFromBridge() internal view { require(msg.sender == oikosBridge(), "Can only be invoked by bridge"); } /* ========== MODIFIERS =================== */ modifier onlyBridge() { onlyAllowFromBridge(); _; } /* ========== VIEWS ======================= */ function resolverAddressesRequired() public view returns (bytes32[] memory addresses) { bytes32[] memory existingAddresses = BaseOikos.resolverAddressesRequired(); bytes32[] memory newAddresses = new bytes32[](1); newAddresses[0] = CONTRACT_SYNTHETIX_BRIDGE; addresses = combineArrays(existingAddresses, newAddresses); } function oikosBridge() internal view returns (address) { return requireAndGetAddress(CONTRACT_SYNTHETIX_BRIDGE); } /* ========== RESTRICTED FUNCTIONS ========== */ function mintSecondary(address account, uint amount) external onlyBridge { _mintSecondary(account, amount); } function mintSecondaryRewards(uint amount) external onlyBridge { IRewardsDistribution _rewardsDistribution = rewardsDistribution(); _mintSecondary(address(_rewardsDistribution), amount); _rewardsDistribution.distributeRewards(amount); } function burnSecondary(address account, uint amount) external onlyBridge systemActive { tokenState.setBalanceOf(account, tokenState.balanceOf(account).sub(amount)); emitTransfer(account, address(0), amount); totalSupply = totalSupply.sub(amount); } }