# Proposals which intend to send native tokens to target addresses can’t be executed

TemporalGovernor lacks receive()/payable, so any queued proposal carrying native value reverts at target.call{value:value}, blocking execution.

- Payout: Audit contest
- Severity: medium
- Program: Moonwell
- Found by: hals
- Disclosed: 2023-10-04
- Write-up quality: 6/10
- Original: https://code4rena.com/reports/2023-07-moonwell#m-09
- Library page: https://bugbountylibrary.com/r/c4%3A2023-07-moonwell%3AM-09
- Tags: area:web3 domain:web3 impact:dos kind:contest platform:code4rena sev:medium tech:evm tech:solidity technique:source-review vuln:business-logic vuln:dos

**Target:** TemporalGovernor governance contract (Solidity/EVM)
**Root cause:** TemporalGovernor has no receive() or payable function, so it cannot hold native balance; _executeProposal forwards value via target.call{value:value}(data) which reverts when the contract balance is insufficient.
**Steps:**
1. Queue a proposal whose decoded vm.payload sets values[0] = 1 ether for a target address.
2. Warp past proposalDelay.
3. Call `governor.executeProposal("")`; the call reverts because the governor holds no ETH to forward.
**How found:** Reading the executeProposal path and noticing the value-forwarding call at line 400-402 while the contract defines no receive()/payable entrypoint; confirmed with a Foundry test adapted from testExecuteSucceeds.
**Insight:** When a governance/executor contract forwards `value` in low-level calls, check whether it can actually receive native tokens (receive/fallback/payable) — otherwise every value-bearing proposal silently bricks.

