★ Bridge ecrecover checks result ≠ address(0)
Concrete's assessment for RD-F-151 — scored green on the v1.7.0 rubric. The evidence below is the curator's reasoning for this score.
Evidence summary #
[★ CRITICAL] GREEN. LayerZero v2 does NOT use ecrecover for message authentication at the OApp layer. The LZ v2 OAppReceiver.lzReceive() enforces two guards before calling _lzReceive(): (1) OnlyEndpoint: msg.sender must equal the registered LZ endpoint address — only the LZ v2 endpoint contract can invoke lzReceive(); (2) OnlyPeer: _getPeerOrRevert(origin.srcEid) must equal origin.sender — message must originate from the registered peer OApp on the correct source chain. No raw signature verification (ecrecover) occurs at the OApp level. The Wormhole-class ecrecover-zero-address failure mode is structurally absent from LZ v2's endpoint-auth model. ShareDistributor._lzReceive() only dispatches on MSG_TYPE — no signature check of any kind.
Sources #
- GitHubShareDistributor.sol — no ecrecover in _lzReceive()src/periphery/predeposit/ShareDistributor.sol — _lzReceive() dispatches on uint16 msgType only; no signature verificationretrieved 2026-05-17
- LayerZero v2 OAppReceiver.sol — message auth via endpoint + peer check, no ecrecoverLayerZero-Labs/LayerZero-v2 OAppReceiver.sol — lzReceive() enforces OnlyEndpoint (msg.sender == endpoint) + _getPeerOrRevert(origin.srcEid) == origin.sender; no ecrecover in any pathretrieved 2026-05-17
Methodology #
Determine whether the bridge verifier code rejects `ecrecover` returns of `address(0)`.
See the full factor methodology and distribution across all protocols →