Metagovernance
function metagovernanceProposal(IGovPool masterGovPool, IGovPool slaveGovPool) external {
(, address masterUserKeeperAddress, , , ) = masterGovPool.getHelperContracts();
address tokenAddress = IGovUserKeeper(masterUserKeeperAddress).tokenAddress();
require(tokenAddress != address(0), "Zero token");
uint256 proposalId = 1;
uint256 amount = 10 ether;
uint256[] memory nftIds = new uint256[](0);
require(
IERC20(tokenAddress).balanceOf(address(slaveGovPool)) >= amount,
"Insufficient balance"
);
require(
masterGovPool.getProposalState(proposalId) == IGovPool.ProposalState.Voting,
"Not voting state"
);
IGovPool.ProposalAction[] memory actionsFor = new IGovPool.ProposalAction[](3);
IGovPool.ProposalAction[] memory actionsAgainst = new IGovPool.ProposalAction[](3);
actionsFor[0] = actionsAgainst[0] = IGovPool.ProposalAction({
executor: tokenAddress,
value: 0,
data: abi.encodeWithSelector(IERC20.approve.selector, masterUserKeeperAddress, amount)
});
actionsFor[1] = actionsAgainst[1] = IGovPool.ProposalAction({
executor: address(masterGovPool),
value: 0,
data: abi.encodeWithSelector(IGovPool.deposit.selector, amount, nftIds)
});
/// @dev vote for the proposal in the master DAO
actionsFor[2] = IGovPool.ProposalAction({
executor: address(masterGovPool),
value: 0,
data: abi.encodeWithSelector(IGovPool.vote.selector, proposalId, true, amount, nftIds)
});
/// @dev vote against the proposal in the master DAO
actionsAgainst[2] = IGovPool.ProposalAction({
executor: address(masterGovPool),
value: 0,
data: abi.encodeWithSelector(IGovPool.vote.selector, proposalId, false, amount, nftIds)
});
slaveGovPool.createProposal("Metagovernance proposal", actionsFor, actionsAgainst);
}Last updated

