Allow Governor + CompoundTimelock to manage native tokens (eth) in and out of the timelock contract. (#2849)
* Change GovernorTimelockCompound to support ETH in Timelock * refactor compound timelock module * Allow governor to receive ETH is executor == address(this)
This commit is contained in:
@ -55,6 +55,13 @@ abstract contract Governor is Context, ERC165, EIP712, IGovernor {
|
||||
_name = name_;
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev Function to receive ETH that will be handled by the governor (disabled if executor is a third party contract)
|
||||
*/
|
||||
receive() external payable virtual {
|
||||
require(_executor() == address(this));
|
||||
}
|
||||
|
||||
/**
|
||||
* @dev See {IERC165-supportsInterface}.
|
||||
*/
|
||||
|
||||
@ -177,8 +177,9 @@ abstract contract GovernorTimelockCompound is IGovernorTimelock, Governor {
|
||||
) internal virtual override {
|
||||
uint256 eta = proposalEta(proposalId);
|
||||
require(eta > 0, "GovernorTimelockCompound: proposal not yet queued");
|
||||
Address.sendValue(payable(_timelock), msg.value);
|
||||
for (uint256 i = 0; i < targets.length; ++i) {
|
||||
_timelock.executeTransaction{value: values[i]}(targets[i], values[i], "", calldatas[i], eta);
|
||||
_timelock.executeTransaction(targets[i], values[i], "", calldatas[i], eta);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -20,8 +20,6 @@ contract GovernorCompMock is Governor, GovernorVotesComp, GovernorCountingSimple
|
||||
_votingPeriod = votingPeriod_;
|
||||
}
|
||||
|
||||
receive() external payable {}
|
||||
|
||||
function votingDelay() public view override returns (uint256) {
|
||||
return _votingDelay;
|
||||
}
|
||||
|
||||
@ -21,8 +21,6 @@ contract GovernorMock is Governor, GovernorVotesQuorumFraction, GovernorCounting
|
||||
_votingPeriod = votingPeriod_;
|
||||
}
|
||||
|
||||
receive() external payable {}
|
||||
|
||||
function votingDelay() public view override returns (uint256) {
|
||||
return _votingDelay;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user