# Relayer Fees Documentation

## Overview

This document describes the relayer fee mechanism for the trustless bridge system. Currently, there are no relayer fees, but this document outlines potential fee structures for future implementation.

## Current State

### No Relayer Fees

- Relayers currently receive no fees
- Revenue: None
- Costs: Gas fees + bond capital
- Profitability: Dependent on future fee implementation

## Proposed Fee Structure

### Option 1: Percentage of Deposit

**Structure**:
- Fee: 0.1% of deposit amount
- Paid by: Recipient (deducted from bridge amount)
- Example: 10 ETH deposit → 0.01 ETH fee

**Implementation**:
```solidity
uint256 relayerFee = (amount * relayerFeeBps) / 10000;
uint256 bridgeAmount = amount - relayerFee;
```

### Option 2: Fixed Fee

**Structure**:
- Fee: Fixed amount (e.g., 0.001 ETH)
- Paid by: Recipient
- Example: All deposits → 0.001 ETH fee

**Implementation**:
```solidity
uint256 relayerFee = fixedRelayerFee;
uint256 bridgeAmount = amount - relayerFee;
```

### Option 3: Tiered Fee

**Structure**:
- Small deposits (< 1 ETH): 0.2% fee
- Medium deposits (1-10 ETH): 0.1% fee
- Large deposits (> 10 ETH): 0.05% fee

**Implementation**:
```solidity
uint256 relayerFeeBps;
if (amount < 1 ether) {
    relayerFeeBps = 20; // 0.2%
} else if (amount < 10 ether) {
    relayerFeeBps = 10; // 0.1%
} else {
    relayerFeeBps = 5; // 0.05%
}
uint256 relayerFee = (amount * relayerFeeBps) / 10000;
```

## Fee Recipient

### Option 1: Relayer (Claim Submitter)

- Fee goes to relayer who submitted claim
- Incentivizes fast claim submission
- Simple implementation

### Option 2: Fee Pool

- Fees collected in pool
- Distributed to relayers based on activity
- More complex but fairer

### Option 3: Split

- 50% to relayer
- 50% to fee pool
- Balance individual and collective incentives

## Implementation Considerations

### Contract Changes

**InboxETH.sol**:
- Add fee calculation
- Add fee recipient tracking
- Update `submitClaim` to handle fees

**Example**:
```solidity
uint256 public relayerFeeBps = 10; // 0.1%

function submitClaim(...) external payable {
    // Calculate fee
    uint256 fee = (amount * relayerFeeBps) / 10000;
    uint256 bridgeAmount = amount - fee;
    
    // Store fee recipient
    relayerFees[depositId] = RelayerFee({
        relayer: msg.sender,
        amount: fee
    });
    
    // Continue with claim submission using bridgeAmount
}
```

### User Impact

- Recipients receive slightly less (fee deducted)
- Transparent fee structure
- Competitive with other bridges

## Economics

### Relayer Economics

**With Fees**:
- Revenue: Relayer fees
- Costs: Gas + bond capital
- Profit: Revenue - Costs

**Example**:
- Deposit: 10 ETH
- Fee: 0.01 ETH (0.1%)
- Gas: 0.001 ETH
- Bond: 11 ETH (locked)
- Net: 0.009 ETH profit (if no challenge)

### User Economics

**With Fees**:
- Receive: Deposit - Fee
- Example: 10 ETH deposit → 9.99 ETH received
- Fee: 0.01 ETH (0.1%)

## Recommendations

### Phase 1: Optional Fees

- Implement fee mechanism
- Set fee to 0% initially
- Allow enabling via governance/multisig

### Phase 2: Gradual Rollout

- Start with low fees (0.05%)
- Monitor relayer participation
- Adjust based on data

### Phase 3: Optimization

- Analyze optimal fee rate
- Consider tiered structure
- Optimize for relayer incentives

## References

- InboxETH Contract: `contracts/bridge/trustless/InboxETH.sol`
- Relayer Guide: `docs/operations/RELAYER_GUIDE.md`
- Economics: `docs/bridge/trustless/ARCHITECTURE.md`

