OpenChainGraph · Explainer compliance control

Who keeps the reserve income and who pays the yield?

White-label stablecoin issuance splits reserve income between the issuer, the platform and the distributors. This page walks through how node 837-issuer-yield-share recomputes that split from aggregate declared values, traces every holder-facing reward back to its payer and its funding source, and flags the one flow the enacted US federal statute prohibits: an issuer paying interest or yield to the coin's holder. Every number below is synthetic; the node reads declared values only and never reaches a chain, a bank or a real agreement.

Presenter mode shows one step per screen. Arrow keys move, A toggles autoplay, Esc exits.
The recompute is arithmetic; the trace is bookkeeping; the verdict is a fact about declared flows. The node never says a deal is lawful. It says who pays whom, and pins the paragraph that makes one specific pattern a review item.
1
Step 1

The deal and its flows

In a white-label arrangement a brand issues a payment stablecoin on infrastructure run by a platform. The coin's reserves earn income; a commercial agreement divides that income. Some arrangements also push rewards to the people who hold the coin.

Reservesdeclared average value issuer share platform share distributor share B2B fee flows holder rewardwho funded it?

The node takes the deal as four declared blocks: a profile (the enacted statutory regime), a period (days plus either a declared reserve income or an average reserve value with an annual yield in basis points), a split (per-party shares in basis points or fixed minor-unit amounts), and a list of holder rewards, each carrying a payer role, a funding source, a value and a conditioning. It reads role labels (issuer, permitted_issuer, foreign_issuer, platform, distributor, custodian), never legal names. A reward payer must be one of those labels, and the three issuer labels all count as the issuer; any other payer label, including an issuer affiliate, is refused rather than read as a non-issuer. Funding and conditioning values outside their short lists are refused too. It reads integer minor units, and integer minor units, never floats.

Who asks at this stepno agent yet
A brand is issuing a stablecoin through a platform. The agreement gives the platform 35% of reserve income and a distributor 25%. If the platform offers holders a rewards programme, which party's economics does the reward actually consume, and who is the payer of record?
2
Step 2

Recompute the income, then the split

If the deal declares a reserve income, that figure is the base. Otherwise the node accrues it: annual yield in basis points applied linearly over the period's days to the declared average reserve value. Shares follow, and one rounding rule governs everything: floor to integer minor units.

income = floor( floor( avg_value × bp / 10000 ) × days / 365 ) share_i = floor( income × share_bp_i / 10000 ) or fixed_minor_i conservation: the floored shares must sum EXACTLY to the recomputed income, otherwise SPLIT_NOT_CONSERVING

Conservation is the integrity check that catches an agreement that silently over-allocates: if the parties' shares add up to more or less than the income the reserves actually produced, the numbers do not describe the same money. A basis-point split must also name the full 10,000 bp. The node reports the allocated sum alongside the income so a reviewer can see the size of any gap rather than a bare boolean.

Who asks at this stepno agent yet
Reserves averaged 2.5 million dollars over 30 days at 4.25% annualised. The split says 40 / 35 / 25 across issuer, platform and distributor. Recompute the income and each share in cents, and tell me whether the split is conservative.
3
Step 3

Trace every holder reward

A holder sees a reward and reasonably asks two different questions: who paid it, and what money funded it. The answers can diverge: a distributor can write the cheque from the issuer's share of reserve income, and that distinction is exactly what the enacted statute turns on.

holder rewardvalue, payer, funding, condition payer = issuerflag: ISSUER_PAID_HOLDER_YIELD payer = distributor, funded from reserve incomeflag: REWARD_FUNDED_FROM_ISSUER_SHARE payer = distributor, funded from own marginno flag; recorded in the trace

Each reward's trace row records the payer role, the funding source, the value, the conditioning, and two booleans: payer_is_issuer and funded_by_issuer_flow. Conditioning (holding, activity, none) is carried as a declared fact. The rows are pinned to the paragraph that the enacted profile implements, so the output carries its own citation.

Who asks at this stepno agent yet
The distributor pays holders a 2% rewards programme but says it is funded from the issuer's share of reserve income, not the distributor's own margin. Under the enacted US stablecoin statute, does the issuer's role in funding that programme change the analysis compared with the distributor funding it from its own margin?
4
Step 4

Verdicts, flags and the worked vectors

Three verdicts, driven only by the trace: an issuer-paid reward yields ISSUER_YIELD_PRESENT; an issuer-funded reward paid by somebody else yields REVIEW; everything else is NO_ISSUER_YIELD. Split defects flag independently. The enacted profile is pinned on every output; the node ships no proposed-legislation profile because no settled bill text was pinnable at build.

synthetic vectorreward payerfundingconditionsplit conservesverdictflags
v1 platform-and-brand splitnonenonenoneyesNO_ISSUER_YIELDnone
v2 issuer-paid holding rewardissuerreserve_incomeholdingyesISSUER_YIELD_PRESENTISSUER_PAID_HOLDER_YIELD
v3 distributor activity rewarddistributordistributor_marginactivityyesNO_ISSUER_YIELDnone
v4 distributor reward, issuer-fundeddistributorreserve_incomeholdingyesREVIEWREWARD_FUNDED_FROM_ISSUER_SHARE
v5 non-conserving splitnonenonenonenoNO_ISSUER_YIELDSPLIT_NOT_CONSERVING
v6 yield-bp reproduces declared incomenonenonenoneyesNO_ISSUER_YIELDnone

All six vectors are synthetic: every value is invented and no real deal terms or named counterparties appear anywhere in the node. A seventh vector refuses an unknown profile: the node ships exactly one profile, the enacted statutory one, and refuses anything else rather than guessing at a regime it has no pinned text for. The statutory prohibition this node implements, with its pinned enrolled text and hash, is carried in the node's cited-clause record: Public Law 119-27 § 4(a)(11), which bars a permitted payment stablecoin issuer from paying a holder any form of interest or yield solely in connection with the holding, use or retention of the coin.

  • Income and shares recompute in integer minor units under the single floor rule; conservation is asserted on every vector, not only the one seeded to fail.
  • Verdict mapping is exhaustive over the declared payer and funding domain: 180 randomised traces all land on the expected verdict.
  • Invalid domains refuse with a reachable refusal branch, never a silent default.
  • Downloads the node's policy mandate as JSON, the same mandate an agent consumes via the node's MCP tool.
    Who asks at this stepagent-ready
    Using check_issuer_reserve_yield_share: a deal declares 31 days of reserve income worth 300,000 cents, split issuer 150,000 / platform 90,000 / distributor 60,000, and one holder reward of 4,000 cents paid by the distributor and funded from reserve income, conditioned on holding. What verdict comes back, which flags fire, and which paragraph does the trace cite?
    5
    Step 5

    Limits and adjacency

    The node states facts about declared flows. It does not read a chain, a bank statement or a contract, and it does not say that any deal is lawful, compliant or enforceable. A REVIEW verdict means the declared inputs cannot resolve the statutory question, so the trace goes to a professional.

    What this node is

    An aggregate recompute: income, per-party shares with conservation, a per-reward payer-and-funding trace, three verdicts, and flags. Every output carries the enacted profile label and the pinned paragraph.

    What this node is not

    It carries no legal opinion, holds no registry of real deals, and reads no chain. It never sees addresses, names or live terms, only the declared aggregates you paste.

    Adjacency: the narrow sibling is the genius_yield check inside the Arc xReserve linter (art-45), which flags a declared yield switch on a configuration, whereas this node recomputes the whole deal income split and traces rewards to payers instead. Reserve composition (what the yielding reserves may consist of) is covered by art-06 and art-275; this node takes the reserve value as declared and never re-derives composition.

    Who asks at this stepno agent yet
    My deal's inputs are aggregate and synthetic. Can this node tell me whether my white-label programme is legal?
    No. It recomputes flows and traces payers, then flags the pattern the enacted statute names. It states facts about declared flows only; take the trace to counsel for the lawfulness question.
    🔒 All inputs are processed locally in your browser. No data is transmitted. Do not enter real personal data. Use synthetic or anonymised inputs only.