Skip to main content

Units, Approvals, Native Assets, and Errors

Units

FieldEncoding
Settlement Amount.amountToken base units
Settlement Allocation.minAmountToken base units
Settlement Allocation.allocationSix decimals; 1_000_000 = 100%
Quote amount, allocation, reserve, scale, and price fieldsPacked Multiswap Float in ABI int256
UI allocation before quote conversion18-decimal fixed point; 1e18 = 100%

The packed Float uses a signed 72-bit mantissa and signed exponent, normalized to 21 significant decimal digits. Use the canonical bnToFloat, floatToBn, and component helpers from the reference client. Do not treat the ABI int256 as WAD.

Approval target

Approve the Dispatcher, not an installed module.

For signed intents, approval must be owned by payer, not the executor. The executor only supplies gas and any native msg.value.

Native asset sentinel

0xE0092BfAe8c1A1d8CB953ed67bd42A4861E423F9

Use the sentinel in Multiswap structs and attach the exact native pay amount as transaction value.

Common quote failures

ErrorTypical cause
InvalidTradeEmpty side, repeated token across incompatible legs, or invalid route shape
InvalidAllocationsReceive allocations are zero, malformed, or do not form a complete allocation
DuplicateTokenThe same token appears more than once where uniqueness is required
InvalidTokenToken does not have the required role in the selected pool
ZeroReserve / ZeroScale / ZeroTargetScaleIncomplete or inactive pool state
InsufficientScaleRequested receive value exceeds protected scale capacity
NoSolution / DidNotConvergeQuote solver could not produce a valid result in its domain

Common intent failures

ErrorTypical cause
IntentExpiredBlock timestamp is later than the signed deadline
InvalidIntentExecutorCaller does not match a restricted executor
InvalidIntentNonceNonce has already been consumed or is not current
InvalidIntentPayer / InvalidIntentRecipientA required party is the zero address
InvalidIntentSignatureWrong domain, chain, Dispatcher, array order, hashes, or signer

Integration checklist

  • Pin chain ID, Dispatcher, ABI, and contract commit.
  • Discover pools from the Dispatcher and validate initialization.
  • Read financial state at one block.
  • Use quoteMultiswapForSettlement for execution previews.
  • Preserve pay and receive ordering between quote, signature, and settlement.
  • Convert Float and token units explicitly.
  • Apply per-asset minimum receive protection.
  • Simulate before submitting when the RPC supports it.