Skip to content

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 from or to is an allow-listed swap pair, iRAAC charges:

    • Swap fee (swapFeeBP) → sent to feeCollector
    • Burn fee (burnFeeBP) → permanently burned
    • Default settings: burnFeeBP = 0; swapFeeBP may be 0 unless explicitly enabled for a given pair.

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 from nor to is an allow-listed isSwapPair, 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
  • burnAmount is burned from sender
  • feeAmount is sent to feeCollector
  • rest is delivered to recipient

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, burnFeeBP
  • isSwapPair[address] mapping
  • Transfer path: Unified _swapAwareTransfer enforces 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 WithCompliance for 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.