contract ProxyGovernance is GovernanceStorage, Governance {
    // The tag is the string key that is used in the Governance storage mapping.
    string public constant PROXY_GOVERNANCE_TAG = "StarkEx.Proxy.2019.GovernorsInformation";

    /*
      Returns the GovernanceInfoStruct associated with the governance tag.
    */
    function getGovernanceInfo() internal view override returns (GovernanceInfoStruct storage) {
        return governanceInfo[PROXY_GOVERNANCE_TAG];
    }

    function proxyIsGovernor(address testGovernor) external view returns (bool) {
        return isGovernor(testGovernor);
    }

    function proxyNominateNewGovernor(address newGovernor) external {
        nominateNewGovernor(newGovernor);
    }

    function proxyRemoveGovernor(address governorForRemoval) external {
        removeGovernor(governorForRemoval);
    }

    function proxyAcceptGovernance() external {
        acceptGovernance();
    }

    function proxyCancelNomination() external {
        cancelNomination();
    }
}
/*
 Implements Governance for the proxy contract.
 It is a thin wrapper to the Governance contract,
 which is needed so that it can have non-colliding function names,
 and a specific tag (key) to allow unique state storage.
 */
function getGovernanceInfo() internal view override returns (GovernanceInfoStruct storage) {
    return governanceInfo[PROXY_GOVERNANCE_TAG];
}

/*
 Returns the GovernanceInfoStruct associated with the governance tag.
 */