# Output File Formats

This reference documents all file formats generated by arb-assist for different bot integrations.

## SMB-Onchain Output Files

### smb-config.toml

Main configuration file for SolanaMevBot On-Chain.

#### Structure

```toml
[bot]
merge_mints = true
compute_unit_limit = 600000

[[routing.mint_config_list]]
mint = "TokenMintAddress..."
pump_pool_list = ["PoolAddress1...", "PoolAddress2..."]
raydium_clmm_pool_list = ["PoolAddress3..."]
meteora_dlmm_pool_list = ["PoolAddress4..."]
orca_whirlpool_list = ["PoolAddress5..."]
lookup_table_accounts = ["ALUT1...", "ALUT2..."]
process_delay = 400

[rpc]
url = "https://rpc.endpoint.com"

[spam]
enabled = true
sending_rpc_urls = [
    "https://rpc1.com",
    "https://rpc2.com",
    "https://rpc3.com"
]
compute_unit_price = {
    strategy = "Random",
    from = 10000,
    to = 50000,
    count = 1
}
max_retries = 10

[jito]
enabled = true
block_engines = ["ny", "tokyo", "amsterdam"]
tip = {
    strategy = "Random",
    from = 5000,
    to = 20000,
    count = 1
}

[flashloan]
enabled = true

[wallet]
# Keypair configuration handled by SMB
```

#### Field Descriptions

**\[bot] Section**

* `merge_mints`: Allow combining multiple mints in one transaction
* `compute_unit_limit`: Maximum compute units per transaction

**\[\[routing.mint\_config\_list]] Array**

* `mint`: Token mint address to arbitrage
* `*_pool_list`: Arrays of pool addresses by DEX type
* `lookup_table_accounts`: Address lookup tables for this mint
* `process_delay`: Milliseconds to wait between attempts

**\[rpc] Section**

* `url`: Primary RPC endpoint

**\[spam] Section**

* `enabled`: Whether to use spam mode
* `sending_rpc_urls`: RPC endpoints for sending transactions
* `compute_unit_price`: Priority fee configuration
  * `strategy`: "Random", "Linear", or "Exponential"
  * `from`/`to`: Fee range in microlamports
  * `count`: Number of different fees to try
* `max_retries`: Maximum retry attempts

**\[jito] Section**

* `enabled`: Whether to use Jito bundles
* `block_engines`: Regions to submit bundles
* `tip`: Jito tip configuration
  * Same structure as compute\_unit\_price

**\[flashloan] Section**

* `enabled`: Whether to use flash loans

## NotArb Output Files

### notarb-config.toml

Main configuration file for NotArb onchain-bot.

#### Structure

```json
{
    "jvm_args": ["-server", "-Xmx8192m"],
    "keypair_path": "${DEFAULT_KEYPAIR_PATH}",
    "protect_keypair": true,
    "threads": 0,
    "flash_loan": true,
    "max_lookup_tables": 10,
    "meteora_bin_limit": 20,
    "ips_file_path": "",
    "prefunded_keypairs_path": "",
    "jito_targets": [
        "https://ny.mainnet.block-engine.jito.wtf",
        "https://tokyo.mainnet.block-engine.jito.wtf"
    ],
    "max_bundle_transactions": 1,
    "token_accounts_checker": {
        "rpc_url": "",
        "delay_seconds": 3
    },
    "blockhash_updater": {
        "rpc_url": "",
        "delay_ms": 400
    },
    "account_size_loader": {
        "rpc_url": "",
        "invalid_account_size": 200,
        "buffer_size": 1500
    },
    "market_loader": "",
    "lookup_table_loader": "",
    "wsol_unwrapper": {
        "enabled": true,
        "check_minutes": 1,
        "trigger_sol": 0.5,
        "target_sol": 5,
        "priority_fee_lamports": 190,
        "reader_rpc_url": ""
    }
}
```

#### Field Descriptions

* `jvm_args`: JVM optimization parameters
* `keypair_path`: Path to wallet keypair (supports env vars)
* `protect_keypair`: Use NotArb's keypair protection
* `threads`: Thread pool size (0 = dynamic)
* `flash_loan`: Enable flash loan usage
* `max_lookup_tables`: Maximum ALUTs per transaction
* `meteora_bin_limit`: Max bins for Meteora DLMM
* `ips_file_path`: Path to proxy IP list
* `prefunded_keypairs_path`: Path to prefunded keypairs
* `jito_targets`: Jito bundle submission endpoints
* `max_bundle_transactions`: Max transactions per bundle
* Connection configurations: Separate RPC endpoints for different tasks

### markets.json

Trading pairs organized by transaction groups.

#### Structure

```json
{
    "groups": [
        [
            "MarketAddress1...",
            "MarketAddress2..."
        ],
        [
            "MarketAddress3...",
            "MarketAddress4...",
            "MarketAddress5..."
        ]
    ],
    "update_timestamp": 1753221082643
}
```

#### Field Descriptions

* `groups`: 2D array of market addresses
  * Each sub-array represents a transaction group
  * Corresponds to `mints_to_arb` configuration
* `update_timestamp`: Unix timestamp of last update

### lookup-tables.json

Address lookup tables for transaction size optimization.

#### Structure

```json
[
    "ALUTAddress1...",
    "ALUTAddress2...",
    "ALUTAddress3...",
    "ALUTAddress4..."
]
```

Simple array of ALUT addresses, sorted by usage frequency.

### notarb-attributes.json

Dynamic trading parameters updated based on market conditions.

#### Structure

```json
{
    "cu_limit": 400000,
    "jito_cooldown": 350,
    "jito_enabled": true,
    "jito_min_tip": 5000,
    "jito_max_tip": 25000,
    "spam_cooldown": 400,
    "spam_enabled": true,
    "spam_min_fee": 10000,
    "spam_max_fee": 50000
}
```

#### Field Descriptions

* `cu_limit`: Compute unit limit for transactions
* `jito_cooldown`: Milliseconds between Jito attempts
* `jito_enabled`: Whether to use Jito bundles
* `jito_min_tip`/`jito_max_tip`: Jito tip range in lamports
* `spam_cooldown`: Milliseconds between spam attempts
* `spam_enabled`: Whether to use spam mode
* `spam_min_fee`/`spam_max_fee`: Priority fee range in microlamports

## File Update Behavior

### Update Frequency

All files update according to `update_interval` in config.toml:

```toml
update_interval = 10000  # Updates every 10 seconds
```

### Atomic Updates

Files are written atomically:

1. Write to temporary file
2. Validate contents
3. Rename to final filename
4. Old file is replaced

### File Permissions

Generated files have permissions:

* Owner: Read/Write (644)
* Group: Read
* Others: Read

### File Locations

Files are created in the current working directory:

```
./smb-config.toml         # SMB mode
./notarb-config.toml      # NotArb mode
./markets.json            # NotArb mode
./lookup-tables.json      # NotArb mode
./notarb-attributes.json  # NotArb mode
```

## Dummy Configurations

When no mints meet filter criteria, dummy configs are generated:

### SMB Dummy Config

```toml
[[routing.mint_config_list]]
mint = "11111111111111111111111111111111"
pump_pool_list = []
lookup_table_accounts = []
process_delay = 1000000000

[spam]
enabled = false

[jito]
enabled = false
```

### NotArb Dummy Markets

```json
{
    "groups": [[]],
    "update_timestamp": 1753221082643
}
```

## Custom Output Names

Configure custom output filenames:

```toml
output = "my-custom-name"
```

Results in:

* `my-custom-name.toml` (SMB mode)
* `my-custom-name.json` (NotArb mode)

## File Server Endpoints

When file server is enabled (`port > 0`), files are available via HTTP:

| Mode   | URL Path                  | Content-Type       |
| ------ | ------------------------- | ------------------ |
| SMB    | `/smb-config.toml`        | `text/plain`       |
| NotArb | `/notarb-config.toml`     | `text/plain`       |
| NotArb | `/markets.json`           | `application/json` |
| NotArb | `/lookup-tables.json`     | `application/json` |
| NotArb | `/notarb-attributes.json` | `application/json` |

Example URLs:

```
http://server:8080/smb-config.toml
http://server:8080/markets.json
```

## Version Compatibility

### SMB Compatibility

* Version 0.11.5+: Full support
* Older versions: Not supported

### NotArb Compatibility

* Latest GitHub release: Full support
* Older versions: Check changelog

## Validation

### SMB Validation

* TOML syntax must be valid
* All pool addresses must be valid base58
* Mint addresses must be valid SPL tokens
* Compute limits within Solana bounds

### NotArb Validation

* JSON syntax must be valid
* Market addresses must be valid
* All numeric values within expected ranges
* Required fields present

## Error Handling

### Malformed Output

If output generation fails:

1. Previous valid config retained
2. Error logged
3. Retry on next interval

### Partial Updates

If some data unavailable:

1. Use cached values
2. Generate partial config
3. Log missing data

## Best Practices

1. **Monitor File Updates**: Check timestamps to ensure fresh data
2. **Validate Before Use**: Bot should validate config before trading
3. **Keep Backups**: Maintain last known good configuration
4. **Watch File Sizes**: Large configs may indicate issues
5. **Check Dummy Values**: Presence indicates no opportunities found
