Tranche Deposit Approval — settle cycle (collect → fix → allocate shares) Deposit and redeem approval run in the same settle batch — this diagram is the deposit side · nothing moves here (deployment already happened at request time) · CCCP V2 = Hooks + Vault + Socket TX 1hub · runtime auto-run (Auto Pilot) TX 2spoke · relayer signs TX 3hub · relayer signs TX 4spoke · relayer signs dashed= Socket event (colour = originating tx) · ✂ = tx boundary SPOKE chain TX 4 — relayer signs · shares allocated TX 2 — relayer signs · collect spoke chain NAV TrancheManager (Spoke) escrow · state machine the 7540 claim is fixed by the settle result CCCP V2 (Spoke) Hooks · Vault · Socket, collectively registers Socket request · runs poll hands to receiveMessage 4-3 receiveMessage(Msg E) → distributeShares — shares issued settle fixed · then the user claims: deposit/mint (local, any time) telling the IDs apart requestId — one user request (deposit or redeem), issued by the Manager settlementId — the settlement batch · +1 on each success (epoch is adapter-local wording) deposits and redeems settle together under one settlementId separate from the CCCP socket req_id{chain, round_id, sequence} MultichainAdapter (Spoke) aggregates adapter valuations 2-2 receiveMessage(Msg C) → collectEachNAV 2-4 responseNAV → sends Msg D Adapter_1IAdapter interface Adapter_2IAdapter interface Adapter_3IAdapter interface 2-3 requestNAV ×N view aggregation spoke-local yield sources — valuing is a view call, so nothing moves · reward tokens are swapped to the base asset by the adapter at settlement and held HUB chain (Bifrost) TX 1 — runtime auto-run · collect hub chain NAV TX 3 — relayer signs · NAV fixed · approval recorded 1-5 request sends Msg C 3-2 receiveMessage(Msg D) → responseNAV 4-1 approveShares → sends Msg E (allocation) Investment Pallet ledger — Product · request · NAV · adapter detail recorded Investments Precompile 0x…0201 — called by Valuation only Valuation (Hub) core logic — gathers chain NAV waterfall · share price fixed one per product · calls record_* Orchestrator (Hub) CCCP handler (ICCCP_Receiver) one global — routes and sends recording calls belong to Valuation CCCP V2 (Hub) Hooks · Vault · Socket, collectively poll → hands to receiveMessage outbound via request 3-3 settle(settlementId, chainNavs[]) exclude pending → waterfall → share price fixed 3-4 record_adapter_valuations · record_product_nav · record_investment_approval settlement_id +1 1-2 collectEachNAV 1-4 responseNAV Auto Pilot Pallet runtime triggers once per settle period 1-1 tryUpdateNAV — settle trigger MultichainAdapter (Hub) aggregates hub adapter valuations Adapter_1IAdapter interface Adapter_2IAdapter interface Adapter_3IAdapter interface 1-3 requestNAV ×N — view aggregation hub yield sources — valuing is a view call, so nothing moves · reward tokens are swapped to the base asset by the adapter at settlement and held Msg E — SETTLE_DISTRIBUTE (combined) requestIds[] · owners[] · shares[] slice sync is separate — SYNC_ALLOCATION Relayers watches Socket events → ⅔+ signatures → submits Poll_Submit{msg, sigs, option} off-chain (tx boundary ✂) Msg D — chain NAV reply NAV_RESPONSE · settlementId · chainNav (observed chain NAV) + AdapterValuation[] detail attached Msg C — collect chain NAV COLLECT_NAV · settlementId 2-1 poll 4-2 poll Socket(Msg D) event ✂ 3-1 poll Socket(Msg C) event ✂ Socket(Msg E) event ✂