# Multi-Asset Support Documentation

## Overview

This document describes multi-asset support for the trustless bridge system, extending beyond ETH/WETH to support ERC-20 tokens.

## Current State

### Supported Assets

- **Native ETH**: Supported via `depositNative()`
- **WETH**: Supported via `depositERC20()`
- **Other ERC-20**: Not yet supported

## Proposed Multi-Asset Architecture

### 1. Token Whitelist

**Purpose**: Control which tokens can be bridged

**Implementation**:
```solidity
mapping(address => bool) public whitelistedTokens;
mapping(address => TokenConfig) public tokenConfigs;

struct TokenConfig {
    bool whitelisted;
    uint256 minDeposit;
    uint256 maxDeposit;
    address destinationToken; // Token on destination chain
}
```

### 2. Asset-Specific Pools

**Current**: Separate pools for ETH and WETH

**Enhancement**: Pools for each whitelisted token
```solidity
mapping(address => PoolState) public tokenPools; // token => PoolState
```

### 3. Token-Specific Configurations

**Purpose**: Different settings per token

**Implementation**:
```solidity
struct TokenConfig {
    uint256 bondMultiplier; // May vary by token
    uint256 minBond; // May vary by token
    uint256 challengeWindow; // May vary by token
}
```

## Implementation Steps

### Phase 1: ERC-20 Support

1. Update `Lockbox138` to support any ERC-20
2. Update `InboxETH` to handle ERC-20 claims
3. Update `LiquidityPoolETH` for multi-asset pools
4. Add token whitelist mechanism

### Phase 2: Token Configuration

5. Add token-specific configurations
6. Implement token registry
7. Add admin functions for whitelist management

### Phase 3: Testing

8. Test with various ERC-20 tokens
9. Test token-specific configurations
10. Test pool management

## Security Considerations

### 1. Token Validation

- Verify token is ERC-20 compliant
- Check token contract is not malicious
- Validate token decimals

### 2. Liquidity Management

- Separate pools per token
- Token-specific liquidity ratios
- Token-specific fee structures

### 3. Reentrancy

- ERC-20 transfers can trigger reentrancy
- Use proper guards
- Follow checks-effects-interactions pattern

## Testing

### Test Suite

Create `test/bridge/trustless/MultiAsset.t.sol`:
- Test ERC-20 deposits
- Test token whitelisting
- Test token-specific pools
- Test token configurations

## References

- Lockbox138: `contracts/bridge/trustless/Lockbox138.sol`
- InboxETH: `contracts/bridge/trustless/InboxETH.sol`
- LiquidityPoolETH: `contracts/bridge/trustless/LiquidityPoolETH.sol`

