pragma solidity ^0.5.16; import "./LegacyOwned.sol"; contract LegacyTokenState is LegacyOwned { // the address of the contract that can modify balances and allowances // this can only be changed by the owner of this contract address public associatedContract; // ERC20 fields. mapping(address => uint) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; constructor(address _owner, address _associatedContract) public LegacyOwned(_owner) { associatedContract = _associatedContract; emit AssociatedContractUpdated(_associatedContract); } /* ========== SETTERS ========== */ // Change the associated contract to a new address function setAssociatedContract(address _associatedContract) external onlyOwner { associatedContract = _associatedContract; emit AssociatedContractUpdated(_associatedContract); } function setAllowance( address tokenOwner, address spender, uint value ) external onlyAssociatedContract { allowance[tokenOwner][spender] = value; } function setBalanceOf(address account, uint value) external onlyAssociatedContract { balanceOf[account] = value; } /* ========== MODIFIERS ========== */ modifier onlyAssociatedContract { require(msg.sender == associatedContract); _; } /* ========== EVENTS ========== */ event AssociatedContractUpdated(address _associatedContract); }