As mentioned in the Message Ordering section, the Endpoint will catch any unhandled error/exception from the downstream UA and block the message queue from the source contract at the source chain to all destination contracts at the destination chain, until the stored message has been retried successfully.
However, UA can write a nonblocking receiver as a proxy layer to try-catch all errors/exceptions locally for future retry so that the message queue at the destination LayerZero Endpoint will never be blocked. We provide a NonblockingLzApp abstract contract as a template contract for UAs to build on.
UAs simply need to inherit the class and override the _LzReceive internal function.
Be sure to
setTrustedRemote()to enable inbound communication on all contracts!