mirror of
https://github.com/luxfi/bridge.git
synced 2026-09-24 00:26:46 +00:00
update: remove api and moved to new server
This commit is contained in:
@@ -8,7 +8,7 @@ export const parameters = {
|
||||
const preview: Preview = {
|
||||
loaders: [
|
||||
async () => ({
|
||||
settings: await (await fetch(`https://bridge-api.layerswap.io/api/settings?version=sandbox`)).json(),
|
||||
settings: await (await fetch(`${process.env.NEXT_PUBLIC_BACKEND_API}/settings?version=sandbox`)).json(),
|
||||
}),
|
||||
],
|
||||
parameters: {
|
||||
|
||||
@@ -8,7 +8,7 @@ export const parameters = {
|
||||
const preview: Preview = {
|
||||
loaders: [
|
||||
async () => ({
|
||||
settings: await (await fetch(`https://api-bridge.lux.network/settings?version=sandbox`)).json(),
|
||||
settings: await (await fetch(`${process.env.NEXT_PUBLIC_BACKEND_API}/settings?version=sandbox`)).json(),
|
||||
}),
|
||||
],
|
||||
parameters: {
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
import type { NextRequest, NextResponse } from 'next/server'
|
||||
|
||||
/**
|
||||
* get limit data for swap
|
||||
* /limits/from/fromCurrency/to/toCurrency?version=
|
||||
*
|
||||
* @param req { amount, version, params: [source, source_asset, destination, destination_asset] }
|
||||
* @param res
|
||||
*/
|
||||
|
||||
export async function GET(
|
||||
req: NextRequest
|
||||
) {
|
||||
//const { amount, version, params } = req.query;
|
||||
//const [source, source_asset, destination, destination_asset] = params as string[];
|
||||
return Response.json(
|
||||
{ data: {
|
||||
manual_min_amount: 0.1,
|
||||
manual_min_amount_in_usd: 0,
|
||||
max_amount: 100,
|
||||
max_amount_in_usd: 0,
|
||||
wallet_min_amount: 0,
|
||||
wallet_min_amount_in_usd: 0
|
||||
}},
|
||||
{
|
||||
status: 200,
|
||||
}
|
||||
)
|
||||
|
||||
}
|
||||
@@ -1,71 +0,0 @@
|
||||
import type { NextRequest } from 'next/server';
|
||||
import { getTokenPrice } from "@/util/tokenHelper";
|
||||
|
||||
// https://github.com/vercel/next.js/discussions/62725
|
||||
export const dynamic = 'force-dynamic'
|
||||
|
||||
|
||||
/**
|
||||
* get quote swap information
|
||||
* api/quote?source_network=&source_token=&destination_network=&destination_token=&amount=&refuel=&use_deposit_address=
|
||||
* @param req
|
||||
* @param res
|
||||
* @returns
|
||||
*/
|
||||
export async function GET(
|
||||
req: NextRequest,
|
||||
) {
|
||||
// source_network=ETHEREUM_SEPOLIA&source_token=USDC&destination_network=ARBITRUM_SEPOLIA&destination_token=USDC&amount=1.245766&refuel=false&use_deposit_address=false
|
||||
try {
|
||||
|
||||
const searchParams = req.nextUrl.searchParams
|
||||
const source_token = searchParams.get('source_token')!
|
||||
const destination_token = searchParams.get('destination_token')!
|
||||
const amount = searchParams.get('amount')!
|
||||
|
||||
/*
|
||||
const {
|
||||
source_network,
|
||||
source_token,
|
||||
destination_network,
|
||||
destination_token,
|
||||
amount,
|
||||
refuel,
|
||||
use_deposit_address,
|
||||
} = req.query;
|
||||
*/
|
||||
|
||||
const [sourcePrice, destinationPrice] = await Promise.all([
|
||||
getTokenPrice(String(source_token)),
|
||||
getTokenPrice(String(destination_token))
|
||||
]);
|
||||
|
||||
return Response.json(
|
||||
{
|
||||
data: {
|
||||
quote: {
|
||||
receive_amount: Number(amount) * sourcePrice / destinationPrice,
|
||||
min_receive_amount: 0.975,
|
||||
blockchain_fee: 0.145766, //we need to estimate blockchain fee.
|
||||
service_fee: 0.01, //our bridge service fee is 1%. or We should make no fee for our bridge currently.
|
||||
avg_completion_time: "00:00:47.4595530", // it should be about 20 min for btc, and 3 ~ 4 mins for evm chains.
|
||||
refuel_in_source: null,
|
||||
slippage: 0.025,
|
||||
total_fee: 0.245766,
|
||||
total_fee_in_usd: 0.245766,
|
||||
},
|
||||
refuel: null,
|
||||
reward: {},
|
||||
}
|
||||
},
|
||||
{
|
||||
status: 200,
|
||||
}
|
||||
)
|
||||
}
|
||||
catch (error: any) {
|
||||
|
||||
console.error("Error in fetching destinations", error);
|
||||
return new Response(null, {status: 500, statusText: error.message ?? "Error in fetching destinations"})
|
||||
}
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
import type { NextRequest, NextResponse } from 'next/server'
|
||||
|
||||
import { getTokenPrice } from "@/util/tokenHelper";
|
||||
|
||||
/**
|
||||
* get rate information for the swap
|
||||
* /rate/source_network/source_asset/destination_network/destination_asset?amount=&version=
|
||||
* @param req
|
||||
* @param res
|
||||
*/
|
||||
export default async function handler(
|
||||
req: NextRequest,
|
||||
res: NextResponse<{
|
||||
data: {
|
||||
wallet_fee_in_usd: number,
|
||||
wallet_fee: number,
|
||||
wallet_receive_amount: number,
|
||||
manual_fee_in_usd: number,
|
||||
manual_fee: number,
|
||||
manual_receive_amount: number,
|
||||
avg_completion_time: {
|
||||
total_minutes: number,
|
||||
total_seconds: number,
|
||||
total_hours: number
|
||||
},
|
||||
fee_usd_price: number
|
||||
}
|
||||
}>
|
||||
) {
|
||||
const { amount, version, params } = req.query;
|
||||
const [source, source_asset, destination, destination_asset] = params as string[];
|
||||
|
||||
const [sourcePrice, destinationPrice] = await Promise.all([
|
||||
getTokenPrice(source_asset),
|
||||
getTokenPrice(destination_asset)
|
||||
]);
|
||||
|
||||
res.status(200).json({
|
||||
data: {
|
||||
wallet_fee_in_usd: 10,
|
||||
wallet_fee: 0.1,
|
||||
wallet_receive_amount: Number(amount),
|
||||
manual_fee_in_usd: 0,
|
||||
manual_fee: 0,
|
||||
manual_receive_amount: Number(amount) * sourcePrice / destinationPrice,
|
||||
avg_completion_time: {
|
||||
total_minutes: 2,
|
||||
total_seconds: 0,
|
||||
total_hours: 0,
|
||||
},
|
||||
fee_usd_price: 10,
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
import type { NextRequest } from 'next/server';
|
||||
import { mainnetSettings, testnetSettings } from "@/settings";
|
||||
|
||||
export async function GET (
|
||||
req: NextRequest,
|
||||
) {
|
||||
// const versionFromQuery = req.query.version as string;
|
||||
// const isMainnet =
|
||||
// versionFromQuery === "mainnet" ||
|
||||
// process.env.NEXT_PUBLIC_API_VERSION === "mainnet";
|
||||
// const settings = isMainnet ? mainnetSettings : testnetSettings;
|
||||
|
||||
return Response.json(mainnetSettings, {status: 200})
|
||||
}
|
||||
@@ -1,16 +1,16 @@
|
||||
'use client';
|
||||
|
||||
import React from 'react';
|
||||
import AuthWizard from '@/components/Wizard/AuthWizard';
|
||||
import getBridgeSettings from '@/util/getBridgeSettings';
|
||||
import { redirect } from 'next/navigation';
|
||||
import { useSettingsContainer } from '@/context/settings';
|
||||
import { FormWizardProvider } from '@/context/formWizardProvider';
|
||||
import { AuthStep } from '@/Models/Wizard';
|
||||
import AuthWizard from '@/components/Wizard/AuthWizard';
|
||||
import { SwapDataProvider } from '@/context/swap';
|
||||
import { BridgeAppSettings } from '@/Models/BridgeAppSettings';
|
||||
import getBridgeSettings from '@/util/getBridgeSettings';
|
||||
|
||||
const AuthPage: React.FC = async () => {
|
||||
const AuthPage = async () => {
|
||||
try {
|
||||
const settings = await getBridgeSettings();
|
||||
const settingsContainer = useSettingsContainer();
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import React from 'react'
|
||||
|
||||
import Swapper from "@/components/Swapper"
|
||||
|
||||
const Page: React.FC = () => (
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use client'
|
||||
import { ErrorBoundary } from 'react-error-boundary'
|
||||
import { useSearchParams } from 'next/navigation'
|
||||
|
||||
import axios from 'axios'
|
||||
import * as Sentry from '@sentry/nextjs'
|
||||
|
||||
import { TooltipProvider } from '@hanzo/ui/primitives'
|
||||
@@ -30,6 +30,7 @@ import type { ErrorInfo, PropsWithChildren } from 'react'
|
||||
const INTERCOM_APP_ID = 'o1kmvctg'
|
||||
import '@rainbow-me/rainbowkit/styles.css'
|
||||
import { ToastProvider } from '@/context/toast-provider'
|
||||
import useAsyncEffect from 'use-async-effect'
|
||||
|
||||
const Contexts: React.FC<
|
||||
{
|
||||
@@ -38,6 +39,11 @@ const Contexts: React.FC<
|
||||
> = ({ settings, children }) => {
|
||||
const searchParams = useSearchParams()
|
||||
|
||||
useAsyncEffect(async() => {
|
||||
const settings = await axios.get(`${process.env.NEXT_PUBLIC_BACKEND_API}/networks?version=mainnet`)
|
||||
console.log("::settings;;;", settings)
|
||||
}, [])
|
||||
|
||||
// :aa These were was all that getServerSideProps() ever returned.
|
||||
// So seems clearest to just do it this way.
|
||||
const _settings = settings ?? {
|
||||
|
||||
@@ -1,132 +1,18 @@
|
||||
// import React, { type PropsWithChildren } from "react";
|
||||
|
||||
// import {
|
||||
// Chain,
|
||||
// WagmiConfig,
|
||||
// configureChains,
|
||||
// createConfig,
|
||||
// mainnet,
|
||||
// sepolia,
|
||||
// } from "wagmi";
|
||||
// import { publicProvider } from "wagmi/providers/public";
|
||||
|
||||
// import {
|
||||
// connectorsForWallets,
|
||||
// RainbowKitProvider,
|
||||
// DisclaimerComponent,
|
||||
// AvatarComponent,
|
||||
// } from "@rainbow-me/rainbowkit";
|
||||
|
||||
// import {
|
||||
// walletConnectWallet,
|
||||
// rainbowWallet,
|
||||
// metaMaskWallet,
|
||||
// coinbaseWallet,
|
||||
// bitgetWallet,
|
||||
// argentWallet,
|
||||
// phantomWallet,
|
||||
// } from "@rainbow-me/rainbowkit/wallets";
|
||||
|
||||
// import { useSettingsState } from "../context/settings";
|
||||
// import { NetworkType } from "../Models/CryptoNetwork";
|
||||
// import resolveChain from "../lib/resolveChain";
|
||||
// import AddressIcon from "./AddressIcon";
|
||||
// import configureRKTheme from "../styles/configureRKTheme";
|
||||
// networks
|
||||
// import mainnets from "@/settings/mainnet/networks.json";
|
||||
// import testnets from "@/settings/testnet/networks.json";
|
||||
|
||||
// const rkTheme = configureRKTheme();
|
||||
// const projectId = process.env.NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID || "";
|
||||
|
||||
// const RainbowKitComponent: React.FC<PropsWithChildren> = ({ children }) => {
|
||||
// const settings = useSettingsState();
|
||||
|
||||
// const isChain = (c: Chain | undefined): c is Chain => c != undefined;
|
||||
// const networks = [...mainnets, ...testnets]
|
||||
// .filter((n) => n.type === NetworkType.EVM)
|
||||
// .sort((a, b) => Number(a.chain_id) - Number(b.chain_id))
|
||||
// .map(resolveChain)
|
||||
// .filter(isChain);
|
||||
|
||||
// const { chains, publicClient } = configureChains(
|
||||
// networks?.length > 0 ? [...networks] : [mainnet],
|
||||
// [publicProvider()]
|
||||
// );
|
||||
|
||||
// const connectors = connectorsForWallets([
|
||||
// {
|
||||
// groupName: "Popular",
|
||||
// wallets: [
|
||||
// metaMaskWallet({ projectId, chains }),
|
||||
// walletConnectWallet({ projectId, chains }),
|
||||
// ],
|
||||
// },
|
||||
// {
|
||||
// groupName: "Wallets",
|
||||
// wallets: [
|
||||
// coinbaseWallet({ chains, appName: "Bridge" }),
|
||||
// argentWallet({ projectId, chains }),
|
||||
// bitgetWallet({ projectId, chains }),
|
||||
// rainbowWallet({ projectId, chains }),
|
||||
// phantomWallet({ chains }),
|
||||
// ],
|
||||
// },
|
||||
// ]);
|
||||
|
||||
// const wagmiConfig = createConfig({
|
||||
// autoConnect: true,
|
||||
// connectors,
|
||||
// publicClient,
|
||||
// });
|
||||
|
||||
// const disclaimer: DisclaimerComponent = ({ Text }) => (
|
||||
// <Text>Thanks for choosing the Lux Bridge!</Text>
|
||||
// );
|
||||
|
||||
// const CustomAvatar: AvatarComponent = ({ address, size }) => {
|
||||
// return <AddressIcon address={address} size={size} />;
|
||||
// };
|
||||
|
||||
// return (
|
||||
// <WagmiConfig config={wagmiConfig}>
|
||||
// <RainbowKitProvider
|
||||
// avatar={CustomAvatar}
|
||||
// // modalSize="compact"
|
||||
// chains={chains}
|
||||
// theme={rkTheme}
|
||||
// appInfo={{
|
||||
// appName: "LuxBridge",
|
||||
// learnMoreUrl: "https://docs.bridge.lux.network/",
|
||||
// disclaimer: disclaimer,
|
||||
// }}
|
||||
// >
|
||||
// {children}
|
||||
// </RainbowKitProvider>
|
||||
// </WagmiConfig>
|
||||
// );
|
||||
// };
|
||||
|
||||
// export default RainbowKitComponent;
|
||||
|
||||
"use client";
|
||||
import React from "react";
|
||||
import { useTheme } from "next-themes";
|
||||
'use client'
|
||||
import React from 'react'
|
||||
import Image from 'next/image'
|
||||
import resolveChain from '@/lib/resolveChain'
|
||||
import mainnets from '@/settings/mainnet/networks.json'
|
||||
import testnets from '@/settings/testnet/networks.json'
|
||||
import {
|
||||
RainbowKitProvider,
|
||||
darkTheme,
|
||||
lightTheme,
|
||||
type AvatarComponent,
|
||||
type DisclaimerComponent,
|
||||
} from "@rainbow-me/rainbowkit";
|
||||
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
||||
import { WagmiProvider } from "wagmi";
|
||||
import { useAtom } from "jotai";
|
||||
import Image from "next/image";
|
||||
import { NetworkType } from "@/Models/CryptoNetwork";
|
||||
import resolveChain from "@/lib/resolveChain";
|
||||
import mainnets from "@/settings/mainnet/networks.json";
|
||||
import testnets from "@/settings/testnet/networks.json";
|
||||
} from '@rainbow-me/rainbowkit'
|
||||
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
|
||||
import { WagmiProvider } from 'wagmi'
|
||||
import { NetworkType } from '@/Models/CryptoNetwork'
|
||||
|
||||
import {
|
||||
metaMaskWallet,
|
||||
@@ -136,69 +22,51 @@ import {
|
||||
ledgerWallet,
|
||||
phantomWallet,
|
||||
okxWallet,
|
||||
} from "@rainbow-me/rainbowkit/wallets";
|
||||
import { type Chain } from "viem";
|
||||
} from '@rainbow-me/rainbowkit/wallets'
|
||||
//types
|
||||
import { type Chain } from 'viem'
|
||||
import { type Config } from 'wagmi'
|
||||
import { getDefaultWallets, getDefaultConfig } from '@rainbow-me/rainbowkit'
|
||||
|
||||
import { getDefaultWallets, getDefaultConfig } from "@rainbow-me/rainbowkit";
|
||||
|
||||
import { sepolia, arbitrum, bsc, base, mainnet } from "wagmi/chains";
|
||||
import { type Config } from "wagmi";
|
||||
|
||||
const { wallets } = getDefaultWallets();
|
||||
|
||||
const chains: Chain[] = [
|
||||
arbitrum,
|
||||
bsc,
|
||||
base,
|
||||
sepolia,
|
||||
mainnet,
|
||||
// ...(process.env.NEXT_PUBLIC_ENABLE_TESTNETS === 'true' ? [sepolia] : []),
|
||||
];
|
||||
|
||||
const queryClient = new QueryClient();
|
||||
const { wallets } = getDefaultWallets()
|
||||
const queryClient = new QueryClient()
|
||||
|
||||
const RainbowProvider = ({ children }: { children: React.ReactNode }) => {
|
||||
const CustomAvatar: AvatarComponent = ({ address, ensImage, size }) => (
|
||||
<Image
|
||||
src={"/favicon.svg"}
|
||||
src={'/favicon.svg'}
|
||||
width={size}
|
||||
height={size}
|
||||
alt="avatar"
|
||||
className="rounded-full"
|
||||
/>
|
||||
);
|
||||
)
|
||||
|
||||
const disclaimer: DisclaimerComponent = ({ Text }) => (
|
||||
<Text>Thanks for choosing the Lux Bridge!</Text>
|
||||
);
|
||||
)
|
||||
const isChain = (c: Chain | undefined): c is Chain => c != undefined
|
||||
|
||||
const isChain = (c: Chain | undefined): c is Chain => c != undefined;
|
||||
|
||||
const networks = [...mainnets, ...testnets]
|
||||
const chains = [...mainnets, ...testnets]
|
||||
.filter((n) => n.type === NetworkType.EVM)
|
||||
.sort((a, b) => Number(a.chain_id) - Number(b.chain_id))
|
||||
.map(resolveChain)
|
||||
.filter(isChain);
|
||||
|
||||
// const { chains, publicClient } = configureChains(
|
||||
// networks?.length > 0 ? [...networks] : [mainnet],
|
||||
// [publicProvider()]
|
||||
// );
|
||||
.filter(isChain)
|
||||
|
||||
const config: Config = getDefaultConfig({
|
||||
appName: "RainbowKit demo",
|
||||
projectId: "e89228fed40d4c6e9520912214dfd68b",
|
||||
appName: 'Lux Bridge',
|
||||
projectId: 'e89228fed40d4c6e9520912214dfd68b',
|
||||
wallets: [
|
||||
...wallets,
|
||||
{
|
||||
groupName: "Other",
|
||||
groupName: 'Other',
|
||||
wallets: [metaMaskWallet],
|
||||
},
|
||||
],
|
||||
//@ts-expect-error "chains type"
|
||||
chains: networks,
|
||||
//@ts-expect-error "ignore chain type"
|
||||
chains: chains,
|
||||
ssr: true,
|
||||
});
|
||||
})
|
||||
|
||||
return (
|
||||
<WagmiProvider config={config}>
|
||||
@@ -206,10 +74,9 @@ const RainbowProvider = ({ children }: { children: React.ReactNode }) => {
|
||||
<RainbowKitProvider //
|
||||
avatar={CustomAvatar}
|
||||
modalSize="compact"
|
||||
// chains={chains}
|
||||
appInfo={{
|
||||
appName: "LuxBridge",
|
||||
learnMoreUrl: "https://docs.bridge.lux.network/",
|
||||
appName: 'LuxBridge',
|
||||
learnMoreUrl: 'https://docs.bridge.lux.network/',
|
||||
disclaimer: disclaimer,
|
||||
}}
|
||||
theme={darkTheme()}
|
||||
@@ -218,7 +85,7 @@ const RainbowProvider = ({ children }: { children: React.ReactNode }) => {
|
||||
</RainbowKitProvider>
|
||||
</QueryClientProvider>
|
||||
</WagmiProvider>
|
||||
);
|
||||
};
|
||||
)
|
||||
}
|
||||
|
||||
export default RainbowProvider;
|
||||
export default RainbowProvider
|
||||
|
||||
@@ -34,7 +34,6 @@ const useSettings = (): BridgeAppSettings => {
|
||||
|
||||
const container = useContext<SettingsContainer | null>(SettingsContext)
|
||||
|
||||
// console.log("::app settings:", Object.keys(data))
|
||||
if (container === undefined) {
|
||||
throw new Error("useSettings must be used within a SettingsProvider")
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
export default class AppSettings {
|
||||
static BridgeApiUri?: string = process.env.NEXT_PUBLIC_LS_BRIDGE_API;
|
||||
static BridgeApiUri?: string = process.env.NEXT_PUBLIC_BACKEND_API;
|
||||
static ApiVersion: string = process.env.NEXT_PUBLIC_API_VERSION || 'mainnet';
|
||||
static ExplorerURl: string = `https://explore.bridge.lux${process.env.NEXT_PUBLIC_API_VERSION === 'sandbox' ? '-test' : ''}.network`
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
import { v4 as uuidv4 } from 'uuid'
|
||||
import axios, { type AxiosInstance, type Method } from 'axios'
|
||||
|
||||
import { type BridgeSettings } from '../Models/BridgeSettings'
|
||||
import { SwapStatus } from '../Models/SwapStatus'
|
||||
import AppSettings from './AppSettings'
|
||||
import BridgeAuthApiClient from './userAuthApiClient'
|
||||
import { type BridgeSettings } from '@/Models/BridgeSettings'
|
||||
import { type CryptoNetwork } from '@/Models/CryptoNetwork'
|
||||
import { type Exchange } from '@/Models/Exchange'
|
||||
import { SwapStatus } from '@/Models/SwapStatus'
|
||||
import { InitializeInstance } from './axiosInterceptor'
|
||||
import { AuthRefreshFailedError } from './Errors/AuthRefreshFailedError'
|
||||
import { ApiResponse, EmptyApiResponse } from '../Models/ApiResponse'
|
||||
import BridgeAuthApiClient from './userAuthApiClient'
|
||||
import { type CryptoNetwork } from '../Models/CryptoNetwork'
|
||||
import { type Exchange } from '../Models/Exchange'
|
||||
|
||||
export default class BridgeApiClient {
|
||||
static apiBaseEndpoint?: string = AppSettings.BridgeApiUri
|
||||
|
||||
@@ -1,53 +1,32 @@
|
||||
// Importing JSON files for mainnet
|
||||
import mainnetDiscovery from './mainnet/discovery.json'
|
||||
import mainnetNetworks from './mainnet/networks.json'
|
||||
import mainnetDepositContractAddress from './testnet/deposit.json'
|
||||
import mainnetExchanges from './mainnet/exchanges.json'
|
||||
// Importing JSON files for testnet
|
||||
import testnetCurrencies from './testnet/currencies.json'
|
||||
import testnetDiscovery from './testnet/discovery.json'
|
||||
import testnetExchanges from './testnet/exchanges.json'
|
||||
import testnetNetworks from './testnet/networks.json'
|
||||
import testnetSources from './testnet/sources.json'
|
||||
import testnetDestinations from './testnet/destinations.json'
|
||||
import testnetDepositContractAddress from './testnet/deposit.json'
|
||||
// testnets
|
||||
import mainnetCurrencies from './mainnet/currencies.json'
|
||||
import mainnetExchanges from './mainnet/exchanges.json'
|
||||
import mainnetSources from './mainnet/sources.json'
|
||||
import mainnetDestinations from './mainnet/destinations.json'
|
||||
|
||||
export const mainnetSettings = {
|
||||
data: {
|
||||
currencies: [],
|
||||
discovery: mainnetDiscovery,
|
||||
exchanges: [],
|
||||
discovery: {},
|
||||
exchanges: mainnetExchanges,
|
||||
networks: [...mainnetNetworks, ...testnetNetworks],
|
||||
},
|
||||
sources: [],
|
||||
destinations: [],
|
||||
contractAddress: mainnetDepositContractAddress,
|
||||
contractAddress: {},
|
||||
error: null,
|
||||
// data: {
|
||||
// currencies: mainnetCurrencies,
|
||||
// discovery: mainnetDiscovery,
|
||||
// exchanges: mainnetExchanges,
|
||||
// networks: mainnetNetworks,
|
||||
// },
|
||||
// sources: mainnetSources,
|
||||
// destinations: mainnetDestinations,
|
||||
// contractAddress: mainnetDepositContractAddress,
|
||||
// error: null,
|
||||
}
|
||||
|
||||
export const testnetSettings = {
|
||||
data: {
|
||||
currencies: testnetCurrencies,
|
||||
discovery: testnetDiscovery,
|
||||
currencies: [],
|
||||
discovery: {},
|
||||
exchanges: testnetExchanges,
|
||||
networks: testnetNetworks,
|
||||
},
|
||||
sources: testnetSources,
|
||||
destinations: testnetDestinations,
|
||||
contractAddress: testnetDepositContractAddress,
|
||||
sources: [],
|
||||
destinations: [],
|
||||
contractAddress: {},
|
||||
error: null,
|
||||
}
|
||||
|
||||
@@ -1,127 +0,0 @@
|
||||
[
|
||||
{
|
||||
"asset": "BKT",
|
||||
"precision": 6,
|
||||
"usd_price": 0.00018693
|
||||
},
|
||||
{
|
||||
"asset": "TON",
|
||||
"precision": 7,
|
||||
"usd_price": 2.16
|
||||
},
|
||||
{
|
||||
"asset": "USDC",
|
||||
"precision": 2,
|
||||
"usd_price": 1.001
|
||||
},
|
||||
{
|
||||
"asset": "IMX",
|
||||
"precision": 6,
|
||||
"usd_price": 1.8
|
||||
},
|
||||
{
|
||||
"asset": "BTC",
|
||||
"precision": 6,
|
||||
"usd_price": 43523
|
||||
},
|
||||
{
|
||||
"asset": "LUX",
|
||||
"precision": 7,
|
||||
"usd_price": 0.0021
|
||||
},
|
||||
{
|
||||
"asset": "ETH",
|
||||
"precision": 6,
|
||||
"usd_price": 2191.53
|
||||
},
|
||||
{
|
||||
"asset": "LRC",
|
||||
"precision": 6,
|
||||
"usd_price": 0.225478
|
||||
},
|
||||
{
|
||||
"asset": "BNB",
|
||||
"precision": 6,
|
||||
"usd_price": 294.71
|
||||
},
|
||||
{
|
||||
"asset": "HT",
|
||||
"precision": 6,
|
||||
"usd_price": 2.42
|
||||
},
|
||||
{
|
||||
"asset": "OKT",
|
||||
"precision": 6,
|
||||
"usd_price": 17.69
|
||||
},
|
||||
{
|
||||
"asset": "FUSE",
|
||||
"precision": 6,
|
||||
"usd_price": 0.073532
|
||||
},
|
||||
{
|
||||
"asset": "MATIC",
|
||||
"precision": 6,
|
||||
"usd_price": 0.764774
|
||||
},
|
||||
{
|
||||
"asset": "OP",
|
||||
"precision": 6,
|
||||
"usd_price": 3.01
|
||||
},
|
||||
{
|
||||
"asset": "AVAX",
|
||||
"precision": 6,
|
||||
"usd_price": 31.97
|
||||
},
|
||||
{
|
||||
"asset": "MNT",
|
||||
"precision": 6,
|
||||
"usd_price": 0.582907
|
||||
},
|
||||
{
|
||||
"asset": "OSMO",
|
||||
"precision": 6,
|
||||
"usd_price": 1.71
|
||||
},
|
||||
{
|
||||
"asset": "KCS",
|
||||
"precision": 6,
|
||||
"usd_price": 9.79
|
||||
},
|
||||
{
|
||||
"asset": "SNX",
|
||||
"precision": 6,
|
||||
"usd_price": 3.16
|
||||
},
|
||||
{
|
||||
"asset": "USDT",
|
||||
"precision": 2,
|
||||
"usd_price": 0.999346
|
||||
},
|
||||
{
|
||||
"asset": "ASTR",
|
||||
"precision": 6,
|
||||
"usd_price": 0.117158
|
||||
},
|
||||
{
|
||||
"asset": "SOL",
|
||||
"precision": 6,
|
||||
"usd_price": 87.93
|
||||
},
|
||||
{
|
||||
"asset": "EVMOS",
|
||||
"precision": 6,
|
||||
"usd_price": 0.121364
|
||||
},
|
||||
{
|
||||
"asset": "SYS",
|
||||
"precision": 6,
|
||||
"usd_price": 0.120236
|
||||
},
|
||||
{
|
||||
"asset": "ZKS",
|
||||
"precision": 6,
|
||||
"usd_price": 0.072983
|
||||
}
|
||||
]
|
||||
@@ -1,36 +0,0 @@
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"contract_name": "",
|
||||
"contract_address": "0x9011E888251AB053B7bD1cdB598Db4f9DEd94714"
|
||||
},
|
||||
{
|
||||
"contract_name": "",
|
||||
"contract_address": "0xEAbCC110fAcBfebabC66Ad6f9E7B67288e720B59"
|
||||
},
|
||||
{
|
||||
"contract_name": "",
|
||||
"contract_address": "0x8d5081153aE1cfb41f5c932fe0b6Beb7E159cF84"
|
||||
},
|
||||
{
|
||||
"contract_name": "",
|
||||
"contract_address": "0xf8f12D0592e6d1bFe92ee16CaBCC4a6F26dAAe23"
|
||||
},
|
||||
{
|
||||
"contract_name": "",
|
||||
"contract_address": "0xFb66808f708e1d4D7D43a8c75596e84f94e06806"
|
||||
},
|
||||
{
|
||||
"contract_name": "",
|
||||
"contract_address": "0x313CF291c069C58D6bd61B0D672673462B8951bD"
|
||||
},
|
||||
{
|
||||
"contract_name": "",
|
||||
"contract_address": "0xf7f52257a6143cE6BbD12A98eF2B0a3d0C648079"
|
||||
},
|
||||
{
|
||||
"contract_name": "STARKNET",
|
||||
"contract_address": "0x012087325194323197379425C8f9d8c642ab7990ea0F58AEd184E607a300C303"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
{
|
||||
"evm": {
|
||||
"address": "0x903670c142c670260cf96929Da156370d0dBE93a",
|
||||
"memo": null
|
||||
},
|
||||
"TON": {
|
||||
"address": "UQCdW7qm_Kh3zX6YdBPxK9_bHq1D7gowVkDEb2ekxb9GdR8P",
|
||||
"memo": "BCE7D5F9B0A66291B221"
|
||||
},
|
||||
"btc": {
|
||||
"address": "bc1qx6t60aknh95vjmnudf48mfjvwm47a607prqv4t",
|
||||
"memo": null
|
||||
},
|
||||
"solana": {
|
||||
"address": "52n85bTwSqkXuZxsz5sVEtzC7WQDMva228iUY2wZkLN1",
|
||||
"memo": null
|
||||
},
|
||||
"xrp": {
|
||||
"address": "r956hi9B5RAcmni3nxuYEmCFVypm97cwwa",
|
||||
"memo": "4267978785"
|
||||
},
|
||||
"atom": {
|
||||
"address": "cosmos1jsm6fe9pw3dh4l4uqhrtxqnfrjj4cjspsx8c7f",
|
||||
"memo": "04626A736DEEEE52FF72"
|
||||
}
|
||||
}
|
||||
@@ -1,81 +0,0 @@
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"network": "IMMUTABLEX_SEPOLIA",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "ARBITRUM_SEPOLIA",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "STARKNET_GOERLI",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "POLYGON_MUMBAI",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "LOOPRING_SEPOLIA",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "ZKSYNCERA_GOERLI",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "LINEA_GOERLI",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "BASE_SEPOLIA",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "ETHEREUM_SEPOLIA",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "ARBITRUM_SEPOLIA",
|
||||
"asset": "USDC"
|
||||
},
|
||||
{
|
||||
"network": "STARKNET_GOERLI",
|
||||
"asset": "USDC"
|
||||
},
|
||||
{
|
||||
"network": "ETHEREUM_SEPOLIA",
|
||||
"asset": "USDC"
|
||||
},
|
||||
{
|
||||
"network": "OPTIMISM_SEPOLIA",
|
||||
"asset": "USDC"
|
||||
},
|
||||
{
|
||||
"network": "SOLANA_DEVNET",
|
||||
"asset": "USDC"
|
||||
},
|
||||
{
|
||||
"network": "STARKNET_SEPOLIA",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "STARKNET_SEPOLIA",
|
||||
"asset": "ARUSDC"
|
||||
},
|
||||
{
|
||||
"network": "METIS_SEPOLIA",
|
||||
"asset": "TMETIS"
|
||||
},
|
||||
{
|
||||
"network": "STARKNET_SEPOLIA",
|
||||
"asset": "DAI2"
|
||||
},
|
||||
{
|
||||
"network": "STARKNET_SEPOLIA",
|
||||
"asset": "DAI1"
|
||||
}
|
||||
],
|
||||
"error": null
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"identity_url": "https://identity-api.bridge.lux.network",
|
||||
"resource_storage_url": "https://prodlslayerswapbridgesa.blob.core.windows.net/",
|
||||
"o_auth_providers": [
|
||||
{
|
||||
"provider": "COINBASE",
|
||||
"oauth_connect_url": "https://www.coinbase.com/oauth/authorize?client_id=b43d0fb2e023a66cf7be30ef983f9ee78efedd3567269fcd7c9bd9dd0bb7a776&redirect_uri=https%3A%2F%2Fbridge-api.bridge.lux.network%2Fapi%2Fcallback%2Fcoinbase&response_type=code&account=all&scope=wallet%3Auser%3Aemail%2Cwallet%3Aaddresses%3Aread%2Cwallet%3Aaddresses%3Acreate&state=",
|
||||
"oauth_authorize_url": "https://www.coinbase.com/oauth/authorize?client_id=b43d0fb2e023a66cf7be30ef983f9ee78efedd3567269fcd7c9bd9dd0bb7a776&redirect_uri=https%3A%2F%2Fbridge-api.bridge.lux.network%2Fapi%2Fcallback%2Fcoinbase&response_type=code&account=all&scope=wallet%3Atransactions%3Aread%2Cwallet%3Auser%3Aread%2Cwallet%3Aaccounts%3Aread%2Cwallet%3Atransactions%3Asend%2Cwallet%3Auser%3Aemail&meta[send_limit_amount]=1&meta[send_limit_currency]=USD&meta[send_limit_period]=month&state="
|
||||
}
|
||||
]
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,73 +0,0 @@
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"network": "ETHEREUM_SEPOLIA",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "IMMUTABLEX_SEPOLIA",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "ARBITRUM_SEPOLIA",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "STARKNET_GOERLI",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "POLYGON_MUMBAI",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "LOOPRING_SEPOLIA",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "ZKSYNCERA_GOERLI",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "ETHEREUM_SEPOLIA",
|
||||
"asset": "USDC"
|
||||
},
|
||||
{
|
||||
"network": "ARBITRUM_SEPOLIA",
|
||||
"asset": "USDC"
|
||||
},
|
||||
{
|
||||
"network": "STARKNET_GOERLI",
|
||||
"asset": "USDC"
|
||||
},
|
||||
{
|
||||
"network": "OPTIMISM_SEPOLIA",
|
||||
"asset": "USDC"
|
||||
},
|
||||
{
|
||||
"network": "SOLANA_DEVNET",
|
||||
"asset": "USDC"
|
||||
},
|
||||
{
|
||||
"network": "STARKNET_SEPOLIA",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "STARKNET_SEPOLIA",
|
||||
"asset": "ARUSDC"
|
||||
},
|
||||
{
|
||||
"network": "METIS_SEPOLIA",
|
||||
"asset": "TMETIS"
|
||||
},
|
||||
{
|
||||
"network": "STARKNET_SEPOLIA",
|
||||
"asset": "DAI1"
|
||||
},
|
||||
{
|
||||
"network": "STARKNET_SEPOLIA",
|
||||
"asset": "DAI2"
|
||||
}
|
||||
],
|
||||
"error": null
|
||||
}
|
||||
@@ -1,127 +0,0 @@
|
||||
[
|
||||
{
|
||||
"asset": "BKT",
|
||||
"precision": 6,
|
||||
"usd_price": 0.00018693
|
||||
},
|
||||
{
|
||||
"asset": "IMX",
|
||||
"precision": 6,
|
||||
"usd_price": 1.83
|
||||
},
|
||||
{
|
||||
"asset": "BTC",
|
||||
"precision": 6,
|
||||
"usd_price": 43617
|
||||
},
|
||||
{
|
||||
"asset": "USDC",
|
||||
"precision": 2,
|
||||
"usd_price": 0.999836
|
||||
},
|
||||
{
|
||||
"asset": "ETH",
|
||||
"precision": 6,
|
||||
"usd_price": 2196.62
|
||||
},
|
||||
{
|
||||
"asset": "LUX",
|
||||
"precision": 7,
|
||||
"usd_price": 0.0021
|
||||
},
|
||||
{
|
||||
"asset": "LRC",
|
||||
"precision": 6,
|
||||
"usd_price": 0.22762
|
||||
},
|
||||
{
|
||||
"asset": "BNB",
|
||||
"precision": 6,
|
||||
"usd_price": 295.57
|
||||
},
|
||||
{
|
||||
"asset": "OKT",
|
||||
"precision": 6,
|
||||
"usd_price": 17.67
|
||||
},
|
||||
{
|
||||
"asset": "FUSE",
|
||||
"precision": 6,
|
||||
"usd_price": 0.074021
|
||||
},
|
||||
{
|
||||
"asset": "MATIC",
|
||||
"precision": 6,
|
||||
"usd_price": 0.772845
|
||||
},
|
||||
{
|
||||
"asset": "AVAX",
|
||||
"precision": 6,
|
||||
"usd_price": 32.15
|
||||
},
|
||||
{
|
||||
"asset": "MNT",
|
||||
"precision": 6,
|
||||
"usd_price": 0.584164
|
||||
},
|
||||
{
|
||||
"asset": "TON",
|
||||
"precision": 7,
|
||||
"usd_price": 2.17
|
||||
},
|
||||
{
|
||||
"asset": "HT",
|
||||
"precision": 6,
|
||||
"usd_price": 2.42
|
||||
},
|
||||
{
|
||||
"asset": "OSMO",
|
||||
"precision": 6,
|
||||
"usd_price": 1.71
|
||||
},
|
||||
{
|
||||
"asset": "OP",
|
||||
"precision": 6,
|
||||
"usd_price": 3.04
|
||||
},
|
||||
{
|
||||
"asset": "SNX",
|
||||
"precision": 6,
|
||||
"usd_price": 3.2
|
||||
},
|
||||
{
|
||||
"asset": "USDT",
|
||||
"precision": 2,
|
||||
"usd_price": 1
|
||||
},
|
||||
{
|
||||
"asset": "ASTR",
|
||||
"precision": 6,
|
||||
"usd_price": 0.120619
|
||||
},
|
||||
{
|
||||
"asset": "SOL",
|
||||
"precision": 6,
|
||||
"usd_price": 89.04
|
||||
},
|
||||
{
|
||||
"asset": "EVMOS",
|
||||
"precision": 6,
|
||||
"usd_price": 0.121623
|
||||
},
|
||||
{
|
||||
"asset": "SYS",
|
||||
"precision": 6,
|
||||
"usd_price": 0.120383
|
||||
},
|
||||
{
|
||||
"asset": "KCS",
|
||||
"precision": 6,
|
||||
"usd_price": 9.84
|
||||
},
|
||||
{
|
||||
"asset": "ZKS",
|
||||
"precision": 6,
|
||||
"usd_price": 0.072962
|
||||
}
|
||||
]
|
||||
@@ -1,36 +0,0 @@
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"contract_name": "",
|
||||
"contract_address": "0x9011E888251AB053B7bD1cdB598Db4f9DEd94714"
|
||||
},
|
||||
{
|
||||
"contract_name": "",
|
||||
"contract_address": "0xEAbCC110fAcBfebabC66Ad6f9E7B67288e720B59"
|
||||
},
|
||||
{
|
||||
"contract_name": "",
|
||||
"contract_address": "0x8d5081153aE1cfb41f5c932fe0b6Beb7E159cF84"
|
||||
},
|
||||
{
|
||||
"contract_name": "",
|
||||
"contract_address": "0xf8f12D0592e6d1bFe92ee16CaBCC4a6F26dAAe23"
|
||||
},
|
||||
{
|
||||
"contract_name": "",
|
||||
"contract_address": "0xFb66808f708e1d4D7D43a8c75596e84f94e06806"
|
||||
},
|
||||
{
|
||||
"contract_name": "",
|
||||
"contract_address": "0x313CF291c069C58D6bd61B0D672673462B8951bD"
|
||||
},
|
||||
{
|
||||
"contract_name": "",
|
||||
"contract_address": "0xf7f52257a6143cE6BbD12A98eF2B0a3d0C648079"
|
||||
},
|
||||
{
|
||||
"contract_name": "STARKNET",
|
||||
"contract_address": "0x012087325194323197379425C8f9d8c642ab7990ea0F58AEd184E607a300C303"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
{
|
||||
"evm": {
|
||||
"address": "0xD4952A4c2644469D59F9dE340E0e829e51836Dec",
|
||||
"memo": null
|
||||
},
|
||||
"TON": {
|
||||
"address": "0QDMXrj5n4ldLGoq9l0svifDORdTLnKsOEH6ClAEXX5qj1Sq",
|
||||
"memo": "70A09E871BFAFCB0A216"
|
||||
},
|
||||
"btc": {
|
||||
"address": "tb1qgps3lt0lz3mufdnmj3lhcnpfh48s2u53996xdv",
|
||||
"memo": null
|
||||
},
|
||||
"solana": {
|
||||
"address": "DsBiAAy92HtjXKFf78ZTQKCaMDuMGyUeh6v7pPSHrVbY",
|
||||
"memo": null
|
||||
}
|
||||
}
|
||||
@@ -1,81 +0,0 @@
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"network": "IMMUTABLEX_SEPOLIA",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "ARBITRUM_SEPOLIA",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "STARKNET_GOERLI",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "POLYGON_MUMBAI",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "LOOPRING_SEPOLIA",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "ZKSYNCERA_GOERLI",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "LINEA_GOERLI",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "BASE_SEPOLIA",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "ETHEREUM_SEPOLIA",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "ARBITRUM_SEPOLIA",
|
||||
"asset": "USDC"
|
||||
},
|
||||
{
|
||||
"network": "STARKNET_GOERLI",
|
||||
"asset": "USDC"
|
||||
},
|
||||
{
|
||||
"network": "ETHEREUM_SEPOLIA",
|
||||
"asset": "USDC"
|
||||
},
|
||||
{
|
||||
"network": "OPTIMISM_SEPOLIA",
|
||||
"asset": "USDC"
|
||||
},
|
||||
{
|
||||
"network": "SOLANA_DEVNET",
|
||||
"asset": "USDC"
|
||||
},
|
||||
{
|
||||
"network": "STARKNET_SEPOLIA",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "STARKNET_SEPOLIA",
|
||||
"asset": "ARUSDC"
|
||||
},
|
||||
{
|
||||
"network": "METIS_SEPOLIA",
|
||||
"asset": "TMETIS"
|
||||
},
|
||||
{
|
||||
"network": "STARKNET_SEPOLIA",
|
||||
"asset": "DAI2"
|
||||
},
|
||||
{
|
||||
"network": "STARKNET_SEPOLIA",
|
||||
"asset": "DAI1"
|
||||
}
|
||||
],
|
||||
"error": null
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"identity_url": "https://identity-api.bridge.lux.network",
|
||||
"resource_storage_url": "https://prodlslayerswapbridgesa.blob.core.windows.net/",
|
||||
"o_auth_providers": [
|
||||
{
|
||||
"provider": "COINBASE",
|
||||
"oauth_connect_url": "https://www.coinbase.com/oauth/authorize?client_id=b43d0fb2e023a66cf7be30ef983f9ee78efedd3567269fcd7c9bd9dd0bb7a776&redirect_uri=https%3A%2F%2Fbridge-api.bridge.lux.network%2Fapi%2Fcallback%2Fcoinbase&response_type=code&account=all&scope=wallet%3Auser%3Aemail%2Cwallet%3Aaddresses%3Aread%2Cwallet%3Aaddresses%3Acreate&state=",
|
||||
"oauth_authorize_url": "https://www.coinbase.com/oauth/authorize?client_id=b43d0fb2e023a66cf7be30ef983f9ee78efedd3567269fcd7c9bd9dd0bb7a776&redirect_uri=https%3A%2F%2Fbridge-api.bridge.lux.network%2Fapi%2Fcallback%2Fcoinbase&response_type=code&account=all&scope=wallet%3Atransactions%3Aread%2Cwallet%3Auser%3Aread%2Cwallet%3Aaccounts%3Aread%2Cwallet%3Atransactions%3Asend%2Cwallet%3Auser%3Aemail&meta[send_limit_amount]=1&meta[send_limit_currency]=USD&meta[send_limit_period]=month&state="
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"data": {
|
||||
"manual_min_amount_in_usd": 5.003487,
|
||||
"manual_min_amount": 0.001967,
|
||||
"wallet_min_amount_in_usd": 5.003487,
|
||||
"wallet_min_amount": 0.001967,
|
||||
"max_amount_in_usd": 25.4281,
|
||||
"max_amount": 0.01
|
||||
},
|
||||
"error": null
|
||||
}
|
||||
@@ -1,73 +0,0 @@
|
||||
{
|
||||
"data": [
|
||||
{
|
||||
"network": "ETHEREUM_SEPOLIA",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "IMMUTABLEX_SEPOLIA",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "ARBITRUM_SEPOLIA",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "STARKNET_GOERLI",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "POLYGON_MUMBAI",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "LOOPRING_SEPOLIA",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "ZKSYNCERA_GOERLI",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "ETHEREUM_SEPOLIA",
|
||||
"asset": "USDC"
|
||||
},
|
||||
{
|
||||
"network": "ARBITRUM_SEPOLIA",
|
||||
"asset": "USDC"
|
||||
},
|
||||
{
|
||||
"network": "STARKNET_GOERLI",
|
||||
"asset": "USDC"
|
||||
},
|
||||
{
|
||||
"network": "OPTIMISM_SEPOLIA",
|
||||
"asset": "USDC"
|
||||
},
|
||||
{
|
||||
"network": "SOLANA_DEVNET",
|
||||
"asset": "USDC"
|
||||
},
|
||||
{
|
||||
"network": "STARKNET_SEPOLIA",
|
||||
"asset": "ETH"
|
||||
},
|
||||
{
|
||||
"network": "STARKNET_SEPOLIA",
|
||||
"asset": "ARUSDC"
|
||||
},
|
||||
{
|
||||
"network": "METIS_SEPOLIA",
|
||||
"asset": "TMETIS"
|
||||
},
|
||||
{
|
||||
"network": "STARKNET_SEPOLIA",
|
||||
"asset": "DAI1"
|
||||
},
|
||||
{
|
||||
"network": "STARKNET_SEPOLIA",
|
||||
"asset": "DAI2"
|
||||
}
|
||||
],
|
||||
"error": null
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
import type { BridgeSettings } from '@/Models/BridgeSettings'
|
||||
import type { CryptoNetwork } from '@/Models/CryptoNetwork'
|
||||
import type { Exchange } from '@/Models/Exchange'
|
||||
import type { CryptoNetwork } from '@/Models/CryptoNetwork'
|
||||
import BridgeApiClient from '@/lib/BridgeApiClient'
|
||||
|
||||
const getBridgeSettings = async (
|
||||
@@ -31,10 +31,14 @@ const getBridgeSettings = async (
|
||||
}
|
||||
}
|
||||
|
||||
const apiClient = new BridgeApiClient()
|
||||
const { data } = await apiClient.GetSettingsAsync()
|
||||
// const apiClient = new BridgeApiClient()
|
||||
// const { data } = await apiClient.GetSettingsAsync()
|
||||
|
||||
return data
|
||||
// return data
|
||||
return {
|
||||
networks: [],
|
||||
exchanges: [],
|
||||
}
|
||||
}
|
||||
|
||||
export default getBridgeSettings
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
import axios from 'axios'
|
||||
|
||||
const getSettings = async () => {
|
||||
const settings = await axios.get(`${process.env.NEXT_PUBLIC_BACKEND_API}/setttings?version=${process.env.NEXT_PUBLIC_API_VERSION}`)
|
||||
return settings
|
||||
}
|
||||
|
||||
export default getSettings
|
||||
@@ -1,28 +1,29 @@
|
||||
'use client'
|
||||
|
||||
import React, { ReactNode } from 'react'
|
||||
import useSWR from 'swr';
|
||||
import AppSettings from '@/lib/AppSettings';
|
||||
import { ApiResponse } from '@/models/ApiResponse';
|
||||
import { CryptoNetwork } from '@/models/CryptoNetwork';
|
||||
import { BridgeAppSettings } from '@/models/BridgeAppSettings';
|
||||
import React, { ReactNode } from 'react'
|
||||
import useSWR from 'swr';
|
||||
|
||||
const SettingsContext = React.createContext<BridgeAppSettings | null>(null);
|
||||
|
||||
export const SettingsProvider: React.FC<{ children: ReactNode }> = ({ children }) => {
|
||||
|
||||
const fetcher = (url: string) => fetch(url).then(r => r.json());
|
||||
// const version = process.env.NEXT_PUBLIC_API_VERSION;
|
||||
const version = 'sandbox'
|
||||
const version = AppSettings.ApiVersion;
|
||||
|
||||
const { data: netWorkData } = useSWR<ApiResponse<CryptoNetwork[]>>(`${AppSettings.BridgeApiUri}/api/networks?version=${version}`, fetcher, { dedupingInterval: 60000 })
|
||||
const { data: exchangeData } = useSWR<ApiResponse<CryptoNetwork[]>>(`${AppSettings.BridgeApiUri}/api/exchanges?version=${version}`, fetcher, { dedupingInterval: 60000 })
|
||||
const { data: netWorkData } = useSWR<ApiResponse<CryptoNetwork[]>>(`${AppSettings.BridgeApiUri}/networks?version=${version}`, fetcher, { dedupingInterval: 60000 })
|
||||
const { data: exchangeData } = useSWR<ApiResponse<CryptoNetwork[]>>(`${AppSettings.BridgeApiUri}/exchanges?version=${version}`, fetcher, { dedupingInterval: 60000 })
|
||||
|
||||
const settings = {
|
||||
networks: netWorkData?.data,
|
||||
exchanges: exchangeData?.data,
|
||||
}
|
||||
|
||||
console.log("settings::::::", settings)
|
||||
|
||||
let appSettings = new BridgeAppSettings(settings);
|
||||
|
||||
return (
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
export default class AppSettings {
|
||||
static BridgeApiUri: string | undefined = process.env.NEXT_PUBLIC_BRIDGE_API;
|
||||
static BridgeApiUri: string | undefined = process.env.NEXT_PUBLIC_BACKEND_API;
|
||||
static ApiVersion: string = process.env.NEXT_PUBLIC_API_VERSION || 'mainnet';
|
||||
}
|
||||
|
||||
@@ -25,6 +25,11 @@ spec:
|
||||
env:
|
||||
- name: PORT
|
||||
value: "6000"
|
||||
- name: COINBASE_API_KEY
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: bridge-server-secret
|
||||
key: COINBASE_API_KEY
|
||||
- name: POSTGRESQL_URL
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
|
||||
@@ -6,7 +6,7 @@ import axios from "axios";
|
||||
export const getTokenPrice = async (token_id: string) => {
|
||||
try {
|
||||
const headers = {
|
||||
"x-api-key": process.env.NEXT_PUBLIC_COINBASE_API_KEY,
|
||||
"x-api-key": process.env.COINBASE_API_KEY,
|
||||
accept: "application/json",
|
||||
};
|
||||
if (token_id === "LUX") {
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
import { Router, Request, Response } from "express"
|
||||
import { getTokenPrice } from "@/lib/tokens"
|
||||
|
||||
const router: Router = Router()
|
||||
|
||||
// route: api/limits/from/fromCurrency/to/toCurrency?version=
|
||||
// description:
|
||||
// method: GET and it's public
|
||||
router.get("/from/:fromCurrency/to/:toCurrency", async (req: Request, res: Response) => {
|
||||
try {
|
||||
// Access the route parameters
|
||||
const { fromCurrency, toCurrency } = req.params
|
||||
// Access the query parameter
|
||||
const version = req.query.version
|
||||
|
||||
res.status(200).json({
|
||||
data: {
|
||||
manual_min_amount: 0.1,
|
||||
manual_min_amount_in_usd: 0,
|
||||
max_amount: 100,
|
||||
max_amount_in_usd: 0,
|
||||
wallet_min_amount: 0,
|
||||
wallet_min_amount_in_usd: 0
|
||||
}
|
||||
})
|
||||
} catch (error: any) {
|
||||
res.status(500).json({ error: error })
|
||||
}
|
||||
})
|
||||
|
||||
export default router
|
||||
@@ -0,0 +1,38 @@
|
||||
import { Router, Request, Response } from "express"
|
||||
import { getTokenPrice } from "@/lib/tokens"
|
||||
|
||||
const router: Router = Router()
|
||||
|
||||
// route: source_network=ETHEREUM_SEPOLIA&source_token=USDC&destination_network=ARBITRUM_SEPOLIA&destination_token=USDC&amount=1.245766&refuel=false&use_deposit_address=false
|
||||
// description:
|
||||
// method: GET and it's public
|
||||
router.get("/", async (req: Request, res: Response) => {
|
||||
try {
|
||||
// Access the query parameters
|
||||
const { source_network, source_token, destination_network, destination_token, amount, refuel, use_deposit_address } = req.query
|
||||
|
||||
const [sourcePrice, destinationPrice] = await Promise.all([getTokenPrice(String(source_token)), getTokenPrice(String(destination_token))])
|
||||
|
||||
res.status(200).json({
|
||||
data: {
|
||||
quote: {
|
||||
receive_amount: (Number(amount) * sourcePrice) / destinationPrice,
|
||||
min_receive_amount: 0.975,
|
||||
blockchain_fee: 0.145766, //we need to estimate blockchain fee.
|
||||
service_fee: 0.01, //our bridge service fee is 1%. or We should make no fee for our bridge currently.
|
||||
avg_completion_time: "00:00:47.4595530", // it should be about 20 min for btc, and 3 ~ 4 mins for evm chains.
|
||||
refuel_in_source: null,
|
||||
slippage: 0.025,
|
||||
total_fee: 0.245766,
|
||||
total_fee_in_usd: 0.245766
|
||||
},
|
||||
refuel: null,
|
||||
reward: {}
|
||||
}
|
||||
})
|
||||
} catch (error: any) {
|
||||
res.status(500).json({ error: error })
|
||||
}
|
||||
})
|
||||
|
||||
export default router
|
||||
@@ -0,0 +1,44 @@
|
||||
import { Router, Request, Response } from "express"
|
||||
import { getTokenPrice } from "@/lib/tokens"
|
||||
|
||||
const router: Router = Router()
|
||||
|
||||
// route: /rate/source_network/source_asset/destination_network/destination_asset?amount=&version=
|
||||
// description:
|
||||
// method: GET and it's public
|
||||
router.get("/:source_network/:source_asset/:destination_network/:destination_asset", async (req: Request, res: Response) => {
|
||||
try {
|
||||
// Access the route parameters
|
||||
const { source_network, source_asset, destination_network, destination_asset } = req.params;
|
||||
|
||||
// Access the query parameters
|
||||
const amount = req.query.amount;
|
||||
const version = req.query.version;
|
||||
|
||||
const [sourcePrice, destinationPrice] = await Promise.all([
|
||||
getTokenPrice(source_asset),
|
||||
getTokenPrice(destination_asset)
|
||||
]);
|
||||
|
||||
res.status(200).json({
|
||||
data: {
|
||||
wallet_fee_in_usd: 10,
|
||||
wallet_fee: 0.1,
|
||||
wallet_receive_amount: Number(amount),
|
||||
manual_fee_in_usd: 0,
|
||||
manual_fee: 0,
|
||||
manual_receive_amount: Number(amount) * sourcePrice / destinationPrice,
|
||||
avg_completion_time: {
|
||||
total_minutes: 2,
|
||||
total_seconds: 0,
|
||||
total_hours: 0,
|
||||
},
|
||||
fee_usd_price: 10,
|
||||
}
|
||||
})
|
||||
} catch (error: any) {
|
||||
res.status(500).json({ error: error })
|
||||
}
|
||||
})
|
||||
|
||||
export default router
|
||||
@@ -15,7 +15,6 @@ router.get("/", async (req: Request, res: Response) => {
|
||||
const isMainnet = version ? (version === "mainnet") : true
|
||||
const settings = isMainnet ? mainnetSettings : testnetSettings;
|
||||
|
||||
console.log("🚀 ~ settings:", settings)
|
||||
res.status(200).json({ data: settings })
|
||||
}
|
||||
catch (error: any) {
|
||||
|
||||
@@ -6,6 +6,9 @@ import swaps from "@/routes/swaps"
|
||||
import explorer from "@/routes/explorer"
|
||||
import settings from "@/routes/settings"
|
||||
import tokens from "@/routes/tokens"
|
||||
import limits from "@/routes/limits"
|
||||
import quotes from "@/routes/quotes"
|
||||
import rate from "@/routes/rate"
|
||||
|
||||
dotenv.config()
|
||||
|
||||
@@ -20,6 +23,9 @@ app.use("/api/swaps", swaps)
|
||||
app.use("/api/explorer", explorer)
|
||||
app.use("/api/settings", settings)
|
||||
app.use("/api/tokens", tokens)
|
||||
app.use("/api/limits", limits)
|
||||
app.use("/api/quotes", quotes)
|
||||
app.use("/api/rate", rate)
|
||||
|
||||
app.get("/", async (req, res) => {
|
||||
res.json(">>> Hello world. We are LUX!!!")
|
||||
|
||||
@@ -12,8 +12,6 @@ export const mainnetSettings = {
|
||||
exchanges: mainnetExchanges,
|
||||
networks: [...mainnetNetworks, ...testnetNetworks]
|
||||
},
|
||||
sources: [],
|
||||
destinations: [],
|
||||
error: null
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user