Tranche Rebalance — call flow (new weights → funds move) Trigger = set_multichain_adapters / set_adapters (full replacement · the 10,000 sum is checked atomically) · the user ledger and shares do not change — only fund capital moves · slices sync at once via SYNC_ALLOCATION · asset movement starts immediately TX 1hub · ProductAdmin signs TX 2overweight spoke · relayer TX 3hub · relayer TX 4underweight spoke · relayer dashed= Socket event (colour = originating tx) · ✂ = tx boundary HUB chain (Bifrost) TX 1 — ProductAdmin signs · new weights fixed + sourcing ordered 👤ProductAdmin TrancheSystem 0x…0200 Precompile set_multichain_adapters — full replacement Valuation (Hub) planRebalance (view) computes drift and amounts Orchestrator (Hub) one global — routes and sends CCCP V2 (Hub) Hooks · Vault · Socket, collectively Investment Pallet new weights, source of truth (two levels) rebalance plan (from planRebalance) overweight → WITHDRAW (asset 0 · adapters, amounts) underweight → SUPPLY once gathered (escorted) the hub share is sourced and deployed locally at once SYNC_ALLOCATION goes to every spoke at once (slices) 1-1 set_multichain_adapters new weights — sum checked against 10,000 1-2 rebalance starts 1-3 planRebalance 1-4 request sends WITHDRAW ×N Relayers watches Socket events → ⅔+ signatures → submits Poll_Submit{msg, sigs, option} off-chain (tx boundary ✂) overweight SPOKE chain (weight down) TX 2 — relayer signs · sourcing starts → gathers at hub case A — same-chain rebalance nothing crosses chains — all local: ① requestWithdraw (adapters going down) ② isReady → receive ③ requestSupply (adapters going up) the new slice arrives at once via SYNC_ALLOCATION MultichainAdapter (Spoke) sources per the named adapter and amount CCCP V2 (Spoke) poll → hands to receiveMessage outbound via request 2-2 receiveMessage(WITHDRAW) 2-4 sends NET_BRIDGE what has been received · asset escorted Adapter_1weight down — source Adapter_2weight down — source 2-3 requestWithdraw ×N ASYNC ones issue a ticket → receive once isReady overweight chain's yield sources — proceeds gather at the hub via NET_BRIDGE HUB — redeploy TX 3 — relayer signs receiveMessage(NET_BRIDGE + asset) → sends SUPPLY to underweight chains (asset escorted) if the hub is underweight it deploys locally at once underweight SPOKE chain (weight up) TX 4 — relayer signs · deployed on arrival MultichainAdapter (Spoke) split by LocalAllocation weights · requestSupply ×N CCCP V2 (Spoke) poll → hands to receiveMessage 4-2 receiveMessage(SUPPLY + asset) → deployed on arrival The user ledger and shares do not change — a rebalance moves only fund capital · tags are reused: WITHDRAW → NET_BRIDGE → SUPPLY (no new tag) · ASYNC lead time is absorbed by starting immediately Socket(WITHDRAW) ✂ 2-1 poll Socket(NET_BRIDGE · asset) ✂ Socket(SUPPLY · asset) → 4-1 poll ✂