@eco-incorp/sauce/recipes. Their values arrive as compile-time defines: the consts are declared with placeholder defaults so each file reads and compiles standalone, and the builders (buildCctpSplitTransfer, buildPlainTransfer) override them per intent. A define replaces the module’s own const of that name and is constant-folded, so a given set of values yields fixed bytecode. This is the opposite design from settle, whose values are runtime arguments so its bytecode stays hash-pinnable.
Both programs are DSL-native with no ABI and no address in the source: USDC resolves to the source chain’s USDC from the token registry, and Cctp.TokenMessenger resolves interface and address from the CCTP protocol descriptor, in call position and in value position (as the approve spender). Declarations are unannotated because the accessor rewrite that resolves them parses plain JavaScript.
Prerequisites
Complete Sauce setup and use the documented SDK and compiler versions. For execution, confirm the target deployment, Pot ownership, balances and Kitchen fee. Simulate the complete transaction and estimate its gas before submitting it.cctp-split
MoveCCTP_AMOUNT in burns capped at CCTP_CHUNK_SIZE: count = amount / chunkSize full-cap burns, then one final burn of the remainder when it is not zero. $2.50 at a $1 cap becomes $1 + $1 + $0.50. One approval for the whole amount; if any burn reverts, the entire source-chain transaction reverts.
cctp-split.sauce.ts
plain-transfer
The no-bridge baseline: moveXFER_AMOUNT USDC to XFER_RECIPIENT in one call. The solver delivers the amount on the destination chain through the normal Eco flow.
plain-transfer.sauce.ts
Build them into intents
CctpTransferParams (from, to, amount, perMessageLimit, recipient, optional maxFeePerChunk, pot, engine, portal, and the remaining fields listed in the reference) and return a BuiltIntent. The CCTP variant is fulfilled locally on the source chain, so the intent’s destination is its source. Reference: recipes, routes.BuiltIntent.
In SDK 0.99.4, these convenience builders do not set a nonzero cook fee or request the token delivery and Executor-to-Pot transfer needed by the program. Their output is not ready to submit to a paid Kitchen. To integrate these programs, load cctpSplitSource() or plainTransferSource() and build the route with explicit execution.value, nativeAmount, tokens and precalls, following Programs as intents.
CCTP burns occur on the source chain. Destination minting is a separate process and is not part of the source transaction’s atomicity.
