Skip to main content
In each MandateOutput of an intent, you can specify mandateOutput.call as calldata that is delivered to mandateOutput.recipient. The recipient will receive the tokens first, after which outputFilled(bytes32 token, uint256 amount, bytes executionData) will be called on the recipient. When adding an external call, keep the following points in mind:
  • For each individual output, tokens will be delivered before the call is executed. This means that if an intent has two outputs, token 1 or 2 will be sent and the call executed, then token 2 or 1 will be sent and the call executed.
  • If the external call fails, the intent cannot be filled.
  • The external call will fail if the recipient contract cannot receive outputFilled or if it is an externally owned account (EOA).
  • Intents with multiple outputs across different chains should not be filled by solvers if outputs on chains other than the first (output0) include calldata.

Arbitrary Calls

Since the external call is wrapped in outputFilled, arbitrary contracts cannot be called at the top level. Instead, a batching contract or a Single-Call Architecture (SCA) should be used to wrap the call. If you require these features, LI.FI provides both an SCA implementation and a batch calling contract.