RWA Index Token (iRAAC)¶
Overview¶
The RWAIndexToken (iRAAC) is the ERC-20 index token minted/burned by the RWA Vault to represent proportional ownership in the protocol’s RWA index. Transfers are standard ERC-20 moves except when either the sender or recipient is a swap pair address explicitly whitelisted by governance—then a swap fee/burn fee may apply (see “Swap-Aware Transfers” below).
Swap fee allow-list & current fee settings
- The protocol can enable swap fees for specific AMM pair addresses (allow-listed in
isSwapPair). - Burn fee is currently set to
0. - The swap fee is only used for permissionless DEXes where the protocol would otherwise miss fees. It is not enabled for fee-sharing venues (e.g., if the pool already charges protocol fees).
- Fees are subject to change—see the Parameters page for the latest values.
Purpose¶
- Provide a simple ERC-20 representation of the RWA index position managed by the Vault
- Support mint/burn hooks restricted to the Vault for controlled issuance/redemptions
- Make AMM trading safer for the protocol via optional, allow-listed swap-time fees on permissionless DEX pairs
- Enforce basic compliance controls (blacklist/registry) via
WithCompliance
Token Economics (High-Level)¶
- Mint/Burn: Only the Vault can mint/burn iRAAC to reflect deposits/withdrawals into the underlying RWA index.
-
Fees on Transfers:
-
Standard transfers: No fee.
-
Swap-aware transfers: If either
fromortois an allow-listed swap pair, iRAAC charges:- Swap fee (
swapFeeBP) → sent tofeeCollector - Burn fee (
burnFeeBP) → permanently burned - Default settings:
burnFeeBP = 0;swapFeeBPmay be 0 unless explicitly enabled for a given pair.
- Swap fee (
Design intent
The swap fee is a safety valve only for permissionless venues to prevent fee leakage and align external trading with protocol sustainability. If a venue (e.g., Curve) already takes fees that accrue to LPs/treasury, do not mark that pool as a swap pair.
Parameters¶
Governance controls a small set of parameters via the token owner (protocol multisig):
| Parameter | Type | Who sets it | Notes |
|---|---|---|---|
vault |
address |
Owner | Only this address can mint/burn |
feeCollector |
address |
Owner | Receives swap fees (if any) |
swapFeeBP |
uint256 (bp) |
Owner | Out of FEE_DENOM = 10_000 |
burnFeeBP |
uint256 (bp) |
Owner | Out of FEE_DENOM; currently 0 |
isSwapPair[pair] |
bool |
Owner | Allow-lists AMM pairs where fees apply |
An event log is inherited from standard OZ ERC-20; parameter changes are visible on-chain via transactions to the setters below.
Early Beta
Fee knobs are conservative in early beta. Check the Parameters page for live values before relying on any figures here.
Swap-Aware Transfers¶
When transfer or transferFrom is called:
- If neither
fromnortois an allow-listedisSwapPair, iRAAC acts like a standard ERC-20 (no fee). - If either side is an allow-listed
isSwapPair, the token computes:
feeAmount = amount * swapFeeBP / FEE_DENOM
burnAmount = amount * burnFeeBP / FEE_DENOM
rest = amount - feeAmount - burnAmount
burnAmountis burned fromsenderfeeAmountis sent tofeeCollectorrestis delivered torecipient
Do not allow-list fee-sharing pools
If a pool (e.g., a Curve pool) already levies swap fees that flow to LPs/treasury, do not mark it as a swapPair. Double-charging would harm users and is not intended.
Current Swap-Fee-Enabled Pairs¶
The table below lists AMM pairs currently allow-listed for swap fees. If a network section is empty, no swap fee is presently enforced on that network.
Ethereum Mainnet¶
| AMM / Pair | Pair Address | Notes |
|---|---|---|
| — | — | (none at this time) |
Testnets (e.g., Sepolia)¶
| AMM / Pair | Pair Address | Notes |
|---|---|---|
| — | — | (none at this time) |
Other Networks¶
| Chain | AMM / Pair | Pair Address | Notes |
|---|---|---|---|
| — | — | — | (none at this time) |
To update this list, add/remove entries via
setSwapPair(pair, enabled)and keep this doc in sync.
Key Functions¶
| Function | Description | Access |
|---|---|---|
mint(to, amount) |
Mint iRAAC to to |
onlyVault |
burn(from, amount) |
Burn iRAAC from from |
onlyVault |
transfer(to, amount) |
ERC-20 transfer; applies fees if swap-aware | Any |
transferFrom(from, to, amount) |
ERC-20 transferFrom; applies fees if swap-aware | Any |
setVault(vault) |
Set the Vault address | onlyOwner |
setFeeCollector(feeCollector) |
Set fee receiver | onlyOwner |
setFees(swapFeeBP, burnFeeBP) |
Update fee basis points | onlyOwner |
setSwapPair(pair, enabled) |
Allow-/disallow pair for fees | onlyOwner |
Implementation Details¶
- Standards & libs: OpenZeppelin
ERC20,Ownable - Fee math: Denominator
FEE_DENOM = 10_000(basis points) -
Storage:
-
vault,feeCollector swapFeeBP,burnFeeBPisSwapPair[address]mapping- Transfer path: Unified
_swapAwareTransferenforces compliance + optional fees
Interactions¶
- RWA Vault — sole minter/burner of iRAAC based on underlying index accounting
- FeeCollector — receives swap fees when swap-aware path is triggered
- Compliance Registry — consulted by
WithCompliancefor blacklist checks - AMM Pairs — only pairs explicitly allow-listed incur swap-time fees
Notes¶
- Swap fee allow-list is opt-in and pair-specific. If the protocol integrates with a venue that already shares fees back (e.g., Curve), do not enable swap fees here.
- Burn fee is currently
0. - For the latest live parameters, always refer to the Parameters page in the docs.