Internal validator proposals

There are four special internal validator proposals responsible for managing the validator-related storage: ChangeSettings, ChangeBalances, MonthlyWithdraw, and OffchainProposal. These proposals have the privilege to skip the first voting stage on the GovPool contract and can be directly created on the GovValidators contract. Take a look at the example below, where we create an internal proposal to modify GovValidatorsToken balances.

function validatorsInternalProposals(IGovPool govPool) external {
    (, , address govValidatorsAddress, , ) = govPool.getHelperContracts();
    IGovValidators govValidators = IGovValidators(govValidatorsAddress);

    uint256[] memory balances = new uint256[](2);
    balances[0] = 10 ether;
    balances[1] = 20 ether;

    address[] memory validators = new address[](2);
    validators[0] = address(1);
    validators[1] = address(2);

    govValidators.createInternalProposal(
        IGovValidators.ProposalType.ChangeBalances,
        "Change Validators balances",
        abi.encodeWithSelector(IGovValidators.changeBalances.selector, balances, validators)
    );

    uint256 proposalId = GovValidators(payable(govValidatorsAddress))
        .latestInternalProposalId();

    // ...
}

Once you have the internal proposal ID, you can invoke the voteInternalProposal, executeInternalProposal, and getProposalState methods on the GovValidators contract, similar to what was done on the GovPool contract.

Last updated