**Status:** route-routes.ts uses constant `ETH_TO_TEZOS_PROVIDER = 'Wrap Protocol'` (no "TBD"). To make provider dynamic, use `eth2tz[0]?.provider ?? 'Wrap Protocol'` when loading from bridge-capability-matrix.
1. In [route-routes.ts](../../multi-chain-execution/src/api/route-routes.ts): Currently uses `ETH_TO_TEZOS_PROVIDER` constant; optional: replace with `eth2tz[0]?.provider ?? 'Wrap Protocol'` when matrix is queried
2. In [route-planner.service.ts](../../dbis_core/src/core/defi/tezos-usdtz/route-planner.service.ts): Use `getCandidateBridgesForPlanning` (already done) — verify it returns a provider when one is active
3. When no active bridge: return clear error, e.g. `"No active Ethereum→Tezos bridge; check bridge-capability-matrix"`
4. Add aggregator: call all providers, pick best quote
5. Handle failures: fallback to next provider or 1:1 with warning
---
### P2-2: Integrate Chain138 swap quotes (EnhancedSwapRouter/1inch) in route planner
**Why:** First-hop swap (asset→cUSDC) has no real quote.
**Steps:**
1. In route planner, detect when `source_asset !== cUSDC` (or cUSDT)
2. Call existing services:
- **Option A:** [smom-dbis-138/orchestration/bridge/quote-service.ts](../../smom-dbis-138/orchestration/bridge/quote-service.ts) — if it exposes swap quotes
- **Option B:** [alltra-lifi-settlement](../../alltra-lifi-settlement) — 1inch/ParaSwap/0x (Chain138 may need custom chain config)
- **Option C:** Direct 1inch API — `https://api.1inch.dev/swap/v5.2/138/quote`
3. Add `getChain138SwapQuote(sourceAsset, amount, targetAsset)` in route planner or shared service
4. Populate hop 1 `amount_out`, `min_amount_out`, `estimated_fees` from quote
5. When source is already cUSDC: skip swap or use 1:1
---
### P2-3: Integrate real CCIP fee estimation in route planner
**Why:** Bridge fees are currently `"0"`.
**Steps:**
1. Locate CCIP fee logic:
- [smom-dbis-138/services/relay](../../smom-dbis-138/services/relay) or CCIP router contract
**Why:** TezosAdapter `sendTransaction` currently throws.
**Steps:**
1. Add `@taquito/taquito` to multi-chain-execution
2. In [adapter-tezos.ts](../../multi-chain-execution/src/chain-adapters/adapter-tezos.ts):
- Accept signed operation bytes (hex or Uint8Array)
- Use `TezosToolkit` + `rpc.injectOperation(signedBytes)` or direct `fetch('https://mainnet.api.tez.ie/injection/operation', { method: 'POST', body: ... })`
3. Return `{ hash, from, nonce }` — Tezos op hash as `hash`
4. For MVP: support pre-signed payload from external signer; in-house signing can come later
---
### P3-2: Map RoutePlan hops to TRPE/EO execution steps
**Why:** Route planner outputs 4 hops; TRPE/EO use 2-step message_send/receive.
**Steps:**
1. Extend TRPE to accept optional `route_plan` in IntentRequest
2. When `route_plan` present:
- Build `PlannedStep[]` from `route_plan.hops` (one step per hop)
- Set `step_type` from hop `action` (SWAP→swap, BRIDGE→bridge, etc.)
- Set `chain_id` from hop `chain` (CHAIN138→138, HUB_EVM→1, TEZOS→1729)
3. EO: when executing, for each step call the appropriate adapter (138, 1, 1729)
4. For BRIDGE steps: delegate to bridge-specific execution (CCIP, ETH→Tezos bridge) — may need `BridgeExecutor` abstraction
- Validate in route planner: all hop protocols/addresses must be allowlisted
2.**Slippage caps:** Enforce `max_slippage_bps` in quotes; reject routes exceeding cap
3.**Approval reuse:** For ERC-20 approvals, use `approve(spender, amount)` with exact amount; after swap/bridge, call `approve(spender, 0)` or document pattern
4.**Tezos FA verification:** Before transfer, optionally verify USDtz contract has expected entrypoints via TzKT
---
### P4-4: EO production env checks
**Why:** Placeholder wallet and placeholder tx hashes must not be used in production.
**Steps:**
1. Set `WALLET_ADDRESS` for the operational hot wallet
2. Set `SIGNER_ENABLED=true` when real signing is active — EO will throw if `WALLET_ADDRESS` is unset
3. Replace placeholder tx hashes with real `adapter.sendTransaction` when signer is integrated
4. See [execution-orchestrator.ts](../../multi-chain-execution/src/eo/execution-orchestrator.ts) for env usage