aere-contracts/contracts/governance/AereGovernor.sol
Aere Network a13a649b77
Some checks are pending
contracts-ci / Install (lockfile) → compile → full test suite (push) Waiting to run
contracts-ci / PQC known-answer tests (NIST vectors) (push) Waiting to run
contracts-ci / Coverage (scoped, with artifacts) (push) Waiting to run
Initial public release
Aere Network public source. Everything here can be checked against the live
chain (chain id 2800, https://rpc.aere.network).

Scope note, stated up front rather than buried: consensus on chain 2800 is
classical secp256k1 ECDSA QBFT. The post-quantum work in this repository is at
the signature, precompile, account and transport layers. Nothing here makes the
consensus post-quantum, and no document in it should be read as claiming so.
2026-07-20 01:02:37 +03:00

121 lines
4.4 KiB
Solidity

// SPDX-License-Identifier: MIT
pragma solidity 0.8.23;
import "@openzeppelin/contracts/governance/Governor.sol";
import "@openzeppelin/contracts/governance/extensions/GovernorSettings.sol";
import "@openzeppelin/contracts/governance/extensions/GovernorCountingSimple.sol";
import "@openzeppelin/contracts/governance/extensions/GovernorVotes.sol";
import "@openzeppelin/contracts/governance/extensions/GovernorVotesQuorumFraction.sol";
import "@openzeppelin/contracts/governance/extensions/GovernorTimelockControl.sol";
// Ensure TimelockController is compiled so it can be deployed by name.
import "@openzeppelin/contracts/governance/TimelockController.sol";
/**
* @title AereGovernor
* @notice A standard, audit-ready OpenZeppelin Governor for AERE Network.
*
* Unlike the deployed AereGovernanceStaked (which executes via
* address(this).call on opaque data, owns nothing, and reads a
* deprecated staking contract that reports zero stake), this Governor:
* - executes arbitrary (target, value, calldata) batches THROUGH a
* TimelockController with an enforced delay (binding, not theatre);
* - reads a CHECKPOINTED IVotes source (AereStakedGovVotes) so voting
* weight is snapshot-fixed and not flash-stake borrowable;
* - counts votes with the standard For / Against / Abstain module,
* simple-majority pass rule, and a quorum expressed as a fraction of
* the votes token's past total supply.
*
* It is deliberately a plain OZ Governor so it can be externally audited
* against a well-known reference before it is ever granted authority
* over anything of value.
*/
contract AereGovernor is
Governor,
GovernorSettings,
GovernorCountingSimple,
GovernorVotes,
GovernorVotesQuorumFraction,
GovernorTimelockControl
{
constructor(
IVotes votesToken,
TimelockController timelock,
uint256 initialVotingDelay, // in blocks
uint256 initialVotingPeriod, // in blocks
uint256 initialProposalThreshold, // in votes units
uint256 quorumPercent // e.g. 10 = 10% of past total supply
)
Governor("AereGovernor")
GovernorSettings(initialVotingDelay, initialVotingPeriod, initialProposalThreshold)
GovernorVotes(votesToken)
GovernorVotesQuorumFraction(quorumPercent)
GovernorTimelockControl(timelock)
{}
// ---------------------------------------------------------------------
// The functions below are pure Solidity multiple-inheritance overrides.
// ---------------------------------------------------------------------
function votingDelay() public view override(IGovernor, GovernorSettings) returns (uint256) {
return super.votingDelay();
}
function votingPeriod() public view override(IGovernor, GovernorSettings) returns (uint256) {
return super.votingPeriod();
}
function quorum(uint256 timepoint)
public
view
override(IGovernor, GovernorVotesQuorumFraction)
returns (uint256)
{
return super.quorum(timepoint);
}
function proposalThreshold() public view override(Governor, GovernorSettings) returns (uint256) {
return super.proposalThreshold();
}
function state(uint256 proposalId)
public
view
override(Governor, GovernorTimelockControl)
returns (ProposalState)
{
return super.state(proposalId);
}
function _execute(
uint256 proposalId,
address[] memory targets,
uint256[] memory values,
bytes[] memory calldatas,
bytes32 descriptionHash
) internal override(Governor, GovernorTimelockControl) {
super._execute(proposalId, targets, values, calldatas, descriptionHash);
}
function _cancel(
address[] memory targets,
uint256[] memory values,
bytes[] memory calldatas,
bytes32 descriptionHash
) internal override(Governor, GovernorTimelockControl) returns (uint256) {
return super._cancel(targets, values, calldatas, descriptionHash);
}
function _executor() internal view override(Governor, GovernorTimelockControl) returns (address) {
return super._executor();
}
function supportsInterface(bytes4 interfaceId)
public
view
override(Governor, GovernorTimelockControl)
returns (bool)
{
return super.supportsInterface(interfaceId);
}
}