import ButtonGroup from '@components/forms/ButtonGroup' import Input from '@components/forms/Input' import Button from '@components/shared/Button' import Switch from '@components/forms/Switch' import { useWallet } from '@solana/wallet-adapter-react' import mangoStore from '@store/mangoStore' import useLocalStorageState from 'hooks/useLocalStorageState' import { useTranslation } from 'next-i18next' import { ChangeEvent, useCallback, useEffect, useMemo, useState } from 'react' import { PRIORITY_FEE_KEY, RPC_PROVIDER_KEY, USE_ORDERBOOK_FEED_KEY, } from 'utils/constants' import Tooltip from '@components/shared/Tooltip' export const TRITON_DEDICATED_URL = process.env.NEXT_PUBLIC_TRITON_TOKEN ? `https://mango.rpcpool.com/${process.env.NEXT_PUBLIC_TRITON_TOKEN}` : 'https://mango.rpcpool.com/946ef7337da3f5b8d3e4a34e7f88' const RPC_URLS = [ { label: 'Triton Shared', value: process.env.NEXT_PUBLIC_ENDPOINT || TRITON_DEDICATED_URL, }, { label: 'Triton Dedicated', value: TRITON_DEDICATED_URL, }, // { // label: 'Genesys Go', // value: 'https://mango.genesysgo.net', // }, { label: 'Custom', value: '' }, ] export const PRIORITY_FEE_LEVELS = [ { label: 'None', value: 0 }, { label: 'Low', value: 1.2 }, // +20% { label: 'High', value: 2 }, // +100% ] export const DEFAULT_PRIORITY_FEE = 1 export const DEFAULT_PRIORITY_FEE_LEVEL = PRIORITY_FEE_LEVELS[1] const RpcSettings = () => { const { t } = useTranslation('settings') const actions = mangoStore.getState().actions const { wallet } = useWallet() const [customUrl, setCustomUrl] = useState('') const [showCustomForm, setShowCustomForm] = useState(false) const [rpcEndpointProvider, setRpcEndpointProvider] = useLocalStorageState( RPC_PROVIDER_KEY, RPC_URLS[0].value, ) const [storedPriorityFeeLevel, setStoredPriorityFeeLevel] = useLocalStorageState(PRIORITY_FEE_KEY, DEFAULT_PRIORITY_FEE_LEVEL) const [storedUseOrderbookFeed, setStoredUseOrderbookFeed] = useLocalStorageState(USE_ORDERBOOK_FEED_KEY, true) const rpcEndpoint = useMemo(() => { return ( RPC_URLS.find((node) => node.value === rpcEndpointProvider) || { label: 'Custom', value: rpcEndpointProvider, } ) }, [rpcEndpointProvider]) const priorityFee = useMemo(() => { return ( PRIORITY_FEE_LEVELS.find( (node) => node.value === storedPriorityFeeLevel, ) || DEFAULT_PRIORITY_FEE_LEVEL ) }, [storedPriorityFeeLevel]) const handleSetEndpointProvider = (provider: string) => { const endpointProvider = RPC_URLS.find( (node) => node.label === provider, ) || { label: 'Custom', value: rpcEndpointProvider } setRpcEndpointProvider(endpointProvider.value) if (provider !== 'Custom') { setShowCustomForm(false) actions.updateConnection(endpointProvider.value) } } const handlePriorityFee = useCallback( (label: string) => { const fee = PRIORITY_FEE_LEVELS.find((fee) => fee.label === label) if (fee) { setStoredPriorityFeeLevel(fee?.value) if (wallet) { actions.connectMangoClientWithWallet(wallet) } } }, [setStoredPriorityFeeLevel, actions, wallet], ) useEffect(() => { if (rpcEndpoint.label === 'Custom') { setShowCustomForm(true) setCustomUrl(rpcEndpoint.value) } }, [rpcEndpoint]) const handleSaveCustomEndpoint = () => { if (!customUrl) return setRpcEndpointProvider(customUrl) actions.updateConnection(customUrl) } return ( <>

{t('rpc')}

{t('rpc-provider')}

handleSetEndpointProvider(v)} values={RPC_URLS.map((val) => val.label)} /> {showCustomForm ? (
) => setCustomUrl(e.target.value) } />
) : null}

Priority Fee

handlePriorityFee(v)} values={PRIORITY_FEE_LEVELS.map((val) => val.label)} /> {/* {showCustomForm ? (
) => setCustomUrl(e.target.value) } />
) : null} */}

{t('settings:orderbook-bandwidth-saving')}

setStoredUseOrderbookFeed(!storedUseOrderbookFeed)} />
) } export default RpcSettings