Fee Structure in SupraNova
SupraNova’s fee model is designed to sustain a permissionless, decentralized bridging ecosystem while incentivizing critical actors like relayers and committee updaters.

The same fee model applies in both directions. There is no separate reverse fee schedule: the Verification Fee is charged by the HyperNovaCore verifier on whichever chain performs the verification, and the Service Layer Fee is charged by the Token Bridge on whichever chain delivers the asset. For Ethereum to Supra that is Supra; for Supra to Ethereum that is Ethereum, where the verification fee is paid in ETH.
Fee Overview and Responsibilities
SupraNova applies two levels of fees internally but simplifies the user experience by exposing only the Service Layer Fee during transaction confirmation.
Verification Fee
An internal fee that compensates Committee Updaters for:
- Proof generation
- Signature validation
- Validator public key updates
Paid by: Service Layer (not the user directly)
Service Layer Fee
Visible to users and deducted upon initiating a bridge transaction. It covers:
- Operational costs
- Treasury accumulation
- Relayer and Committee Updater rewards
Then the system separates fees into two distinct layers:
| Fee Type | Purpose | Source of Funding |
|---|---|---|
| Verification Fee | Covers cryptographic proof verification on Supra | Funded from service fee. |
| Service Layer Fee | Specific to the token bridge service, customizable by service providers | Paid by bridging users |
Message Passing Layer Fee
This fee is charged for:
- Verifying Sync Committee proofs
- Verifying ancestry and receipt proofs
- Managing public key updates (Committee Updater work)
- Safe validators committee handovers through public key updates.
Who Charges It?
- The HyperNovaCore verifier contract charges this fee internally. Service-contracts calling the message-passing layer for validation pay this fee as part of the process.
Service Layer Fee (Token Bridge Specific)
This fee is charged by service-specific components like the Token Bridge and includes:
- Operational Service costs.
- Relayer rewards.
Who Sets It?
- The Token Bridge smart contract service owner (typically the protocol team).
How is it Collected?
Testnet and Mainnet collect the fee the same way. A small cut is deducted on the source chain, out of the asset being bridged, at the time the bridge request is submitted — not on the destination chain at delivery time.
- Bridging ETH or USDC from Ethereum, the cut comes out of the ETH or USDC being locked.
- Bridging supETH or supUSDC back from Supra, the cut comes out of the wrapped asset being burned.
- Bridging $SUPRA out of Supra, the cut comes out of the $SUPRA being locked.
What Does It Fund?
- Relayer incentives
- Operational treasury buildup
Fee Breakdown Example During a Bridge Transaction
| Fee Component | Example |
|---|---|
| Message Passing Verification Fee | 0.001 $SUPRA equivalent |
| Service Layer Fee (token bridge) | Tiered percentage of the bridged amount |
| Relayer Reward (from service fee) | Paid out within the relayer’s own proof-submission transaction |
| Committee Updater Reward | Paid out within the Committee Updater’s own committee-update transaction |
- The net amount received on the destination chain will be slightly less than the amount sent, after fees.
- All fees are transparent and visible during the bridge confirmation step.
- Quote the exact figure from the contract before relying on it:
inboundTokenFeeon the Ethereum Token Bridge,get_fee_for_amounton the Supra Token Bridge module.
Incentivizing Liveness
Both relayers and committee updaters are permissionless roles that ensure network liveness and decentralization.
They are incentivized through fee rewards:
| Actor | Task | Incentive Source | When it is paid |
|---|---|---|---|
| Relayer | Submit proof bundles | Service Layer Fee | In the same transaction that submits the proof |
| CommitteeUpdater | Publish the source chain’s new keys | Verification Fee | In the same transaction that registers the new committee |
There is no periodic treasury disbursal. Both rewards are settled atomically inside the relayer’s or Committee Updater’s own transaction, so an operator is paid by the same transaction that does the work and never has to wait on an off-chain payout cycle.
Without sufficient rewards:
- Relayers may delay proof submissions
- Committee updates may lapse, compromising security
SupraNova’s modular fee and reward system ensures both roles remain sustainably incentivized.
Testnet Fee Settings - Some fees (especially the Verification Fee) are reduced or set to zero for testing purposes. - The full fee model will be enforced at Mainnet launch.
Fee Model for the SupraNova Bridge Protocol
This protocol involves a Token Bridge Service and a Message Passing Layer. The model details various fees and rewards, including:
- Service Fee (S)
- Relayer Rewards (RR)
- Committee Updater Rewards (CUR)
- Relayer Expense (RG)
- Committee Updater Expense (CUG)
- Verification Fee (V)
Key points of the model:
- Users pay a Service Fee (S) and gas costs when initiating a bridge request.
- Relayers are compensated with Relayer Rewards (RR) that cover their expenses (RG).
- Committee Updaters (CU) are rewarded (CUR) for keeping the source chain’s consensus keys current on the destination chain, covering their expenses (CUG). For Ethereum to Supra this is the Ethereum Sync Committee keys published to Supra; for Supra to Ethereum it is the Supra committee threshold keys published to Ethereum.
- RG and CUG are treated as constants determined by the Admin.
The same formulas apply in both directions, with the destination chain’s Committee Updater and verification costs substituted into the CUR, CUG and V terms.
Fee Derivation Formulas
Given traffic estimate X, and gross margins SM, VM, CUM, RM:
CUR = CUG / (1 - CUM)V = (CUR / X) / (1 - VM)RR = (V + RG) / (1 - RM)S = RR / (1 - SM)
Tiered Service Fee Structure
To accommodate varying bridge volumes, SupraNova applies a tiered service fee model based on the value bridged in USDT:
| Tier | Bridged Value Range | Service Fee Rate |
|---|---|---|
| Micro | < $5,000 | 0.5% |
| Standard | $5,000 – $1,000,000 | 0.3% |
| Whale | > $1,000,000 | 0.2% |
Current On-Chain Fee Parameters
These are the values configured on the live deployments. Rates are expressed in basis points against a percentage base of 10000.
| Parameter | Raw Value | Value |
|---|---|---|
rg (relayer gas expense) | 275000000000000 | 0.000275 ETH |
rm (relayer margin) | 4000 | 40% |
sm (service margin) | 1000 | 10% |
microTierThresholdInUsdt | 5000000000 | $5,000 |
whaleTierThresholdInUsdt | 1000000000000 | $1,000,000 |
microTierFeePercentage | 50 | 0.5% |
standardTierFeePercentage | 30 | 0.3% |
whaleTierFeePercentage | 20 | 0.2% |
The tiered rates above are the configuration on the Supra fee operator, which is what prices a Supra to Ethereum
transfer. On the Ethereum fee operator the service fee and relayer reward for Ethereum to Supra transfers are
currently configured to zero, so that leg costs only Ethereum gas today. Both are service-owner settings and can
change; quote the fee from the contract (inboundTokenFee on Ethereum, get_fee_for_amount on Supra) rather than
assuming a rate.
SupraNova Address Details
The same deployments serve both bridging directions. On Ethereum the contracts are proxies; on Supra the bridge is a set of Move modules.
Ethereum Mainnet
| Contract Name | Address |
|---|---|
| HypernovaProxy | 0x96AbCABA0236eCC166c8aDf2b5797ad3D32f5367 |
| TokenBridgeProxy | 0x4ef3DE5d92C9d5D49205C3Ee16F84A1F538e70f5 |
| TokenVaultProxy | 0x4A4B47c6296b20790daF30B529469a46d48C51Ad |
| FeeOperatorProxy | 0x017bE40790A232651Af8C5ac08439280d412EeE2 |
| WrappedTokenFactoryProxy | 0x1108470109E12345626B29be71751a1c9F7e12b0 |
| Supra Token (ERC20) | 0xDC7404100A092c898E93708EF73F3322A7acc213 |
Supra Mainnet Move Modules
All six bridge modules are published under a single account, 0xda20f7d0ec813c751926f06004a10bc6ee1eefc96798f6a1aa31447ee146f932. Address a module as <account>::<module>, for example 0xda20f7d0ec813c751926f06004a10bc6ee1eefc96798f6a1aa31447ee146f932::token_bridge_service.
| Module | Layer | Role |
|---|---|---|
hypernova_core | Message passing | Verifies Ethereum events on Supra: Sync Committee, receipt and ancestry proofs |
hypernova_core_from_supra | Message passing | Emits the MessagePosted event that the Ethereum-side verifier consumes |
token_bridge_service | Service | The Token Bridge itself: mints, burns, and locks on the Supra side |
token_vault | Service | Custody for Supra-native assets, with per-token lock and release limits |
fee_operator | Service | Fee configuration, fee collection and reward payout |
wrapped_token_deployer | Service | Deploys the wrapped FA for each bridged asset and holds its mint capability |
token_bridge_codec and the hypernova_core support modules (eth_types, message_types, proof_verifier, merkle_tree, helpers) are published at the same account as internal libraries.
Supra Testnet Move Modules
| Module | Account |
|---|---|
hypernova_core, hypernova_core_from_supra | 0x3ab1136a5dbb76b923d2b02f95b042f5d80b70218a0395755eafb63d4eefc340 |
token_bridge_service, token_bridge_codec | 0x76b38ad503118cb7749a835d965b023a2fe4801dba736bfa66e18d1f0339695c |
Addresses change as contracts and modules are redeployed. Confirm current values against the SupraNova Explorer before integrating.
Asset Details
Each row is a bridging pair. Going Ethereum to Supra, the Ethereum-side asset is locked and the Supra-side asset is minted; going Supra to Ethereum, the same pair runs in reverse. Burning supETH can deliver either native ETH or WETH, depending on the destination token you select; both settle from the same vault against the same supETH balance.
Testnet
| Asset Name | Ethereum Address | Asset Name | Supra Address |
|---|---|---|---|
| WETH | 0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14 | supETH | 0x1a57888bfcd31ef82a8e3dac93db14335b36f9228d5f050b722151ae2a77153a |
| USDC | 0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238 | supUSDC | 0x3ca17a5b04d826f9be112c319e003b3a79b2682c40613876023758dbb0d03e96 |
| USDT | 0xaA8E23Fb1079EA71e0a56F48a2aA51851D8433D0 | supUSDT | 0x02946e0f1a942ab8eb6f763f19da3d7540609aba8b00fb54e680cac5e048f8d0 |
| SolvBTC | 0xE33109766662932a26d978123383ff9E7bdeF346 | supSolvBTC | 0x420c8751a043b5b216cf02a011b0d563f3638eb082f91f0d879254e388f2b53a |
| WBTC | 0x29f2D40B0605204364af54EC677bD022dA425d03 | supBTC | 0x7ca33bcce4f4bb7904ac7b46e3613b6b62dae55cc89923706aac1ad1c244e3e6 |
| SUPRA | 0xDC7404100A092c898E93708EF73F3322A7acc213 | SUPRA | 0x000000000000000000000000000000000000000000000000000000000000000a |
Mainnet
| Asset Name | Ethereum Address | Asset Name | Supra Address |
|---|---|---|---|
| WETH | 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 | supETH | 0xe4af154ade9551e7f58a23b8f727ae2dca050f1b74582bb518ba361c889d246d |
| USDC | 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 | supUSDC | 0xf90b4b9d4a9d87c39fb3140513e52edc3ead5eaddcb9881b02becdeb63c5793d |
| USDT | 0xdAC17F958D2ee523a2206206994597C13D831ec7 | supUSDT | 0x07b6463ca7a54ee37e113c8333db9c0af49de39555ee1cb44837db4c085f8964 |
| SolvBTC | 0x7A56E1C57C7475CCf742a1832B028F0456652F97 | supSolvBTC | 0x224bee573e0ae84ba7f1eee4f7063a945ad7a268bea7ab9e004f6890177a480b |
| WBTC | 0x2260fac5e5542a773aa44fbcfedf7c193bc2c599 | supBTC | 0x348b1a4fa68803cbda3b50326a90e59b21e80c3ced93588b20950b5c0697a67e |
| SUPRA | 0xDC7404100A092c898E93708EF73F3322A7acc213 | SUPRA | 0x000000000000000000000000000000000000000000000000000000000000000a |
Asset Transaction Limits
Every bridged asset carries three configured caps, enforced on-chain by the vault that holds it:
- Global Cap – the total value the vault will hold in that asset.
- Per-Request Lock Limit – the most that can be locked in a single outbound request.
- Per-Request Release Limit – the most that can be released in a single inbound settlement.
A request outside these bounds is rejected up front, so the transfer cannot be started for an over-limit amount.
Ethereum Vault (Mainnet)
These caps apply to assets custodied on Ethereum: locked when bridging Ethereum to Supra, released when bridging Supra to Ethereum. The minimum is 1 base unit for every asset in both directions.
| Asset | Per-Request Lock Limit | Global Cap | Per-Request Release Limit |
|---|---|---|---|
| WETH | 3.888 WETH (3888000000000000000) | 19.44 WETH (19440000000000000000) | 3.888 WETH (3888000000000000000) |
| USDC | 9,000 USDC (9000000000) | 45,000 USDC (45000000000) | 9,000 USDC (9000000000) |
| USDT | 3,800 USDT (3800000000) | 19,000 USDT (19000000000) | 3,800 USDT (3800000000) |
| WBTC | 0.00166 WBTC (166000) | 0.0083 WBTC (830000) | 0.00166 WBTC (166000) |
| SolvBTC | 0.00166 SolvBTC (1660000000000000) | 0.0083 SolvBTC (8300000000000000) | 0.00166 SolvBTC (1660000000000000) |
Native ETH is wrapped on the way in, so ETH transfers are bound by the WETH row.
Supra Vault (Mainnet) — $SUPRA
$SUPRA is native to Supra, so it is custodied by the Supra-side vault rather than the Ethereum vault. Its caps are configured on that vault through set_lock_limits and set_release_limits, and the Ethereum vault’s limits above never apply to it. $SUPRA amounts are denominated in quants (8 decimals).
| Asset | Per-Request Lock Limit | Global Cap | Per-Request Release Limit |
|---|---|---|---|
| $SUPRA | 4,000,000 SUPRA (400000000000000) | 200,000,000 SUPRA (20000000000000000) | 4,000,000 SUPRA (400000000000000) |
The lock limit applies when $SUPRA leaves Supra for Ethereum; the release limit applies when it comes back. See Token Bridging Models for how the path works.
Reference Prices Used to Size the Caps
The caps above are value-normalised. These are the reference prices they were derived from, not live prices:
| Asset | Reference Price |
|---|---|
| USDC | $1 |
| USDT | $1 |
| WETH | $1,800 |
| WBTC | $60,000 |
| SolvBTC | $60,000 |
| $SUPRA | $0.00025 |
Caps are retuned as the bridge builds up operating history. Read the exact base-unit values from the vault contract
(lockLimits / releaseLimits on Ethereum, lock_limits / release_limits on Supra) before integrating.