Exchange Rate System
Dynamic Rate Calculation
The exchange rate determines how many Bond Tokens investors receive for their FpUSD receipts:
Exchange Rate = (Total Bond Tokens × 10¹⁸) ÷ Total FpUSD SupplyBond Token Calculation:
Bond Tokens = (FpUSD Balance × Exchange Rate) ÷ 10¹⁸This system ensures that all FpUSD holders receive proportional shares of the total Bond Token supply, regardless of when they invested or how many participants are involved.
For bonds with multiple funding rounds, each emission round has its own exchange rate (rounds[roundId].exchangeRate), based on the dirty purchase price of the bond for that round. Each investor's FpUSD corresponds to a specific round and is exchanged at that round's rate when claiming Bond Tokens.
Because the exchange rate formula uses integer division, a small residual amount of Bond Tokens (dust) may remain in the Distribution contract after all investors have claimed. This dust is burned when the Admin Safe calls finalizeEmissionRound(roundId, ...) to close the round, see Emission Round Finalization.
FpUSD Token Mechanics
Minting During Investment
When investors deposit USD stablecoin into funding contracts, they receive FpUSD tokens as receipts:
1. Investor deposits USD stablecoin (native decimals, e.g. 6 for USDC) into Funding contract
2. System validates KYC status and investment parameters
3. FpUSD tokens minted to investor using the stablecoin's scaling factor
4. USD stablecoin remains in Funding contract until extraction for bond purchase or refunded in case Funding fails
Scaling Formula:
FpUSD Amount = USD Deposit × scalingFactor, where scalingFactor = 10^(18 − stableDecimals)
This normalizes any supported stablecoin to FpUSD's 18 decimals while maintaining 1:1 economic equivalence. For USDC (6 decimals) the factor is 10¹²; for an 18-decimal stablecoin it is 1.
Burning During Claims
FpUSD tokens are burned when investors claim Bond Tokens or when funds are returned in the event of a failed funding:
- Investor's entire FpUSD balance is burned
- Bond Tokens received based on exchange rate calculation
- Single transaction completes the claim process
- No residual FpUSD remains after successful claiming
- Investor's FpUSD balance is burned
- USD stablecoin returned from Funding contract
- Scaling reversed (FpUSD amount ÷ scalingFactor = USD stablecoin amount)
- Available only if the round fails; Bondi calls the public
refundInvestorsfunction on behalf of all investors (no individual action is required)