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.
121 lines
4.4 KiB
Solidity
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);
|
|
}
|
|
}
|