Offerings
An Initial RWA Offering (IRO) is how a new asset raises capital. The Offering contract holds subscriptions in escrow. It either delivers units to every subscriber and pays the issuer, or refunds everyone in full.
Lifecycle
- Create. The token's admin calls
createOffering(token, unitPrice, softCap, hardCap, startTime, endTime). The settlement currency is the token's settlement token, which must be allowlisted. - Subscribe. Between
startTimeandendTime, investors approve the stablecoin and callsubscribe(id, amount). The amount must be a multiple ofunitPrice, and the total may not exceed the hard cap. - Close. Once the window ends or the hard cap is reached, anyone can call
closeOffering(id); keepers callprocessAll. Ifraised ≥ softCapthe offering succeeds; otherwise it fails. - Settle.
- Succeeded: each investor calls
claimAllocation(id)to have their units minted, and the issuer callswithdrawProceeds(id)once to receive the full amount raised. - Failed or cancelled: each investor calls
claimRefund(id)to get back exactly what they paid.
- Succeeded: each investor calls
The issuer or governance can cancel an offering while it is open, with a reason. Everyone can then claim a refund.
Parameters
| Parameter | Meaning |
|---|---|
unitPrice | Settlement base units per one base unit of the token. With a 0-decimal token that is the price of one whole unit. With a 6-decimal token it is the price of 10⁻⁶ of a token. |
softCap | Minimum raise for success (a multiple of unitPrice) |
hardCap | Maximum raise (a multiple of unitPrice); reaching it allows an immediate close |
startTime, endTime | The subscription window, in seconds since epoch |
Allocation is first come, first served up to the hard cap. There is no oversubscription and no pro-rata scaling.
Eligibility
subscribechecks that the investor is not sanctioned and, if the token requires it, has valid KYC.- Units are minted at
claimAllocation, which runs the token's full rules: accreditation, jurisdiction, freeze and holder cap.
An investor who passes the subscription checks but fails a token rule at claim time — the wrong jurisdiction, not accredited, or over the holder cap — cannot receive units. Once the offering has succeeded there is no refund path. This portal therefore calls the token's canReceive before letting you subscribe. If you integrate directly, do the same.
Proceeds and escrow
- Subscriptions sit in the
Offeringcontract until the offering closes. - On success the issuer withdraws everything at once. There is no milestone-based or staged release in v1. After that, investors rely on the issuer for dividends and redemptions.
- On failure or cancellation, refunds come from the same escrow and are always 1:1.
- The offering charges no fee at the contract level.
Keepers
processAll(max) and process(ids) close due offerings. Each item is independent, so one failure never blocks the rest. isDue(id) tells a keeper whether there is work to do. Anyone may call these functions.
What offerings do not do (v1)
- No tranches (senior or junior), and no staged capital release.
- No return injection or default path; operating returns reach investors as dividends.
- No secondary sale of subscriptions before close.
- No automatic refund when a claim fails a token rule (see the caution above).
Events
OfferingCreated, Subscribed, OfferingClosed, AllocationClaimed, ProceedsWithdrawn, RefundClaimed, OfferingCancelled.