Revenue distribution: revenue-distributor
real-estate-token::declare_rental_distribution and
mining-rights-token::declare_royalty only record an amount. The distributor
actually pays holders.
- The asset token’s Manager calls
create_distribution(creator, asset_token, payout_token, amount, claim_window_secs, memo). This takes a balance snapshot on the token and escrowsamountof the payout token (for example a USDC SAC). Only the issuer can distribute, because the snapshot needs the token’s Manager auth. - Each holder calls
claim(holder, id)and receivesamount × balance_at_snapshot ÷ supply_at_snapshot. Selling after the snapshot doesn’t forfeit that period’s payout. claim_manyclaims up to 20 periods at once. With a claim window set, the creator canreclaimanything left after the deadline. That includes shares held by contracts that can’t claim, such as an RFQ escrow.
ankara-common. Every fungible template now exposes
snapshot() (Manager), current_snapshot_id(), balance_of_at(id, snapshot) and
total_supply_at(snapshot). A token that never takes a snapshot pays no extra storage.
Secondary liquidity: rfq-market
A single farm, invoice or building token will never have AMM depth. The RFQ market
matches a seller with specific buyers instead:
post_intent: the seller escrowsamountof the RWA token and sets the payment token, a floor price and an expiry.submit_quote: buyers post firm quotes. The quoted price is escrowed, so every quote is fundable.accept_quote: the seller picks one. The asset goes to the buyer and the price, less an optional protocol fee (≤ 5%), goes to the seller, atomically.withdraw_quoterefunds losing quotes.cancel_intentrefunds an unfilled intent. Both stay available while the market is paused.
Land & property titles: disputes, liens, chain of custody
farmland-nft and real-estate-nft gain:
Owners in the custody log are free-form strings, because prior owners usually pre-date
the token. The flags are informational: they don’t block transfers.
Carbon credits: external registry reference
RetirementRecord now has an optional external_registry_id, which links a retirement
to an independent verification body’s record (for example a Verra retirement serial).
Set it at retirement with retire_with_registry_ref(...), or attach it once later with
set_retirement_registry_ref(index, id) (Manager, write-once).
Coupon-bearing instruments
The design decision is recorded inpackages/contracts-stellar/design/coupon-instrument.md.
In short: a new bond-token template, not an invoice-token extension, with coupons
paid through revenue-distributor.