UNPKG

@reown/appkit-controllers

Version:

The full stack toolkit to build onchain app UX.

239 lines • 6.45 kB
import { ParseUtil } from '@reown/appkit-common'; import { OptionsController } from '../controllers/OptionsController.js'; const CHAIN_ASSET_INFO_MAP = { eip155: { native: { assetNamespace: 'slip44', assetReference: '60' }, defaultTokenNamespace: 'erc20' }, solana: { native: { assetNamespace: 'slip44', assetReference: '501' }, defaultTokenNamespace: 'token' } }; const EVM_NATIVE_SLIP44_OVERRIDES = { // BNB on Binance Smart Chain '56': '714', // BNB on opBNB '204': '714' }; class JsonRpcError extends Error { } export function getApiUrl() { const { sdkType, sdkVersion, projectId } = OptionsController.getSnapshot(); const url = new URL('https://rpc.walletconnect.org/v1/json-rpc'); url.searchParams.set('projectId', projectId); url.searchParams.set('st', sdkType); url.searchParams.set('sv', sdkVersion); url.searchParams.set('source', 'fund-wallet'); return url.toString(); } async function sendRequest(method, params) { const url = getApiUrl(); const { projectId } = OptionsController.getSnapshot(); const requestBody = { jsonrpc: '2.0', id: 1, method, params: { ...(params || {}), projectId } }; const response = await fetch(url, { method: 'POST', body: JSON.stringify(requestBody), headers: { 'Content-Type': 'application/json' } }); const json = await response.json(); if (json.error) { throw new JsonRpcError(json.error.message); } return json; } export async function getExchanges(params) { const response = await sendRequest('reown_getExchanges', params); return response.result; } export async function getPayUrl(params) { const response = await sendRequest('reown_getExchangePayUrl', params); return response.result; } export async function getBuyStatus(params) { const response = await sendRequest('reown_getExchangeBuyStatus', params); return response.result; } export function formatCaip19Asset(caipNetworkId, asset) { const { chainNamespace, chainId } = ParseUtil.parseCaipNetworkId(caipNetworkId); const chainInfo = CHAIN_ASSET_INFO_MAP[chainNamespace]; if (!chainInfo) { throw new Error(`Unsupported chain namespace for CAIP-19 formatting: ${chainNamespace}`); } let assetNamespace = chainInfo.native.assetNamespace; let assetReference = chainInfo.native.assetReference; if (asset !== 'native') { assetNamespace = chainInfo.defaultTokenNamespace; assetReference = asset; } else if (chainNamespace === 'eip155' && EVM_NATIVE_SLIP44_OVERRIDES[chainId]) { // Use chain-specific SLIP-44 coin type for native tokens assetReference = EVM_NATIVE_SLIP44_OVERRIDES[chainId]; } const networkPart = `${chainNamespace}:${chainId}`; return `${networkPart}/${assetNamespace}:${assetReference}`; } // -- Assets ------------------------------------------------------------------ // const ethereumETH = { network: 'eip155:1', asset: 'native', metadata: { name: 'Ethereum', symbol: 'ETH', decimals: 18 } }; const baseETH = { network: 'eip155:8453', asset: 'native', metadata: { name: 'Ethereum', symbol: 'ETH', decimals: 18 } }; export const baseUSDC = { network: 'eip155:8453', asset: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913', metadata: { name: 'USD Coin', symbol: 'USDC', decimals: 6 } }; export const baseSepoliaUSDC = { network: 'eip155:84532', asset: '0x036CbD53842c5426634e7929541eC2318f3dCF7e', metadata: { name: 'USD Coin', symbol: 'USDC', decimals: 6 } }; const baseSepoliaETH = { network: 'eip155:84532', asset: 'native', metadata: { name: 'Ethereum', symbol: 'ETH', decimals: 18 } }; const ethereumUSDC = { network: 'eip155:1', asset: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', metadata: { name: 'USD Coin', symbol: 'USDC', decimals: 6 } }; const arbitrumUSDC = { network: 'eip155:42161', asset: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831', metadata: { name: 'USD Coin', symbol: 'USDC', decimals: 6 } }; const polygonUSDC = { network: 'eip155:137', asset: '0x2791bca1f2de4661ed88a30c99a7a9449aa84174', metadata: { name: 'USD Coin', symbol: 'USDC', decimals: 6 } }; const solanaUSDC = { network: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp', asset: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', metadata: { name: 'USD Coin', symbol: 'USDC', decimals: 6 } }; const ethereumUSDT = { network: 'eip155:1', asset: '0xdAC17F958D2ee523a2206206994597C13D831ec7', metadata: { name: 'Tether USD', symbol: 'USDT', decimals: 6 } }; const optimismUSDT = { network: 'eip155:10', asset: '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58', metadata: { name: 'Tether USD', symbol: 'USDT', decimals: 6 } }; const arbitrumUSDT = { network: 'eip155:42161', asset: '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9', metadata: { name: 'Tether USD', symbol: 'USDT', decimals: 6 } }; const polygonUSDT = { network: 'eip155:137', asset: '0xc2132d05d31c914a87c6611c10748aeb04b58e8f', metadata: { name: 'Tether USD', symbol: 'USDT', decimals: 6 } }; const solanaUSDT = { network: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp', asset: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB', metadata: { name: 'Tether USD', symbol: 'USDT', decimals: 6 } }; const solanaSOL = { network: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp', asset: 'native', metadata: { name: 'Solana', symbol: 'SOL', decimals: 9 } }; export const assets = { ethereumETH, baseETH, baseUSDC, baseSepoliaETH, ethereumUSDC, arbitrumUSDC, polygonUSDC, solanaUSDC, ethereumUSDT, optimismUSDT, arbitrumUSDT, polygonUSDT, solanaUSDT, solanaSOL }; export function getPaymentAssetsForNetwork(network) { return Object.values(assets).filter(asset => asset.network === network); } //# sourceMappingURL=ExchangeUtil.js.map