Create and Manage Offers
This chapter describes how sell-side marketplace offers are created, indexed, monitored, and progressed into trading and payment settlement. An offer can be created by an Issuer on the primary market or by an Investor on the secondary market. In both cases, the offer creator acts as the seller of the bond tokens.
Business Flow
-
Offer Initiation:
- The seller decides to place bond tokens on the marketplace.
- On the primary market, the seller is the Issuer offering newly issued bonds to investors.
- On the secondary market, the seller is an Investor or another current bond holder reselling bonds they already own.
- The seller defines the commercial terms of the offer: bond identifier, total amount, lot size, unit price, currency, expiry, and whether buyers may submit counter-offers.
- A buyer can later accept the offer as-is or submit a counter-offer with different price or volume terms.
-
On-Chain Offer Registration:
- The offer is registered on-chain through the marketplace smart contract, represented in the current contract interface as
InterestDiscovery.registerOffer(offer). - The on-chain
OfferInputcontains:isin: bond identifier,totalAmount: total number of bond tokens listed,lot: minimum trade lot,unitPrice: price per unit,currency: payment currency,expiry: offer expiry timestamp,allowCounterOffers: whether negotiated buyer proposals are allowed.
- After successful registration, the smart contract emits
OfferRegistered.
- The offer is registered on-chain through the marketplace smart contract, represented in the current contract interface as
-
Publication, Indexing, and Custody:
- The Indexer observes
OfferRegisteredand loads the full offer detail from the marketplace contract throughgetOffer(offerId). - The indexed
MarketOfferbecomes the offchain read model used by the platform UI and downstream services. - The indexed offer state includes the owner/seller, traded token, token id, lot size, unit price, currency, expiry, available amount, amount currently reserved in deals, sold amount, counter-offer flag, active flag, and escrow manager reference.
- The marketplace custody model uses escrow-related contract state to prevent the same listed token amount from being freely reused while it is committed to an active offer or deal.
- The Indexer observes
-
Offer Management:
- Offer state is managed through on-chain events and reflected in the indexed marketplace read model.
OfferRegisteredcreates an active market offer.AmountsUpdatedupdatesavailableAmount,inDealsAmount, andsoldAmountas buyers accept the offer or deals move through their lifecycle.OfferCancelledmarks the offer as inactive and prevents further direct execution.DealCreatedmeans a buyer accepted an offer directly or a counter-offer deal was created.CounterOfferResolvedrecords the seller's decision on a negotiated counter-offer. If accepted, the counter-offer enters the same purchase payment flow as a directly accepted offer.
-
Transition to Payment Settlement:
- The Core Payment Service starts after a marketplace deal exists.
- For directly accepted offers, it listens for
DealCreatedevents with deal typeOFFER. - For negotiated trades, it listens for
CounterOfferResolvedevents and continues only whenaccepted = true. - The service creates a local bond purchase payment, resolves applicable fees, sends payment instructions to the PSP, marks buyer payment on-chain through
resolvePayment(dealId, true), and completes seller-side settlement throughsettleDeal(dealId).