srcUA
to the UA at the destination dstUA
. Once the message is received by dstUA
, the message is considered delivered (transitioning from INFLIGHT
to either SUCCESS
or STORED
)dstUA
success OK()
A2: dstUA
fails with caught error/exceptiondstUA
fails with uncaught error/exceptiondstUA
is expected to store the message in their contract to be retried (LayerZero will not store any successfully delivered messages). dstUA
is expected to monitor and retry STORED
messages on behalf of its users. dstUA
is expected to gracefully handle all errors/exceptions when receiving a message, and any uncaught errors/exceptions (including out-of-gas) will cause the message to transition into STORED
. A STORED
message will block the delivery of any future message from srcUA
to all dstUA
on the same destination chain and can be retried until the message becomes SUCCESS
. dstUA
should implement a handler to transition the stored message from STORED
to SUCCESS
. If a bug in dstUA
contract results in an unrecoverable error/exception, LayerZero provides a last-resort interface to force resume message delivery, only by the dstUA
contract. srcUA
-> dstChain
. In other words, the message order nonce is shared by all `dstUA` on the same dstChain
. That's why a STORED
message blocks the message pathway from srcUA
to all dstUA
on the same destination chain. If it isn't necessary to preserve the sequential nonce property for a particular dstUA
the sender must add the nonce into the payload and handle it end-to-end within the UA. UA can implement a non-blocking pattern in their contract code.