Units, Approvals, Native Assets, and Errors
Units
| Field | Encoding |
|---|---|
Settlement Amount.amount | Token base units |
Settlement Allocation.minAmount | Token base units |
Settlement Allocation.allocation | Six decimals; 1_000_000 = 100% |
| Quote amount, allocation, reserve, scale, and price fields | Packed Multiswap Float in ABI int256 |
| UI allocation before quote conversion | 18-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
| Error | Typical cause |
|---|---|
InvalidTrade | Empty side, repeated token across incompatible legs, or invalid route shape |
InvalidAllocations | Receive allocations are zero, malformed, or do not form a complete allocation |
DuplicateToken | The same token appears more than once where uniqueness is required |
InvalidToken | Token does not have the required role in the selected pool |
ZeroReserve / ZeroScale / ZeroTargetScale | Incomplete or inactive pool state |
InsufficientScale | Requested receive value exceeds protected scale capacity |
NoSolution / DidNotConverge | Quote solver could not produce a valid result in its domain |
Common intent failures
| Error | Typical cause |
|---|---|
IntentExpired | Block timestamp is later than the signed deadline |
InvalidIntentExecutor | Caller does not match a restricted executor |
InvalidIntentNonce | Nonce has already been consumed or is not current |
InvalidIntentPayer / InvalidIntentRecipient | A required party is the zero address |
InvalidIntentSignature | Wrong 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
quoteMultiswapForSettlementfor execution previews. - Preserve pay and receive ordering between quote, signature, and settlement.
- Convert
Floatand token units explicitly. - Apply per-asset minimum receive protection.
- Simulate before submitting when the RPC supports it.