177 lines
5.3 KiB
Solidity
177 lines
5.3 KiB
Solidity
// SPDX-License-Identifier: PROPRIETARY
|
||
// Copyright (c) 2024-2025 Тарабанов Александр Викторович
|
||
// All rights reserved.
|
||
//
|
||
// This software is proprietary and confidential.
|
||
// Unauthorized copying, modification, or distribution is prohibited.
|
||
//
|
||
// For licensing inquiries: info@hb3-accelerator.com
|
||
// Website: https://hb3-accelerator.com
|
||
// GitHub: https://github.com/HB3-ACCELERATOR
|
||
|
||
// SPDX-License-Identifier: MIT
|
||
pragma solidity ^0.8.20;
|
||
|
||
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";
|
||
|
||
/**
|
||
* @title GovernorContract
|
||
* @dev Контракт Governor для DAO с настраиваемыми параметрами
|
||
*/
|
||
contract GovernorContract is
|
||
Governor,
|
||
GovernorSettings,
|
||
GovernorCountingSimple,
|
||
GovernorVotes,
|
||
GovernorVotesQuorumFraction,
|
||
GovernorTimelockControl
|
||
{
|
||
constructor(
|
||
string memory _name,
|
||
IVotes _token,
|
||
TimelockController _timelock,
|
||
uint48 _votingDelay,
|
||
uint32 _votingPeriod,
|
||
uint256 _proposalThreshold,
|
||
uint256 _quorumPercentage
|
||
)
|
||
Governor(_name)
|
||
GovernorSettings(
|
||
_votingDelay, /* Задержка голосования в блоках */
|
||
_votingPeriod, /* Период голосования в блоках */
|
||
_proposalThreshold /* Порог предложения в wei токенов */
|
||
)
|
||
GovernorVotes(_token)
|
||
GovernorVotesQuorumFraction(_quorumPercentage)
|
||
GovernorTimelockControl(_timelock)
|
||
{}
|
||
|
||
// Функции, которые необходимо переопределить из базовых контрактов
|
||
|
||
function votingDelay()
|
||
public
|
||
view
|
||
override(Governor, GovernorSettings)
|
||
returns (uint256)
|
||
{
|
||
return super.votingDelay();
|
||
}
|
||
|
||
function votingPeriod()
|
||
public
|
||
view
|
||
override(Governor, GovernorSettings)
|
||
returns (uint256)
|
||
{
|
||
return super.votingPeriod();
|
||
}
|
||
|
||
function quorum(uint256 blockNumber)
|
||
public
|
||
view
|
||
override(Governor, GovernorVotesQuorumFraction)
|
||
returns (uint256)
|
||
{
|
||
return super.quorum(blockNumber);
|
||
}
|
||
|
||
function state(uint256 proposalId)
|
||
public
|
||
view
|
||
override(Governor, GovernorTimelockControl)
|
||
returns (ProposalState)
|
||
{
|
||
return super.state(proposalId);
|
||
}
|
||
|
||
function propose(
|
||
address[] memory targets,
|
||
uint256[] memory values,
|
||
bytes[] memory calldatas,
|
||
string memory description
|
||
) public override(Governor) returns (uint256) {
|
||
return super.propose(targets, values, calldatas, description);
|
||
}
|
||
|
||
function proposalThreshold()
|
||
public
|
||
view
|
||
override(Governor, GovernorSettings)
|
||
returns (uint256)
|
||
{
|
||
return super.proposalThreshold();
|
||
}
|
||
|
||
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();
|
||
}
|
||
|
||
/**
|
||
* @dev See {IERC165-supportsInterface}.
|
||
*/
|
||
function supportsInterface(bytes4 interfaceId)
|
||
public
|
||
view
|
||
override(Governor)
|
||
returns (bool)
|
||
{
|
||
return super.supportsInterface(interfaceId);
|
||
}
|
||
|
||
/**
|
||
* @dev Функция для определения, требуется ли постановка предложения в очередь
|
||
*/
|
||
function proposalNeedsQueuing(uint256 proposalId)
|
||
public
|
||
view
|
||
override(Governor, GovernorTimelockControl)
|
||
returns (bool)
|
||
{
|
||
return super.proposalNeedsQueuing(proposalId);
|
||
}
|
||
|
||
/**
|
||
* @dev Функция для постановки операций в очередь
|
||
*/
|
||
function _queueOperations(
|
||
uint256 proposalId,
|
||
address[] memory targets,
|
||
uint256[] memory values,
|
||
bytes[] memory calldatas,
|
||
bytes32 descriptionHash
|
||
) internal override(Governor, GovernorTimelockControl) returns (uint48) {
|
||
return super._queueOperations(proposalId, targets, values, calldatas, descriptionHash);
|
||
}
|
||
|
||
/**
|
||
* @dev Функция для выполнения операций
|
||
*/
|
||
function _executeOperations(
|
||
uint256 proposalId,
|
||
address[] memory targets,
|
||
uint256[] memory values,
|
||
bytes[] memory calldatas,
|
||
bytes32 descriptionHash
|
||
) internal override(Governor, GovernorTimelockControl) {
|
||
super._executeOperations(proposalId, targets, values, calldatas, descriptionHash);
|
||
}
|
||
} |