OverlayerWrapCore._credit() always decrements totalBridgedOut, even on non-hub destination chains. On a fresh non-hub deployment, totalBridgedOut starts at 0, so the first inbound LayerZero credit underflows and reverts with panic 0x11. The source-side _debit() burn has already happened, so the user's bridged funds are left locked.
A non-hub destination cannot bootstrap totalBridgedOut locally because mint() is restricted to the hub chain, and retrying the same inbound credit keeps hitting the same underflow. That means the first inbound transfer into a fresh non-hub destination remains stuck.
The root cause is the mismatch between the source and destination accounting paths in OverlayerWrapCore.sol:
On a fresh non-hub destination:
The repo docs and deployment scripts describe separate OverlayerWrap deployments across Sepolia networks, so a fresh non-hub destination is a normal path, not an artificial setup.
You can validate this locally with the attached PoC.
What to check in code:
Then run from the repo root: npx hardhat test --config hardhat.local.config.ts test/SecurityBridge.ts
Expected result:
Passing tests:
Those tests show: