# Proposal requiring native coin transfers cannot be executed

InterchainProposalExecutor cannot execute governance proposals whose calls require native coin value, since its execute path is non-payable and the contract lacks a receive function.

- Payout: Contest reward
- Severity: medium
- Program: Axelar Network
- Credited: Jeiwan
- Disclosed: 2023-11-29
- Write-up quality: 6/10
- Original: https://github.com/code-423n4/2023-07-axelar-findings/issues/319
- Library page: https://bugbountylibrary.com/r/c4%3A2023-07-axelar%3AM-04
- Tags: domain:web3 impact:dos kind:contest platform:code4rena sev:medium tech:evm tech:solidity technique:source-review vuln:business-logic vuln:dos

**Target:** InterchainProposalExecutor / AxelarExecutable cross-chain governance executor
**Root cause:** _executeProposal forwards call.value to targets, but the entrypoint AxelarExecutable.execute is non-payable and InterchainProposalExecutor has no receive function, so the contract can never hold native funds to forward.
**Steps:**
1. Deploy/derive InterchainProposalExecutor inheriting AxelarExecutable (non-payable execute, no receive).
2. Submit a proposal whose call has `value > 0`.
3. Attempt execution: `call.target.call{value: call.value}(call.callData)` fails because contract balance is 0 and cannot be funded.
4. Pre-funding is impossible without a receive function; if added, back-running a proposal could consume the funds.
**How found:** Code reading of the execution path: noticed _executeProposal sends call.value but the inherited execute entrypoint is non-payable and no receive function exists, making native-value proposals unexecutable.
**Insight:** When auditing executor/proxy contracts that forward `call.value`, trace whether the entrypoint is payable and whether a receive/fallback exists; a value-forwarding path with no funding path is a functional DoS.
