Offerings are a set of contracts that facilitate compliant securities offerings with flexible parameters. The core contract is the Accrued Interest Pool ("AI Pool"). Key parameters are:

  • Rate: This is used to calculate a linear interest accrual rate that can be referenced by other applications for expected value of fixed-income products. For example, if rate is set to 10%, the token will have a redemption value of 1.10 USDC per token after 12 months

  • Token Value: This is used to calculate the expected value per token based on the Rate

  • Stablecoin: The stablecoin the issuer wants to accept in the offering

  • Receiving Account: The address where the issuer wants to direct sales proceeds

  • Token Count: The number of tokens available for sale, which are minted at initialization

  • Reward Token: Some Offerings may have additional incentives provided by the Issuer. This is the token contract for the reward token

Prior to participating in an Offering, investors must first be approved by the Issuer (i.e. pass KYC) to be added to the compliance whitelist contract. Whitelisted investors can then invest into the Offering using the stablecoin specified by the issuer (e.g. USDC) and will receive an amount of tokens as an onchain representation of the investment contract. Security tokens purchased via Offerings can only be held in accounts whitelisted by the Issuer.

Example Walkthrough

An Offering starts with the admin setting the aforementioned parameters upon deployment of a new AI Pool:

  • Rate: 10%

  • Token Value: 1

  • Stablecoin: USDC

  • Receiving Account: 0x123

  • Token Count: 1,000,000

  • Reward Token: null

After the pool is deployed, users can call buyDebt and transfer an amount of stablecoins to the Offering contract. All interactions with the pool will need to recalculate the token value based on the rate and the number of days since the start of the pool. The calculation is as follows:

debtTokenValue = 1 + (currentDay - startDay) * 10% / 365

Some AI Pools will eventually mature if the underlying asset is a fixed-income product with a maturity date. When the admin sets the pool status to matured, the debtTokens stop accruing value. debtTokenValue becomes a fixed formula as follows:

debtTokenValue = 1 + (dayMatured - startDay) * 10% / 365

In order to repay debt to the AI Pool, the admin calls repayDebt and transfers an amount of stablecoins to the AI Pool.

At any time, if stablecoins are available in the AI Pool, users can call redeem to receive funds based on the debtTokenValue and the number of debt tokens transferred. AI Pools also have optional rewardTokens that are distributed when redeem is called, however, if no stablecoins are available, the transaction reverts. The amount of rewardTokens received is calculated as follows:

rewardTokens received = redeemAmt / 1,000,000 * rewardTokensAvailable

Last updated