Tranche Deposit — call flow (deploy on arrival, then propagate) Agreed design (docs/multichain-plan.md, 'deposit') — the local share is deployed at once · the remainder rides to the hub escorted by Msg A · the hub share is deployed on arrival · other spokes get theirs via SUPPLY. Only share allocation waits for settlement TX 1spoke · user signs TX 2hub · relayer (record + deploy + propagate) TX 3target spoke · relayer (deploy at once) dashed= Socket event (colour = originating tx) · ✂ = tx boundary SPOKE chain (intake) TX 1 — user signs · intake + local share deployed at once ShareToken S/Jonly the Manager mints Whitelist Moduleone per chain · policy per productId 1-2 isValidAddress — 1404 hook 👤user (owner) TrancheVault S/JERC-7540/7575 facade TrancheManager (Spoke) escrow · state machine · share mint/burn CCCP handler directly (ICCCP_Receiver) remainder sent escorted in Msg A CCCP V2 (Spoke) Hooks · Vault · Socket, collectively bridging + messaging · runs poll hands to receiveMessage 1-1 requestDeposit 1-3 requestDeposit onlyVault · moves escrow 1-6 request sends Msg A — remainder escorted MultichainAdapter (Spoke) LocalAllocation cache · local fan-out 1-4 local share deployed split by LocalAllocation(weightsVersion) Adapter_1IAdapter interface Adapter_2IAdapter interface Adapter_3IAdapter interface 1-5 requestSupply ×N spoke-local yield sources — local share deployed at once · the remainder leaves for the hub in the same tx Msg A — deposit request + remainder bridged asset escorted — amount = deposit − local share DEPOSIT_REQ · requestId · amount · tranche · owner · weightsVersion reported Relayers watches Socket events → ⅔+ signatures → submits Poll_Submit{msg, sigs, option} off-chain (tx boundary ✂) HUB chain (Bifrost) TX 2 — relayer signs · record + hub share + propagate to other spokes Investment Pallet ledger — Product · request · NAV · adapter detail recorded Investments Precompile 0x…0201 — called by Valuation only Valuation (Hub) computes the remainder split (targetWeights — hub vs other spokes) Orchestrator (Hub) CCCP handler (ICCCP_Receiver) one global — routes and sends CCCP V2 (Hub) Hooks · Vault · Socket, collectively poll → hands to receiveMessage 2-2 receiveMessage(Msg A · asset escorted) 2-3 planDeposit(remainder) — returns the split 2-4 record_investment_request order_type=1(deposit) · settlement_id recorded 2-5 hub share deployed 2-7 sends SUPPLY other spokes' share · escorted (per spoke) MultichainAdapter (Hub) hub share deployed · valuation aggregated Adapter_1IAdapter interface Adapter_2IAdapter interface Adapter_3IAdapter interface 2-6 requestSupply ×N Asset flow: local share immediately (TX 1) → hub share deployed the moment the remainder lands (TX 2) → other spokes propagated and deployed (TX 3) — only share allocation and pricing wait for settlement other SPOKE chains ×N TX 3 — relayer signs receiveMessage(SUPPLY + asset) → MultichainAdapter uses its own LocalAllocation weights to deploy into local adapters Socket(Msg A · asset) event ✂ 2-1 poll Socket(SUPPLY · asset) ✂