# Yield Distribution

This document explains how coupon distributions work end-to-end — from underlying asset cash flow to USDC in investor wallets. The system uses the ICP Master Ledger for holder snapshots, off-chain calculation for distribution amounts, and batched on-chain USDC transfers for execution.


# Settlement Currency

USDC is the settlement currency throughout the product lifecycle: subscription, coupon distributions, and principal redemption. This eliminates fiat off-ramp friction for crypto-native investors while maintaining the regulated character of the underlying instrument. The stablecoin layer does not change the legal or regulatory character of the underlying bond.


# Distribution Schedule

Distributions are contractually scheduled per bond documentation — quarterly, semi-annual, or annual, depending on the product. The schedule is fixed at issuance and disclosed in the Pricing Supplement. There is no issuer discretion over timing.


# Holder Snapshot

At the scheduled distribution date, the ICP Master Ledger get_holder_snapshot(token_id, timestamp) function captures all verified token holders and their balances at a specific point in time. The snapshot is the authoritative basis for all distribution calculations.

The snapshot resolves race conditions from transfers near the distribution date. Any transfer that settles after the snapshot timestamp is excluded from that distribution period.

For the holder snapshot data model, see master-ledger.md.


# Calculation

Total distributable amount — derived from underlying asset cash flow, net of fees and SPV costs — is divided proportionally by each holder's balance at snapshot time.

Calculation is performed off-chain by Tortuga/Estating, not by smart contract. The smart contract executes the distribution; it does not compute it. This separation ensures that complex fee structures, withholding calculations, and multi-tranche waterfalls can be handled without on-chain computation constraints.


# On-Chain Execution

A batched USDC transfer transaction is constructed containing one transfer call per eligible holder: from the distribution wallet to each verified holder address. The batch is submitted to EVM. All eligible holders receive USDC in a single block.

The distribution transaction hash is recorded in the ICP Master Ledger as a YieldPayment transaction, linking the distribution event to the specific on-chain execution for audit purposes.


# Multi-Chain Distribution

If an investor holds tokens on multiple chains (following a cross-chain transfer), distributions are sent to the wallet on the chain where the tokens are currently held. The Master Ledger balance tracker maintains chain-specific positions. Distributions are calculated per-chain based on the snapshot.

For multi-chain token transfer mechanics, see cross-chain-ops.md.


# Distribution Sequence

sequenceDiagram
    participant ASSET as Underlying Asset
    participant SPV as Luxembourg SPV
    participant PA as Paying Agent
    participant DW as Distribution Wallet
    participant ML as ICP Master Ledger
    participant CALC as Off-Chain Calculation
    participant EVM as EVM (Plume / Base / Canton)

    ASSET->>SPV: Cash flow received
    SPV->>PA: Funds transferred to paying agent
    PA->>DW: USDC conversion and transfer to distribution wallet

    DW->>ML: get_holder_snapshot(token_id, timestamp)
    ML-->>CALC: Holder balances at snapshot time

    CALC->>CALC: Calculate per-holder distribution amounts
    CALC->>EVM: Submit batched USDC transfer

    EVM-->>DW: Transfer confirmation
    DW->>ML: Record YieldPayment transaction with TX hash