Skip to main content

Supported Providers

This document lists all cross-chain providers supported by the Interop SDK.

Available Providers

ProviderStatusDescription
Across ProtocolActiveCross-chain token transfers using Across bridge
Relay ProtocolActiveCross-chain token transfers using Relay bridge
OIFActiveDirect integration with OIF-compliant solvers
Bungee ProtocolActiveCross-chain transfers via onchain or gasless permit2 flow
LiFi IntentsActiveCross-chain via LiFi intent solver marketplace

Provider Configuration

import { BungeeApiTier, createCrossChainProvider } from "@wonderland/interop-cross-chain";

// Across — no required config
createCrossChainProvider("across");
createCrossChainProvider("across", { isTestnet: true });

// Relay — no required config
createCrossChainProvider("relay");
createCrossChainProvider("relay", { apiKey: "...", isTestnet: true });

// OIF — solverId and url are required
createCrossChainProvider("oif", { solverId: "my-solver", url: "https://solver.example.com" });

// LiFi Intents — orderServerUrl is required
createCrossChainProvider("lifi-intents", { orderServerUrl: "https://..." });

// Bungee — no required config
createCrossChainProvider("bungee");
createCrossChainProvider("bungee", {
tier: BungeeApiTier.Dedicated,
apiKey: "...",
affiliateId: "...",
});
ProviderRequired ConfigOptional Config
across(none)isTestnet
relay(none)apiKey, isTestnet
oifsolverId, url
lifi-intentsorderServerUrlproviderId, headers
bungee(none)tier, apiKey, affiliateId, feeBps, feeTakerAddress, submissionModes, slippage, refuel

isTestnet semantics

Only across and relay accept isTestnet. What it changes:

ProviderAPI hostSupported chainsTrackingAsset discovery
acrossapp.across.to/apitestnet.across.to/apiMainnet routes → testnet routes (Sepolia, Base Sepolia, …)Mainnet: API-based fill watcher. Testnet: event-based (needs destination RPC).API → static testnet list
relayapi.relay.linkapi.testnets.relay.linkMainnet routes → testnet routesAPI-based in both modes — no RPC URLs needed.API → static testnet list

oif, bungee, and lifi-intents don't take an isTestnet flag. For those providers, switch networks by pointing url / orderServerUrl / baseUrl at a testnet endpoint.

Order Tracking Requirements

Different providers use different tracking mechanisms. Some need RPC URLs, others are fully API-based:

ProviderOpened Intent ParserFill WatcherRPC URLs Needed?
Across (mainnet)OIF event-basedAPI-basedOrigin chain only
Across (testnet)OIF event-basedEvent-basedOrigin + destination chains
RelayAPI-basedAPI-basedNone
OIFOIF event-basedEvent-basedOrigin + destination chains
BungeeAPI-basedAPI-basedNone
LiFi IntentsCustom event-basedAPI-basedOrigin chain only

Creating Custom Providers

You can create custom providers by extending the CrossChainProvider abstract class. Two methods are required (getQuotes and getTrackingConfig); the rest have default implementations that throw ProviderExecuteNotImplemented.

import type {
FillWatcherConfig,
OpenedIntentParserConfig,
PreTrackerConfig,
Quote,
QuoteRequest,
SubmitOrderResponse,
} from "@wonderland/interop-cross-chain";
import type { Hex } from "viem";
import { CrossChainProvider } from "@wonderland/interop-cross-chain";

class MyCustomProvider extends CrossChainProvider {
readonly protocolName = "my-protocol";
readonly providerId = "my-protocol-1";

// Required: fetch quotes from your protocol's API
async getQuotes(params: QuoteRequest): Promise<Quote[]> {
// Adapt params to your protocol's format, call your API,
// and return an array of Quote objects
}

// Required: configure how the SDK tracks orders for your protocol
getTrackingConfig(): {
openedIntentParserConfig: OpenedIntentParserConfig;
fillWatcherConfig: FillWatcherConfig;
preTrackerConfig?: PreTrackerConfig;
} {
// Return protocol-specific tracking configuration
// See Relay or Across providers for examples
}

// Optional: override to support gasless (signature-based) order submission
// Default throws ProviderExecuteNotImplemented
async submitOrder(quote: Quote, signature: Hex): Promise<SubmitOrderResponse> {
// Submit the signed order to your protocol's API
}
}

See the API Reference for the full Quote, QuoteRequest, and tracking config types.

References