Enable transfer ETH from Timelock

Recently, Coinbase transferred the Compound Protocol Timelock a significant amount of ETH in this TX. Currently, due to a quirk in the Governance implementation, it is not possible to send ETH from the Timelock.

On line 147 in Governor Bravo:

timelock.executeTransaction.value(proposal.values[i])(proposal.targets[i], proposal.values[i], proposal.signatures[i], proposal.calldatas[i], proposal.eta);

The entire value of the executed transaction is passed from Governor Bravo to the Timelock (and then subsequently out of the Timelock). This flow of funds has never been used and I propose deprecating it in favor of all ETH value for transactions coming from the Timelock.

I propose fixing this quirk to allow the community to spend ETH in this PR. It implements the new code and extensively tests it in unit testing and fork simulations. There are only minor changes to the solidity: the execute function is no longer payable, and line 147 (as referenced above) no longer sends value.

3 Likes