Skip to content

Commit

Permalink
Allow Governor + CompoundTimelock to manage native tokens (eth) in an…
Browse files Browse the repository at this point in the history
…d 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)
  • Loading branch information
Amxx committed Sep 17, 2021
1 parent 296223f commit 01f2ff1
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 5 deletions.
7 changes: 7 additions & 0 deletions contracts/governance/Governor.sol
Expand Up @@ -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}.
*/
Expand Down
3 changes: 2 additions & 1 deletion contracts/governance/extensions/GovernorTimelockCompound.sol
Expand Up @@ -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);
}
}

Expand Down
2 changes: 0 additions & 2 deletions contracts/mocks/GovernorCompMock.sol
Expand Up @@ -20,8 +20,6 @@ contract GovernorCompMock is Governor, GovernorVotesComp, GovernorCountingSimple
_votingPeriod = votingPeriod_;
}

receive() external payable {}

function votingDelay() public view override returns (uint256) {
return _votingDelay;
}
Expand Down
2 changes: 0 additions & 2 deletions contracts/mocks/GovernorMock.sol
Expand Up @@ -21,8 +21,6 @@ contract GovernorMock is Governor, GovernorVotesQuorumFraction, GovernorCounting
_votingPeriod = votingPeriod_;
}

receive() external payable {}

function votingDelay() public view override returns (uint256) {
return _votingDelay;
}
Expand Down

0 comments on commit 01f2ff1

Please sign in to comment.