StartupGovernor

Git Source

Inherits: MezzGovernor, MezzEIP712, NoncesUpgradeable, IStartupGovernor

Author: Daniel Yamagata

A governance contract that enables the execution of arbitrary transactions by a super-majority of a treasury's signers. A super majority is counted as two-thirds of the signers rounded upwards. Below is a table with a few examples.

The execution of transactions requires an arbitrary deadline. If this deadline passes, the transaction will revert even if provided the correct number of signatures.

State Variables

EXECUTE_TYPEHASH

bytes32 public constant EXECUTE_TYPEHASH =
    keccak256("Execute(address target,uint256 value,bytes data,uint256 deadline,uint256 nonce)");

Functions

constructor

constructor(address _mezzHub, address _mezzMigrator) MezzGovernor(_mezzHub, _mezzMigrator);

init

Intializes the Governor's state

function init(address initTreasury, bytes memory) external virtual override initializer;

Parameters

__Startup_Governor_init

The 'params' argument is maintained in case future versions require additional initialization parameters

function __Startup_Governor_init(address initTreasury, bytes memory) internal virtual onlyInitializing;

executeTx

Executes an arbitrary transaction. Requires a super majority of board members to sign off

Signatures must be packed in ascending order of the public addresses of the signers and must be packed into a single variable.

function executeTx(address target, uint256 value, bytes memory data, bytes memory signatures, uint256 deadline)
    public
    virtual
    freezable
    returns (bytes memory);

Parameters

Returns

_checkNSignatures

Validates the 'signatures' and the number of required signatures for 'safeCache', '_hash', and '_hashData'

function _checkNSignatures(address safeCache, bytes32 dataHash, bytes memory signatures, uint256 requiredSigs)
    internal
    view
    virtual;

_execute

Executes a call on a given 'target' with 'data' and 'value'. Reverts if the call fails or the target's code length is zero

function _execute(address target, uint256 value, bytes memory data) internal virtual returns (bytes memory);

getExecuteTransactionHash

Returns the transaction hash of the encoded execute data.

This hash is the one to be signed by a private key. Signatures should then be packed in ascending order by the public keys of the owners when calling executeTx()

function getExecuteTransactionHash(DataTypes.StartupGovernorExecute memory execute)
    public
    view
    virtual
    returns (bytes32);

Parameters

encodeExecuteData

Encodes a StartupGovernorExecute struct hash following the EIP-191 signed typed data standard

Reference: https://eips.ethereum.org/EIPS/eip-191

function encodeExecuteData(DataTypes.StartupGovernorExecute memory execute)
    public
    view
    virtual
    returns (bytes memory);

Parameters

getExecuteStructHash

Returns the hash of a StartupGovernorExecute struct following the EIP-712 encoding standards

Reference: https://eips.ethereum.org/EIPS/eip-712

function getExecuteStructHash(DataTypes.StartupGovernorExecute memory execute) public view virtual returns (bytes32);

Parameters

coreId

Returns the coreId of the implementation as a bytes32

The core ID is the keccak256 hash of the contract name followed by a version under the following syntax: "mezzanine.coreId.ContractName.vX" For example, the core ID of the 2nd version of the Treasury would be the following: keccak256(abi.encodePacked("mezzanine.coreId.Treasury.v2"))

function coreId() public pure virtual override(Credentialed, ICredentialed) returns (bytes32);

version

Returns the version of the implementation as a uint256

function version() public pure virtual override(Credentialed, ICredentialed) returns (uint256);

onERC721Received

Reference: https://eips.ethereum.org/EIPS/eip-721

function onERC721Received(address, address, uint256, bytes memory) public view virtual returns (bytes4);

onERC1155Received

Reference: https://eips.ethereum.org/EIPS/eip-1155

function onERC1155Received(address, address, uint256, uint256, bytes memory) public view virtual returns (bytes4);

onERC1155BatchReceived

Reference: https://eips.ethereum.org/EIPS/eip-1155

function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory)
    public
    view
    virtual
    returns (bytes4);

supportsInterface

ERC165 support

function supportsInterface(bytes4 interfaceId)
    public
    view
    virtual
    override(MezzEIP712, MezzUUPSUpgradeable, IERC165)
    returns (bool);

Last updated