Skip to main content
Composer deploys a small set of contracts on every supported EVM chain. Your wallet sends the compiled transaction to your per-user proxy (or, on the proxy’s first use, to the ProxyFactory, which deploys the proxy and runs the flow atomically). The proxy delegatecalls the VM — the shared logic contract — so the flow executes in your proxy’s own balance and storage context. The remaining contracts support arithmetic and invariant checks during execution.
Verify before you hardcode. The most reliable source is the POST /compose response itself: userProxy is your per-user proxy, and transactionRequest.to is that same proxy once it’s deployed (or the ProxyFactory on first use). These always match the deployment that produced your calldata. Treat the tables below as a convenience snapshot.

Canonical (production)

Served from https://composer.li.quest. These addresses are the same on every supported chain.

Addresses from the compile response

You rarely need to hardcode anything: every POST /compose response carries the two addresses an integration actually touches, and they always match the deployment that produced the calldata.
The remaining contracts (arithmetic processor, invariant checker, flashloan registry, adapter) are wired in by the compiler during lowering and don’t need to be referenced from integration code.