Currency Pairs
StableFX supports 6 major currency pairs, covering the most liquid forex markets. All pairs are settled in stablecoins (USDC) on-chain.
Supported Pairs
| Pair | Base Currency | Quote Currency | Description |
|---|---|---|---|
EUR/USD | Euro (EUR) | US Dollar (USD) | Most traded pair globally |
GBP/USD | British Pound (GBP) | US Dollar (USD) | "Cable" -- high liquidity |
USD/JPY | US Dollar (USD) | Japanese Yen (JPY) | Major Asian pair |
USD/CHF | US Dollar (USD) | Swiss Franc (CHF) | "Swissy" -- safe-haven pair |
AUD/USD | Australian Dollar (AUD) | US Dollar (USD) | Commodity-linked pair |
USD/CAD | US Dollar (USD) | Canadian Dollar (CAD) | Oil-correlated pair |
FOREX_CURRENCY_PAIRS Constant
The FOREX_CURRENCY_PAIRS constant is a read-only array containing all supported pair identifiers.
import { FOREX_CURRENCY_PAIRS } from '@one_deploy/sdk';
console.log(FOREX_CURRENCY_PAIRS);
// ['EUR/USD', 'GBP/USD', 'USD/JPY', 'USD/CHF', 'AUD/USD', 'USD/CAD']
// Type: readonly ['EUR/USD', 'GBP/USD', 'USD/JPY', 'USD/CHF', 'AUD/USD', 'USD/CAD']
You can use this constant to validate user input, populate selection UIs, or iterate over all pairs:
import { FOREX_CURRENCY_PAIRS } from '@one_deploy/sdk';
function isValidPair(pair: string): boolean {
return (FOREX_CURRENCY_PAIRS as readonly string[]).includes(pair);
}
// Iterate
FOREX_CURRENCY_PAIRS.forEach((pair) => {
console.log(`Fetching data for ${pair}...`);
});
ForexCurrencyPair Type
import type { ForexCurrencyPair } from '@one_deploy/sdk';
interface ForexCurrencyPair {
/** The pair identifier, e.g. "EUR/USD". */
pair: string;
/** ISO 4217 code for the base currency. */
baseCurrency: string;
/** ISO 4217 code for the quote currency. */
quoteCurrency: string;
/** Human-readable name for the pair. */
displayName: string;
/** Number of decimal places for price display. */
pricePrecision: number;
/** Minimum trade size in base currency units. */
minTradeSize: number;
/** Maximum trade size in base currency units. */
maxTradeSize: number;
/** Whether this pair is currently active for trading. */
isActive: boolean;
}
Pair Configuration Details
| Pair | Price Precision | Min Trade | Max Trade |
|---|---|---|---|
| EUR/USD | 5 | 100 | 1,000,000 |
| GBP/USD | 5 | 100 | 1,000,000 |
| USD/JPY | 3 | 100 | 1,000,000 |
| USD/CHF | 5 | 100 | 1,000,000 |
| AUD/USD | 5 | 100 | 1,000,000 |
| USD/CAD | 5 | 100 | 1,000,000 |
Price Precision
Most pairs use 5 decimal places (e.g. EUR/USD = 1.08765). USD/JPY uses 3 decimal places (e.g. 149.852) because the yen is quoted differently in traditional forex markets.
Working with Currency Pairs
Displaying All Pairs
import React from 'react';
import { View, Text, FlatList, StyleSheet } from 'react-native';
import { FOREX_CURRENCY_PAIRS } from '@one_deploy/sdk';
import type { ForexCurrencyPair } from '@one_deploy/sdk';
interface PairListProps {
pairs: ForexCurrencyPair[];
onSelectPair: (pair: string) => void;
}
function PairList({ pairs, onSelectPair }: PairListProps) {
return (
<FlatList
data={pairs}
keyExtractor={(item) => item.pair}
renderItem={({ item }) => (
<View style={styles.pairRow}>
<View>
<Text style={styles.pairName}>{item.pair}</Text>
<Text style={styles.pairDescription}>{item.displayName}</Text>
</View>
<View style={styles.pairMeta}>
<Text style={styles.metaText}>
Precision: {item.pricePrecision}
</Text>
<Text style={styles.metaText}>
Min: ${item.minTradeSize.toLocaleString()}
</Text>
<Text style={[styles.status, item.isActive && styles.active]}>
{item.isActive ? 'Active' : 'Inactive'}
</Text>
</View>
</View>
)}
/>
);
}
const styles = StyleSheet.create({
pairRow: {
flexDirection: 'row',
justifyContent: 'space-between',
alignItems: 'center',
padding: 12,
borderBottomWidth: 1,
borderColor: '#2a2a4e',
},
pairName: { fontSize: 16, fontWeight: '700', color: '#ffffff' },
pairDescription: { fontSize: 12, color: '#8888aa', marginTop: 2 },
pairMeta: { alignItems: 'flex-end' },
metaText: { fontSize: 12, color: '#aaaacc' },
status: { fontSize: 11, color: '#666', marginTop: 4 },
active: { color: '#44cc88' },
});
Validating Pair Selection
import { FOREX_CURRENCY_PAIRS } from '@one_deploy/sdk';
type ForexPairId = (typeof FOREX_CURRENCY_PAIRS)[number];
// Type: 'EUR/USD' | 'GBP/USD' | 'USD/JPY' | 'USD/CHF' | 'AUD/USD' | 'USD/CAD'
function getPairPrecision(pair: ForexPairId): number {
// USD/JPY uses 3 decimal places; all others use 5
return pair === 'USD/JPY' ? 3 : 5;
}
function formatPrice(pair: ForexPairId, price: number): string {
const precision = getPairPrecision(pair);
return price.toFixed(precision);
}
// Examples
console.log(formatPrice('EUR/USD', 1.08765)); // "1.08765"
console.log(formatPrice('USD/JPY', 149.852)); // "149.852"
Pair Selection with State
import React, { useState } from 'react';
import { View, Text, TouchableOpacity, StyleSheet } from 'react-native';
import { FOREX_CURRENCY_PAIRS } from '@one_deploy/sdk';
type ForexPairId = (typeof FOREX_CURRENCY_PAIRS)[number];
function PairSelector() {
const [selected, setSelected] = useState<ForexPairId>('EUR/USD');
return (
<View style={styles.container}>
<Text style={styles.header}>Select Currency Pair</Text>
<View style={styles.grid}>
{FOREX_CURRENCY_PAIRS.map((pair) => (
<TouchableOpacity
key={pair}
style={[
styles.chip,
selected === pair && styles.chipSelected,
]}
onPress={() => setSelected(pair)}
>
<Text
style={[
styles.chipText,
selected === pair && styles.chipTextSelected,
]}
>
{pair}
</Text>
</TouchableOpacity>
))}
</View>
<Text style={styles.selected}>Selected: {selected}</Text>
</View>
);
}
const styles = StyleSheet.create({
container: { padding: 16 },
header: { fontSize: 16, fontWeight: '700', color: '#fff', marginBottom: 12 },
grid: { flexDirection: 'row', flexWrap: 'wrap', gap: 8 },
chip: {
paddingHorizontal: 16,
paddingVertical: 8,
borderRadius: 20,
borderWidth: 1,
borderColor: '#444',
backgroundColor: '#1a1a2e',
},
chipSelected: { borderColor: '#4488ff', backgroundColor: '#1a2a4e' },
chipText: { color: '#aaa', fontSize: 14 },
chipTextSelected: { color: '#4488ff', fontWeight: '600' },
selected: { color: '#888', marginTop: 16, fontSize: 13 },
});
Next Steps
- Creating Investments -- use pair selection when opening positions.
- Trade History -- view trades filtered by pair.
- Components: OneForexPairSelector -- pre-built pair selector component.