// SPDX-License-Identifier: MIT pragma solidity 0.8.23; import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; /** * @title GovSelfTestVotes * @notice THROWAWAY, ISOLATED ERC20Votes token used ONLY to prove the * AereGovernor + TimelockController machinery is binding end to end. * * It exists solely because the production votes source * (AereStakedGovVotes) mirrors real staking, and real staked power on * chain 2800 is 0 today, so no account can vote through the production * governor yet. This token lets the deployer hold voting power in a * self-contained self-test that touches NO real protocol contract. * * Open mint on purpose: it is a disposable test artifact with no value. * Default block-number clock (matches the production governor). */ contract GovSelfTestVotes is ERC20Votes { constructor() ERC20("Gov Self-Test Votes", "stVOTE") ERC20Permit("Gov Self-Test Votes") {} function mint(address to, uint256 amount) external { _mint(to, amount); } } /** * @title GovSelfTestTarget * @notice THROWAWAY Ownable target. After its ownership is transferred to the * self-test TimelockController, only a passed-and-executed governance * proposal can change `value`, proving the governor genuinely binds an * owned contract. No real contract is involved. */ contract GovSelfTestTarget is Ownable { uint256 public value; event ValueSet(uint256 indexed newValue); function setValue(uint256 newValue) external onlyOwner { value = newValue; emit ValueSet(newValue); } }