diff --git a/apps/recovery-relay/components/WithdrawModal/CreateTransaction/index.tsx b/apps/recovery-relay/components/WithdrawModal/CreateTransaction/index.tsx index 1fa1f88e..3aa15302 100644 --- a/apps/recovery-relay/components/WithdrawModal/CreateTransaction/index.tsx +++ b/apps/recovery-relay/components/WithdrawModal/CreateTransaction/index.tsx @@ -25,6 +25,7 @@ import { LateInitConnectedWallet } from '../../../lib/wallets/LateInitConnectedW import { useSettings } from '../../../context/Settings'; import { Jetton } from '../../../lib/wallets/Jetton'; import { ERC20 } from '../../../lib/wallets/ERC20'; +import { TRC20 } from '../../../lib/wallets/TRC20'; const logger = getLogger(LOGGER_NAME_RELAY); @@ -178,6 +179,11 @@ export const CreateTransaction = ({ asset, inboundRelayParams, setSignTxResponse (derivation as ERC20).setToAddress(toAddress); (derivation as ERC20).setNativeAsset(asset.nativeAsset); } + if (asset.address && asset.protocol === 'TRX') { + (derivation as TRC20).setTokenAddress(asset.address); + (derivation as TRC20).setDecimals(asset.decimals); + (derivation as ERC20).setToAddress(toAddress); + } if (rpcUrl !== null) derivation!.setRPCUrl(rpcUrl); // this must remain the last method called on derivation for ERC20 support return await derivation!.prepare?.(toAddress, values.memo); diff --git a/apps/recovery-relay/lib/wallets/ERC20/index.ts b/apps/recovery-relay/lib/wallets/ERC20/index.ts index 0ea48263..45bdcaed 100644 --- a/apps/recovery-relay/lib/wallets/ERC20/index.ts +++ b/apps/recovery-relay/lib/wallets/ERC20/index.ts @@ -50,6 +50,11 @@ export class ERC20 extends EVMBase implements ConnectedWallet { public setDecimals(decimals: number) { this.decimals = decimals; + if (!this.decimals) { + this.relayLogger.error(`ERC20 Token decimals are unavailable: ${this.assetId}`); + throw new Error(`ERC20 Token decimals are unavailable: ${this.assetId}`); + } + this.normalizingFactor = (10 ** decimals).toString(); } diff --git a/apps/recovery-relay/lib/wallets/Jetton/index.ts b/apps/recovery-relay/lib/wallets/Jetton/index.ts index 63773500..4e16d015 100644 --- a/apps/recovery-relay/lib/wallets/Jetton/index.ts +++ b/apps/recovery-relay/lib/wallets/Jetton/index.ts @@ -48,10 +48,15 @@ export class Jetton extends BaseTon implements LateInitConnectedWallet { throw new Error(`TON Jettons: wallet's contract address unavailable`); } + if (!this.decimals) { + this.relayLogger.error(`TON Jettons: token decimals not set`); + throw new Error(`TON Jettons: token decimals not set`); + } + await new Promise((resolve) => setTimeout(resolve, 2000)); const { stack } = await this.client.runMethod(contractAddress, 'get_wallet_data'); - const normalizingFactor = 10 ** this.decimals!; + const normalizingFactor = 10 ** this.decimals; return stack.readNumber() / normalizingFactor; } else { diff --git a/apps/recovery-relay/lib/wallets/TRC20/index.ts b/apps/recovery-relay/lib/wallets/TRC20/index.ts new file mode 100644 index 00000000..6c1773de --- /dev/null +++ b/apps/recovery-relay/lib/wallets/TRC20/index.ts @@ -0,0 +1,137 @@ +import { Tron as BaseTron, Input } from '@fireblocks/wallet-derivation'; +import { ConnectedWallet } from '../ConnectedWallet'; +import { abi } from './trc20.abi'; +import { AccountData } from '../types'; +import { WalletClasses } from '..'; +import { Tron } from '../TRON'; +import zlib from 'node:zlib'; +import { promisify } from 'util'; + +export class TRC20 extends BaseTron implements ConnectedWallet { + constructor(private input: Input) { + super(input); + } + + protected backendWallet: Tron | undefined; + + public rpcURL: string | undefined; + + private decimals: number | undefined; + + private tokenAddress: string | undefined; + + private toAddress: string | undefined; + + private tronWeb: any | undefined; + + public setDecimals(decimals: number): void { + this.decimals = decimals; + } + + public setTokenAddress(tokenAddress: string): void { + this.tokenAddress = tokenAddress; + } + + public setToAddress(toAddress: string) { + this.toAddress = toAddress; + } + + public setRPCUrl(url: string): void { + this.rpcURL = url; + const TronWeb = require('tronweb'); + const { HttpProvider } = TronWeb.providers; + const endpointUrl = this.rpcURL; + const fullNode = new HttpProvider(endpointUrl); + const solidityNode = new HttpProvider(endpointUrl); + const eventServer = new HttpProvider(endpointUrl); + //random prvKey is used for gas estimations + const randomPrvKey = Array.from({ length: 64 }, () => Math.floor(Math.random() * 16).toString(16)).join(''); + this.tronWeb = new TronWeb(fullNode, solidityNode, eventServer, randomPrvKey); + } + + public async getBalance(): Promise { + const contract = await this.tronWeb.contract(abi, this.tokenAddress); + return (await contract.balanceOf(this.address).call()).toNumber(); + } + + public async prepare(): Promise { + if (!this.decimals) { + this.relayLogger.error('TRC20: Decimals not set'); + throw new Error('TRC20: Decimals not set'); + } + const balance = ((await this.getBalance()) / 10 ** this.decimals) as number; + const trxBalance = await this.getTrxBalance(); + + const extraParams = new Map(); + + extraParams.set('t', this.tokenAddress); + extraParams.set('d', this.decimals); + extraParams.set('r', this.rpcURL); + + const feeRate = (await this.estimateGas()) ?? 40_000_000; + + const preparedData: AccountData = { + balance, + feeRate, + extraParams, + insufficientBalance: balance <= 0, + insufficientBalanceForTokenTransfer: trxBalance < feeRate, + }; + + this.relayLogger.logPreparedData('TRC20', preparedData); + return preparedData; + } + + public async broadcastTx(tx: string): Promise { + try { + // decompress and decode + const gunzip = promisify(zlib.gunzip); + const compressedBuffer = Buffer.from(tx, 'base64'); + const decompressedBuffer = await gunzip(new Uint8Array(compressedBuffer)); + const signedTx = JSON.parse(decompressedBuffer.toString()); + + //broadcast the tx + const result = await this.tronWeb.trx.sendRawTransaction(signedTx); + if ('code' in result) { + this.relayLogger.error(`TRC20: Error broadcasting tx: ${JSON.stringify(result, null, 2)}`); + throw new Error(result.code); + } + this.relayLogger.debug(`TRC20: Tx broadcasted: ${result.txid}`); + return result.txid; + } catch (e) { + this.relayLogger.error('TRC20: Error broadcasting tx:', e); + throw new Error(`TRC20: Error broadcasting tx: ${e}`); + } + } + + private async getTrxBalance(): Promise { + return await this.tronWeb.trx.getBalance(this.address); + } + + private async estimateGas(): Promise { + try { + const functionSelector = 'transfer(address,uint256)'; + const balance = await this.getBalance(); + const parameter = [ + { type: 'address', value: this.toAddress }, + { type: 'uint256', value: balance }, + ]; + // Trigger a dry-run of the transaction to estimate energy consumption + const energyEstimate = await this.tronWeb.transactionBuilder.triggerConstantContract( + this.tokenAddress, + functionSelector, + parameter, + ); + + // Get current energy prices from network + const parameterInfo = await this.tronWeb.trx.getChainParameters(); + const energyFeeParameter = parameterInfo.find((param: any) => param.key === 'getEnergyFee'); + const energyFee = energyFeeParameter ? energyFeeParameter.value : 420; + + return energyEstimate.energy * energyFee * 1.1; // add 10% margin + } catch (error) { + this.relayLogger.error(`TRC20: Error estimating gas, ${error}`); + return undefined; + } + } +} diff --git a/apps/recovery-relay/lib/wallets/TRC20/trc20.abi.ts b/apps/recovery-relay/lib/wallets/TRC20/trc20.abi.ts new file mode 100644 index 00000000..40ce38b6 --- /dev/null +++ b/apps/recovery-relay/lib/wallets/TRC20/trc20.abi.ts @@ -0,0 +1,20 @@ +export const abi = [ + { + outputs: [{ type: 'uint256' }], + constant: true, + inputs: [{ name: 'who', type: 'address' }], + name: 'balanceOf', + stateMutability: 'View', + type: 'Function', + }, + { + outputs: [{ type: 'bool' }], + inputs: [ + { name: '_to', type: 'address' }, + { name: '_value', type: 'uint256' }, + ], + name: 'transfer', + stateMutability: 'Nonpayable', + type: 'Function', + }, +]; diff --git a/apps/recovery-relay/lib/wallets/index.ts b/apps/recovery-relay/lib/wallets/index.ts index 209d1dfb..38dc8a7b 100644 --- a/apps/recovery-relay/lib/wallets/index.ts +++ b/apps/recovery-relay/lib/wallets/index.ts @@ -1,4 +1,4 @@ -import { getAllJettons, getAllERC20s } from '@fireblocks/asset-config'; +import { getAllJettons, getAllERC20s, getAllTRC20s } from '@fireblocks/asset-config'; import { Cardano } from './ADA'; import { Cosmos } from './ATOM'; import { Bitcoin, BitcoinCash, BitcoinSV, DASH, DogeCoin, LiteCoin, ZCash } from './BTCBased'; @@ -40,6 +40,7 @@ import { CoreDAO } from './EVM/CORE_COREDAO'; import { Ton } from './TON'; import { Jetton } from './Jetton'; import { ERC20 } from './ERC20'; +import { TRC20 } from './TRC20'; export { ConnectedWallet } from './ConnectedWallet'; const fillJettons = () => { @@ -56,8 +57,8 @@ const fillJettons = () => { }; const fillERC20s = () => { - const jerc20List = getAllERC20s(); - const erc20Tokens = jerc20List.reduce( + const erc20List = getAllERC20s(); + const erc20Tokens = erc20List.reduce( (prev, curr) => ({ ...prev, [curr]: ERC20, @@ -68,6 +69,19 @@ const fillERC20s = () => { return erc20Tokens; }; +const fillTRC20s = () => { + const trc20List = getAllTRC20s(); + const erc20Tokens = trc20List.reduce( + (prev, curr) => ({ + ...prev, + [curr]: TRC20, + }), + {}, + ) as any; + Object.keys(erc20Tokens).forEach((key) => (erc20Tokens[key] === undefined ? delete erc20Tokens[key] : {})); + return erc20Tokens; +}; + export const WalletClasses = { ALGO: Algorand, ALGO_TEST: Algorand, @@ -152,6 +166,7 @@ export const WalletClasses = { TON_TEST: Ton, ...fillJettons(), ...fillERC20s(), + ...fillTRC20s(), } as const; type WalletClass = (typeof WalletClasses)[keyof typeof WalletClasses]; diff --git a/apps/recovery-utility/renderer/lib/wallets/TRC20/index.ts b/apps/recovery-utility/renderer/lib/wallets/TRC20/index.ts new file mode 100644 index 00000000..a7882caf --- /dev/null +++ b/apps/recovery-utility/renderer/lib/wallets/TRC20/index.ts @@ -0,0 +1,52 @@ +/* eslint-disable spaced-comment */ +/* eslint-disable import/order */ +import { Tron as BaseTron } from '@fireblocks/wallet-derivation'; +import { SigningWallet } from '../SigningWallet'; +import { GenerateTxInput, TxPayload } from '../types'; +import zlib from 'zlib'; +import { promisify } from 'util'; + +export class TRC20 extends BaseTron implements SigningWallet { + public async generateTx({ to, amount, feeRate, extraParams }: GenerateTxInput): Promise { + try { + const rpcUrl = extraParams?.get('r'); + + // eslint-disable-next-line global-require + const TronWeb = require('tronweb'); + const { HttpProvider } = TronWeb.providers; + const fullNode = new HttpProvider(rpcUrl); + const solidityNode = new HttpProvider(rpcUrl); + const eventServer = new HttpProvider(rpcUrl); + const tronWeb = new TronWeb(fullNode, solidityNode, eventServer, this.privateKey?.replace('0x', '')); + + const decimals = extraParams?.get('d'); + const tokenAddress = extraParams?.get('t'); + + const functionSelector = 'transfer(address,uint256)'; + const parameter = [ + { type: 'address', value: to }, + { type: 'uint256', value: amount * 10 ** decimals }, + ]; + + const tx = await tronWeb.transactionBuilder.triggerSmartContract( + tokenAddress, + functionSelector, + { feeLimit: feeRate }, + parameter, + ); + + const signedTx = await tronWeb.trx.sign(tx.transaction); + + this.utilityLogger.logSigningTx('TRC20', signedTx); + + //encode and compress for qr code + const gzip = promisify(zlib.gzip); + const compressedTx = (await gzip(JSON.stringify(signedTx))).toString('base64'); + + return { tx: compressedTx }; + } catch (e) { + this.utilityLogger.error('TRC20: Error generating tx:', e); + throw new Error(`TRC20: Error generating tx: ${e}`); + } + } +} diff --git a/apps/recovery-utility/renderer/lib/wallets/index.ts b/apps/recovery-utility/renderer/lib/wallets/index.ts index 01fd0f08..f56c5252 100644 --- a/apps/recovery-utility/renderer/lib/wallets/index.ts +++ b/apps/recovery-utility/renderer/lib/wallets/index.ts @@ -1,5 +1,5 @@ // import { Bitcoin } from './BTC'; -import { assets, getAllJettons } from '@fireblocks/asset-config'; +import { assets, getAllJettons, getAllTRC20s } from '@fireblocks/asset-config'; import { ETC } from '@fireblocks/wallet-derivation'; import { Ripple } from './XRP'; import { Cosmos } from './ATOM'; @@ -23,6 +23,7 @@ import { Celestia } from './CELESTIA'; import { Ton } from './TON'; import { Jetton } from './Jetton'; import { ERC20 } from './ERC20'; +import { TRC20 } from './TRC20'; const fillEVMs = () => { const evms = Object.keys(assets).reduce( @@ -50,6 +51,15 @@ const fillJettons = () => { return jettons; }; +const fillTRC20s = () => { + const trc20List = getAllTRC20s(); + const trc20s: { [key: string]: any } = {}; + for (const trc20 of trc20List) { + trc20s[trc20] = TRC20; + } + return trc20s; +}; + export { SigningWallet as BaseWallet } from './SigningWallet'; export const WalletClasses = { @@ -91,6 +101,7 @@ export const WalletClasses = { CELESTIA: Celestia, CELESTIA_TEST: Celestia, ...fillEVMs(), + ...fillTRC20s(), // EDDSA SOL: Solana, diff --git a/packages/asset-config/README.md b/packages/asset-config/README.md index b8ca5132..f5ab8084 100644 --- a/packages/asset-config/README.md +++ b/packages/asset-config/README.md @@ -56,10 +56,15 @@ To add support for withdrawals of a listed ERC20 on supported EVM chain, make su The token contract address must be present in the `globalAssets` list as the `address` parameter. Note: the tool will support ERC20 token withdrawals only on EVM chains that has withdrawal support for the base asset as well. +### Add a new TRC20 token + +To add support for withdrawals of a listed TRC20 token, make sure the token is listed in `globalAssets.ts`. +The token contract address must be present in the `globalAssets` list as the `address` parameter, make sure that `decimals` is also updated accordingly. + ### Add a new Jetton token To add support for withdrawals of a listed Jetton, make sure the token is listed in `globalAssets.ts`. -The Jetton master contract address must be present in the `globalAssets` list as the `address` parameter. +The Jetton master contract address must be present in the `globalAssets` list as the `address` parameter, make sure that `decimals` is also updated accordingly. ### Token or new Base Asset Support diff --git a/packages/asset-config/assets.ts b/packages/asset-config/assets.ts index 21bd7b83..c91eb384 100644 --- a/packages/asset-config/assets.ts +++ b/packages/asset-config/assets.ts @@ -32,3 +32,13 @@ export function getAllERC20s(): string[] { } return erc20Tokens; } + +export function getAllTRC20s(): string[] { + const trc20s = []; + for (const asset of globalAssets) { + if (asset.protocol === 'TRX' && asset.address) { + trc20s.push(asset.id); + } + } + return trc20s; +} diff --git a/packages/asset-config/config/patches.ts b/packages/asset-config/config/patches.ts index 0de3827b..04d6fcf9 100644 --- a/packages/asset-config/config/patches.ts +++ b/packages/asset-config/config/patches.ts @@ -32,6 +32,14 @@ const getTonExplorerUrl: ExplorerUrlBuilder = (baseUrl) => (type) => (value) => return `${baseUrl}/${value}`; }; +const getTronExplorerUrl: ExplorerUrlBuilder = (baseUrl) => (type) => (value) => { + if (type === 'tx') { + return `${baseUrl}/#/transaction/${value}`; + } + + return `${baseUrl}/#/${type}/${value}`; +}; + const evm = (baseExplorerUrl: string, rpcUrl?: string, transfer = true): NativeAssetPatch => ({ derive: true, transfer, @@ -253,7 +261,7 @@ export const nativeAssetPatches: NativeAssetPatches = { segwit: false, minBalance: false, memo: false, - getExplorerUrl: getStandardExplorer('tronscan.org'), + getExplorerUrl: getTronExplorerUrl('https://tronscan.org'), }, TRX_TEST: { derive: true, diff --git a/packages/asset-config/data/globalAssets.ts b/packages/asset-config/data/globalAssets.ts index 3e38c599..ac8f7db6 100644 --- a/packages/asset-config/data/globalAssets.ts +++ b/packages/asset-config/data/globalAssets.ts @@ -117,6 +117,7 @@ export const globalAssets = [ symbol: '$WIF', name: 'dogwifhat', decimals: 6, + address: 'EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -275,6 +276,7 @@ export const globalAssets = [ symbol: 'ACM', name: 'Acumen Governance Token (Solana)', decimals: 9, + address: 'ACUMENkbnxQPAsN8XrNA11sY3NmXDNKVCqS82EiDqMYB', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -475,6 +477,15 @@ export const globalAssets = [ protocol: 'ETH', testnet: false, }, + { + id: 'ALEPH_ZERO_EVM', + symbol: 'AZERO', + name: 'Aleph Zero EVM', + decimals: 18, + nativeAsset: 'ALEPH_ZERO_EVM', + protocol: 'ETH', + testnet: false, + }, { id: 'ALETH', symbol: 'ALETH', @@ -518,6 +529,7 @@ export const globalAssets = [ symbol: 'USDC', name: 'USDC Test on Algorand', decimals: 6, + address: '10458941', nativeAsset: 'ALGO_TEST', protocol: 'ALGO', testnet: true, @@ -527,6 +539,7 @@ export const globalAssets = [ symbol: 'USDC', name: 'USDC on Algorand', decimals: 6, + address: '31566704', nativeAsset: 'ALGO', protocol: 'ALGO', testnet: false, @@ -536,6 +549,7 @@ export const globalAssets = [ symbol: 'USDT', name: 'USDT on Algorand', decimals: 6, + address: '312769', nativeAsset: 'ALGO', protocol: 'ALGO', testnet: false, @@ -912,6 +926,7 @@ export const globalAssets = [ symbol: 'ATLAS', name: 'Star Atlas (Solana)', decimals: 8, + address: 'ATLASXmbPQxBUYbxPsV97usA3fPQYEqzQBUHgiFCUsXx', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -1706,6 +1721,7 @@ export const globalAssets = [ symbol: 'BLT', name: 'Blocto Token', decimals: 8, + address: 'BLT1noyNr3GttckEVrtcfC6oyK6yV1DpPgSyXbncMwef', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -1813,6 +1829,7 @@ export const globalAssets = [ symbol: 'Bonk', name: 'Bonk_Solana_', decimals: 5, + address: 'DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -1872,6 +1889,7 @@ export const globalAssets = [ symbol: 'BOT', name: 'Starbots Token', decimals: 8, + address: 'AkhdZGVbJXPuQZ53u2LrimCjkRP6ZyxG1SoM85T98eE1', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -2223,6 +2241,7 @@ export const globalAssets = [ symbol: 'CAVE', name: 'Crypto Cavemen (Solana)', decimals: 6, + address: '4SZjjNABoqhbd4hnapbvoEPEqT8mnNkfbEoAwALf1V8t', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -2496,6 +2515,7 @@ export const globalAssets = [ symbol: 'CHICKS', name: 'SolChicks', decimals: 9, + address: 'cxxShYRVcepDudXhe7U62QHvw8uBJoKFifmzggGKVC2', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -2838,6 +2858,7 @@ export const globalAssets = [ symbol: 'CRP', name: 'CropperFinance (Solana)', decimals: 9, + address: 'DubwWZNWiNGMMeeQHPnMATNj77YZPZSAz2WVR5WjLJqz', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -2907,6 +2928,7 @@ export const globalAssets = [ symbol: 'CSOL', name: 'Solend SOL (Solana)', decimals: 9, + address: '5h6ssFpeDeRbzsEHDbTQNH7nVGgsKrZydxdSTnLm6QdV', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -3096,6 +3118,7 @@ export const globalAssets = [ symbol: 'CWAR', name: 'Cryowar Token (Solana)', decimals: 9, + address: 'HfYFjMKNZygfMC8LsQ8LtpPsPxEJoXJx4M6tqi75Hajo', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -3145,6 +3168,7 @@ export const globalAssets = [ symbol: 'CYS', name: 'Cyclos', decimals: 6, + address: 'BRLsMczKuaR5w9vSubF4j8HwEGGprVAyyVgS4EX7DKEg', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -3766,6 +3790,7 @@ export const globalAssets = [ symbol: 'DXL', name: 'Dexlab (Solana)', decimals: 6, + address: 'GsNzxJfFn6zQdJGeYsupJWzUAm57Ba7335mfhWvFiE9Z', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -3794,6 +3819,7 @@ export const globalAssets = [ symbol: 'DYDX', name: 'dYdX (Solana)', decimals: 8, + address: '4Hx6Bj56eGyw8EJrrheM6LBQAvVYRikYCWsALeTrwyRU', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -4188,6 +4214,7 @@ export const globalAssets = [ symbol: 'ETH', name: 'Ether (Solana)', decimals: 8, + address: '7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -4343,6 +4370,7 @@ export const globalAssets = [ symbol: 'EURC', name: 'EURC (Stellar)', decimals: 7, + address: 'GDHU6WRG4IEQXM5NZ4BMPKOXHW76MZM4Y2IEMFDVXBSDP6SJY4ITNPP2', nativeAsset: 'XLM', protocol: 'XLM', testnet: false, @@ -4471,6 +4499,7 @@ export const globalAssets = [ symbol: 'FANT', name: 'Phantasia (Solana)', decimals: 6, + address: 'FANTafPFBAt93BNJVpdu25pGPmca3RfwdsDsRrT3LX1r', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -4866,6 +4895,7 @@ export const globalAssets = [ symbol: 'FTT', name: 'FTX Token (Solana)', decimals: 8, + address: 'EzfgjvkSwthhgHaceR3LnKXUoRkP6NUhfghdaHAj1tUv', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -4965,6 +4995,7 @@ export const globalAssets = [ symbol: 'GARI', name: 'Gari (Solana)', decimals: 9, + address: 'CKaKtYvz6dKPyMvYq9Rh3UBrnNqYZAyd7iF4hJtjUvks', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -5004,6 +5035,7 @@ export const globalAssets = [ symbol: 'GENE', name: 'Genopets (Solana)', decimals: 9, + address: 'GENEtH5amGSi8kHAtQoezp1XEXwZJ8vcuePYnXdKrMYz', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -5082,6 +5114,7 @@ export const globalAssets = [ symbol: 'GMT', name: 'GMT _Solana_', decimals: 9, + address: '7i5KKsX2weiTkry7jA4ZwSuXGhs5eJBEjY8vVxR4pfRx', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -5111,6 +5144,7 @@ export const globalAssets = [ symbol: 'GOFX', name: 'GooseFX', decimals: 9, + address: 'GFX1ZjR2P15tmrSwow6FjyDYcEkoFb4p4gJCpLBjaxHD', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -5277,6 +5311,7 @@ export const globalAssets = [ symbol: 'HBB', name: 'Hubble Protocol Token (SPL)', decimals: 6, + address: 'HBB111SCo9jkCejsZfz8Ec8nH7T6THF8KEKSnvwT6XK6', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -5366,6 +5401,7 @@ export const globalAssets = [ symbol: 'HNT', name: 'Helium Network Token (Solana)', decimals: 8, + address: 'hntyVP6YFm1Hg25TN9WGLqM12b8TQmcknKrdu1oxWux', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -5448,6 +5484,15 @@ export const globalAssets = [ protocol: 'ETH', testnet: false, }, + { + id: 'IBAN_CHF', + symbol: 'CHF', + name: 'CHF (IBAN)', + decimals: 2, + nativeAsset: 'IBAN_CHF', + protocol: 'BANK', + testnet: false, + }, { id: 'IBAN_EUR', symbol: 'EUR', @@ -5457,6 +5502,15 @@ export const globalAssets = [ protocol: 'BANK', testnet: false, }, + { + id: 'IBAN_SGD', + symbol: 'SGD', + name: 'SGD (IBAN)', + decimals: 2, + nativeAsset: 'IBAN_SGD', + protocol: 'BANK', + testnet: false, + }, { id: 'IBAN_USD', symbol: 'USD', @@ -5741,6 +5795,15 @@ export const globalAssets = [ protocol: 'ETH', testnet: false, }, + { + id: 'IOTX_IOTEX', + symbol: 'IOTX', + name: 'IoTex', + decimals: 18, + nativeAsset: 'IOTX_IOTEX', + protocol: 'ETH', + testnet: false, + }, { id: 'IPSX', symbol: 'IPSX', @@ -5796,6 +5859,7 @@ export const globalAssets = [ symbol: 'JTO', name: 'JITO (Solana)', decimals: 9, + address: 'jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -5815,6 +5879,7 @@ export const globalAssets = [ symbol: 'JUP', name: 'Jupiter (Solana)', decimals: 6, + address: 'JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -5943,6 +6008,7 @@ export const globalAssets = [ symbol: 'KIN', name: 'KIN (Solana)', decimals: 5, + address: 'kinXdEcpDQeHPEuQnqmUgtYykqKGVFq6CeVX5iAHJq6', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -5967,6 +6033,15 @@ export const globalAssets = [ protocol: 'ETH', testnet: false, }, + { + id: 'KLAY_KAIA', + symbol: 'KAIA', + name: 'Kaia', + decimals: 18, + nativeAsset: 'KLAY_KAIA', + protocol: 'ETH', + testnet: false, + }, { id: 'KNC', symbol: 'KNC', @@ -6080,6 +6155,7 @@ export const globalAssets = [ symbol: 'LARIX', name: 'Larix (Solana)', decimals: 6, + address: 'Lrxqnh6ZHKbGy3dcrCED43nsoLkM1LTzU2jRfWe8qUC', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -6129,6 +6205,7 @@ export const globalAssets = [ symbol: 'LDO', name: 'Lido DAO Token (Solana)', decimals: 8, + address: 'HZRCwxP2Vq9PCpPXooayhJ2bxTpo5xfpQrwB1svh332p', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -6198,6 +6275,7 @@ export const globalAssets = [ symbol: 'LIKE', name: 'Only1 (Solana)', decimals: 9, + address: '3bRTivrVsitbmCTGtqwp7hxXPsybkjn4XLNtPsHqa3zR', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -6309,6 +6387,15 @@ export const globalAssets = [ protocol: 'ETH', testnet: false, }, + { + id: 'LISK', + symbol: 'ETH', + name: 'Lisk', + decimals: 18, + nativeAsset: 'LISK', + protocol: 'ETH', + testnet: false, + }, { id: 'LIT', symbol: 'LIT', @@ -6482,6 +6569,7 @@ export const globalAssets = [ symbol: 'LU2426951195', name: 'LU2426951195 (Stellar Test)', decimals: 7, + address: 'GD4MGD3UZ5QY6NLH2FMXKOUCHH4NA3NRT3H6KUU5UMDWE52PIPETFBY2', nativeAsset: 'XLM_TEST', protocol: 'XLM', testnet: true, @@ -6606,6 +6694,7 @@ export const globalAssets = [ symbol: 'MBS', name: 'MonkeyBucks (Solana)', decimals: 6, + address: 'Fm9rHUTF5v3hwMLbStjZXqNBBoZyGriQaFM6sTFz3K8A', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -6665,6 +6754,7 @@ export const globalAssets = [ symbol: 'MDF', name: 'MatrixETF DAO Finance (Solana)', decimals: 6, + address: 'ALQ9KMWjFmxVbew3vMkJj3ypbAKuorSgGst6svCHEe2z', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -6684,6 +6774,7 @@ export const globalAssets = [ symbol: 'MEAN', name: 'MEAN (Solana)', decimals: 6, + address: 'MEANeD3XDdUmNMsRGjASkSWdC8prLYsoRJ61pPeHctD', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -6843,6 +6934,7 @@ export const globalAssets = [ symbol: 'MNDE', name: 'Marinade (Solana)', decimals: 9, + address: 'MNDEFzGvMt87ueuHvVU9VcTqsAP5b3fTGPsHuuPA5ey', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -6852,6 +6944,7 @@ export const globalAssets = [ symbol: 'MNGO', name: 'Mango', decimals: 6, + address: 'MangoCzJ36AjZyKwVj3VnYU4GTonjfVEnJmvvWaxLac', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -6900,6 +6993,7 @@ export const globalAssets = [ symbol: 'MSOL', name: 'Marinade staked SOL (Solana)', decimals: 9, + address: 'mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -6999,6 +7093,7 @@ export const globalAssets = [ symbol: 'NAXAR', name: 'Naxar (Solana)', decimals: 4, + address: 'Fp4gjLpTsPqBN6xDGpDHwtnuEofjyiZKxxZxzvJnjxV6', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -7056,6 +7151,7 @@ export const globalAssets = [ symbol: 'NEST', name: 'Nest Arcade (Solana)', decimals: 9, + address: 'Czt7Fc4dz6BpLh2vKiSYyotNK2uPPDhvbWrrLeD9QxhV', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -7155,6 +7251,7 @@ export const globalAssets = [ symbol: 'NINJA', name: 'NINJA', decimals: 6, + address: 'FgX1WD9WzMU3yLwXaFSarPfkgzjLb2DZCqmkx9ExpuvJ', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -7244,6 +7341,7 @@ export const globalAssets = [ symbol: 'NPT', name: 'NPT (Tron)', decimals: 6, + address: 'TQTShAfjdRztg8id1mrQPaNT6ccdK1HviG', nativeAsset: 'TRX', protocol: 'TRX', testnet: false, @@ -7268,6 +7366,15 @@ export const globalAssets = [ protocol: 'ETH', testnet: false, }, + { + id: 'NTRN', + symbol: 'NTRN', + name: 'Neutron', + decimals: 6, + nativeAsset: 'NTRN', + protocol: 'COSMOS', + testnet: false, + }, { id: 'NU', symbol: 'NU', @@ -7283,6 +7390,7 @@ export const globalAssets = [ symbol: 'NXDB', name: 'Nicoswap coin (DigitalBits)', decimals: 7, + address: 'GBG4NNAO36LKRDOUE3J3TPZYXGF2J34CW4FRFE5SLL65ED54E7LFBMKK', nativeAsset: 'XDB', protocol: 'XDB', testnet: false, @@ -7529,6 +7637,7 @@ export const globalAssets = [ symbol: 'ORCA', name: 'Orca', decimals: 6, + address: 'orcaEKTdK7LKz57vaAYr9QeNsVEPfiu6QeMU1kektZE', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -7739,6 +7848,42 @@ export const globalAssets = [ protocol: 'ETH', testnet: false, }, + { + id: 'PEERACCOUNTTRANSFER_CHF', + symbol: 'CHF', + name: 'CHF (Peer Transfer)', + decimals: 2, + nativeAsset: 'PEERACCOUNTTRANSFER_CHF', + protocol: 'BANK', + testnet: false, + }, + { + id: 'PEERACCOUNTTRANSFER_EUR', + symbol: 'EUR', + name: 'EUR (Peer Transfer)', + decimals: 2, + nativeAsset: 'PEERACCOUNTTRANSFER_EUR', + protocol: 'BANK', + testnet: false, + }, + { + id: 'PEERACCOUNTTRANSFER_SGD', + symbol: 'SGD', + name: 'SGD (Peer Transfer)', + decimals: 2, + nativeAsset: 'PEERACCOUNTTRANSFER_SGD', + protocol: 'BANK', + testnet: false, + }, + { + id: 'PEERACCOUNTTRANSFER_USD', + symbol: 'USD', + name: 'USD (Peer Transfer)', + decimals: 2, + nativeAsset: 'PEERACCOUNTTRANSFER_USD', + protocol: 'BANK', + testnet: false, + }, { id: 'PENDLE', symbol: 'PENDLE', @@ -7819,6 +7964,15 @@ export const globalAssets = [ protocol: 'ETH', testnet: false, }, + { + id: 'PLUME', + symbol: 'ETH', + name: 'Plume', + decimals: 18, + nativeAsset: 'PLUME', + protocol: 'ETH', + testnet: false, + }, { id: 'PMA', symbol: 'PMA', @@ -7864,6 +8018,7 @@ export const globalAssets = [ symbol: 'POLIS', name: 'Star Atlas DAO', decimals: 8, + address: 'poLisWXnNRwC6oBu1vHiuKQzFjGL4XDSu4g9qjz9qVk', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -8003,6 +8158,7 @@ export const globalAssets = [ symbol: 'PRT', name: 'Parrot Protocol (Solana)', decimals: 6, + address: 'PRT88RkA4Kg5z7pKnezeNH4mafTvtQdfFgpQTGRjz44', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -8102,6 +8258,7 @@ export const globalAssets = [ symbol: 'PYTH', name: 'Pyth Network (Solana)', decimals: 6, + address: 'HZ1JovNiVvGrGNiiYvEozEVgZ58xaU3RKwX8eACQBCt3', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -8116,6 +8273,16 @@ export const globalAssets = [ protocol: 'ETH', testnet: false, }, + { + id: 'PYUSD_SOL', + symbol: 'PYUSD', + name: 'PayPal USD (Solana)', + decimals: 6, + address: '2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo', + nativeAsset: 'SOL', + protocol: 'SOL', + testnet: false, + }, { id: 'QASH', symbol: 'QASH', @@ -8311,6 +8478,7 @@ export const globalAssets = [ symbol: 'RAY', name: 'Raydium (Solana)', decimals: 6, + address: '4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -8388,10 +8556,20 @@ export const globalAssets = [ symbol: 'REAL', name: 'Realy Token (Solana)', decimals: 9, + address: 'AD27ov5fVU2XzwsbvnFvb1JpCBaCB5dRXrczV9CqSVGb', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, }, + { + id: 'REDBELLY', + symbol: 'RBNT', + name: 'Redbelly', + decimals: 18, + nativeAsset: 'REDBELLY', + protocol: 'ETH', + testnet: false, + }, { id: 'REDBELLY_TEST', symbol: 'RBNT', @@ -8436,6 +8614,7 @@ export const globalAssets = [ symbol: 'RENDER', name: 'Render Token (Solana)', decimals: 8, + address: 'rndrizKT3MK1iimdxRdWabcF7Zg7AR5T4nud4EkHBof', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -8545,6 +8724,7 @@ export const globalAssets = [ symbol: 'RIN', name: 'Aldrin (Solana)', decimals: 9, + address: 'E5ndSkaB17Dm7CsD22dvcjfrYSDLCxFcMd6z8ddCk5wp', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -8693,6 +8873,7 @@ export const globalAssets = [ symbol: 'RUN', name: 'Run Token (Solana)', decimals: 9, + address: '6F9XriABHfWhit6zmMUYAQBSy6XK5VF1cHXuW5LDpRtC', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -8770,6 +8951,7 @@ export const globalAssets = [ symbol: 'SAMO', name: 'Samoyed Coin (Solana)', decimals: 9, + address: '7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -8809,6 +8991,7 @@ export const globalAssets = [ symbol: 'SB', name: 'SuperBonds Token (Solana)', decimals: 6, + address: 'SuperbZyz7TsSdSoFAZ6RYHfAWe9NmjXBLVQpS8hqdx', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -8818,6 +9001,7 @@ export const globalAssets = [ symbol: 'SBR', name: 'Saber Protocol Token (Solana)', decimals: 6, + address: 'Saber2gLauYim4Mvftnrasomsv6NvAuncvMEZwcLpD1', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -8855,6 +9039,7 @@ export const globalAssets = [ symbol: 'SCT', name: 'SolClout (Solana)', decimals: 9, + address: '4Te4KJgjtnZe4aE2zne8G4NPfrPjCwDmaiEx9rKnyDVZ', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -8864,6 +9049,7 @@ export const globalAssets = [ symbol: 'SCY', name: 'Synchrony (Solana)', decimals: 9, + address: 'SCYfrGCw8aDiqdgcpdGjV6jp4UVVQLuphxTDLNWu36f', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -9047,6 +9233,7 @@ export const globalAssets = [ symbol: 'SHIB', name: 'SHIBA INU (Solana)', decimals: 8, + address: 'CiKu4eHsVrc1eueVQeHn7qhXTcVu95gSQmBpX4utjL9z', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -9056,6 +9243,7 @@ export const globalAssets = [ symbol: 'SHILL', name: 'Project SEED Token (Solana)', decimals: 6, + address: '6cVgJUqo4nmvQpbgrDZwyfd6RwWw5bfnCamS3M9N1fd', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -9105,6 +9293,7 @@ export const globalAssets = [ symbol: 'SHX', name: 'Stronghold SHx (Stellar)', decimals: 7, + address: 'GDSTRSHXHGJ7ZIVRBXEYE5Q74XUVCUSEKEBR7UCHEUUEK72N7I7KJ6JH', nativeAsset: 'XLM', protocol: 'XLM', testnet: false, @@ -9172,6 +9361,7 @@ export const globalAssets = [ symbol: 'SLC', name: 'Solice', decimals: 6, + address: 'METAmTMXwdb8gYzyCPfXXFmZZw4rUsXX58PNsDg7zjL', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -9181,6 +9371,7 @@ export const globalAssets = [ symbol: 'SLIM', name: 'Solanium (Solana)', decimals: 6, + address: 'xxxxa1sKNGwFtw2kFn8XauW9xq8hBZ5kVtcSesTT9fW', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -9190,6 +9381,7 @@ export const globalAssets = [ symbol: 'SLND', name: 'Solend (Solana)', decimals: 6, + address: 'SLNDpmoWTVADgEdndyvWzroNL7zSi1dF9PC3xHGtPwp', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -9239,6 +9431,7 @@ export const globalAssets = [ symbol: 'SLRS', name: 'Solrise Finance (Solana)', decimals: 6, + address: 'SLRSSpSLUTP7okbCUBYStWCo1vUgyt775faPqz8HUMr', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -9335,6 +9528,7 @@ export const globalAssets = [ symbol: 'SOETH', name: 'Wrapped Ethereum (Solana)', decimals: 6, + address: '2FPyTwcZLUg1MDrwsyoP4D6s1tM7hAkHYRjkNb5w6Pxk', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -9373,6 +9567,7 @@ export const globalAssets = [ symbol: 'MAPS', name: 'MAPS (Solana)', decimals: 6, + address: 'MAPS41MDahZ9QdKXhVa4dWB9RuyfV4XqhyAZ8XcYepb', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -9382,6 +9577,7 @@ export const globalAssets = [ symbol: 'OXY', name: 'Oxygen (Solana)', decimals: 6, + address: 'z3dn17yLaGMKffVogeFHQ9zWVcXgqgf3PQnDsNs2g6M', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -9391,6 +9587,7 @@ export const globalAssets = [ symbol: 'SRM', name: 'Serum (Solana)', decimals: 6, + address: 'SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -9409,6 +9606,7 @@ export const globalAssets = [ symbol: 'TTOKEN', name: 'Solana Test Token', decimals: 9, + address: 'FYEEA9iZJpad1ZCkigi9BvkCNcW4QNun23hEPrAfELDA', nativeAsset: 'SOL_TEST', protocol: 'SOL', testnet: true, @@ -9418,6 +9616,7 @@ export const globalAssets = [ symbol: 'USDC', name: 'USD Coin (Solana)', decimals: 6, + address: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -9427,6 +9626,7 @@ export const globalAssets = [ symbol: 'USDT', name: 'USDT (Solana)', decimals: 6, + address: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -9456,6 +9656,7 @@ export const globalAssets = [ symbol: 'SOLX', name: 'Soldex (Solana)', decimals: 9, + address: 'CH74tuRLTYcxG7qNJCsV9rghfLXJCQJbsu7i52a8F1Gn', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -9475,6 +9676,7 @@ export const globalAssets = [ symbol: 'SONAR', name: 'Sonar Watch (Solana)', decimals: 9, + address: 'sonarX4VtVkQemriJeLm6CKeW3GDMyiBnnAEMw1MRAE', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -9552,6 +9754,7 @@ export const globalAssets = [ symbol: 'SPWN', name: 'Bitspawn Token (Solana)', decimals: 9, + address: '5U9QqCPhqXAJcEv9uyzFJd5zhN93vuPk1aNNkXnUfPnt', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -9621,6 +9824,7 @@ export const globalAssets = [ symbol: 'STEP', name: 'Step (Solana)', decimals: 9, + address: 'StepAscQoEioFxxWGnh2sLBDFp9d8rvKz2Yp39iDpyT', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -9780,6 +9984,7 @@ export const globalAssets = [ symbol: 'STR', name: 'Solster', decimals: 9, + address: '9zoqdwEBKWEi9G5Ze8BSkdmppxGgVv1Kw4LuigDiNr9m', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -9799,6 +10004,7 @@ export const globalAssets = [ symbol: 'STSOL', name: 'Lido Staked SOL (Solana)', decimals: 9, + address: '7dHbWXmci3dT8UFYWYZweBLXgycu7Y3iL6trKn1Y7ARj', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -9868,6 +10074,7 @@ export const globalAssets = [ symbol: 'SUNNY', name: 'Sunny Governance Token (Solana)', decimals: 6, + address: 'SUNNYWgPQmFxe9wTZzNK7iPnJ3vYDrkgnxJRJm1s3ag', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -9917,6 +10124,7 @@ export const globalAssets = [ symbol: 'SUSHI', name: 'SushiToken (Solana)', decimals: 8, + address: 'ChVzxWRmrTeSgwd3Ui3UumcN8KX7VK3WaD4KGeSKpypj', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -9926,6 +10134,7 @@ export const globalAssets = [ symbol: 'SVT', name: 'Solvent', decimals: 6, + address: 'svtMpL5eQzdmB3uqK9NXaQkq8prGZoKQFNVJghdWCkV', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -9935,6 +10144,7 @@ export const globalAssets = [ symbol: 'SWEAT', name: 'SWEAT', decimals: 18, + address: 'token.sweat', nativeAsset: 'NEAR', protocol: 'NEAR', testnet: false, @@ -9994,6 +10204,7 @@ export const globalAssets = [ symbol: 'SYP', name: 'Sypool (Solana)', decimals: 9, + address: 'FnKE9n6aGjQoNWRBZXy4RW6LZVao7qwBonUbiD7edUmZ', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -10003,6 +10214,7 @@ export const globalAssets = [ symbol: 't14', name: 't14', decimals: 6, + address: 'rDFUVuBZmdACfEm44ieCu73CE75pdi4fXa', nativeAsset: 'XRP_TEST', protocol: 'XRP', testnet: true, @@ -10012,6 +10224,7 @@ export const globalAssets = [ symbol: 'TAB1', name: 'TAB1 (Stellar Test)', decimals: 7, + address: 'GCWAT6HJIHKNCA6UELZCIRLXP44RDVVPN2NOFNVLFOEOXG7GMK7AOSH3', nativeAsset: 'XLM_TEST', protocol: 'XLM', testnet: true, @@ -10384,6 +10597,7 @@ export const globalAssets = [ symbol: 'USDC', name: 'USD Coin (Tron)', decimals: 6, + address: 'TEkxiTehnzSmSe2XqrBj4w32RUN966rdz8', nativeAsset: 'TRX', protocol: 'TRX', testnet: false, @@ -10393,6 +10607,7 @@ export const globalAssets = [ symbol: 'USDC', name: 'USD Coin Test (Tron)', decimals: 6, + address: 'TFGBSrddCjLJAwuryZ9DUxtEmKv13BPjnh', nativeAsset: 'TRX_TEST', protocol: 'TRX', testnet: true, @@ -10402,6 +10617,7 @@ export const globalAssets = [ symbol: 'USDT', name: 'USD Tether (Tron)', decimals: 6, + address: 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t', nativeAsset: 'TRX', protocol: 'TRX', testnet: false, @@ -10441,6 +10657,7 @@ export const globalAssets = [ symbol: 'TRYB', name: 'BiLira (Solana)', decimals: 6, + address: 'A94X2fRy3wydNShU4dRaDyap2UuoeWJGWyATtyp61WZf', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -10480,6 +10697,7 @@ export const globalAssets = [ symbol: 'TTT', name: 'TabTrader (SOLANA)', decimals: 6, + address: 'FNFKRV3V8DtA3gVJN6UshMiLGYA8izxFwkNWmJbFjmRj', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -10654,11 +10872,22 @@ export const globalAssets = [ protocol: 'ETH', testnet: false, }, + { + id: 'UNI_ETH_TEST5_IXAC', + symbol: 'UNI', + name: 'Uniswap', + decimals: 18, + address: '0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984', + nativeAsset: 'ETH_TEST5', + protocol: 'ETH', + testnet: true, + }, { id: 'UNI_SOL', symbol: 'UNI', name: 'Uniswap (Solana)', decimals: 8, + address: '8FU95xFJhUUkyyCLU13HSzDLs7oC4QZdXQHL6SCeab36', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -10688,6 +10917,7 @@ export const globalAssets = [ symbol: 'UNQ', name: 'UNQ', decimals: 6, + address: 'UNQtEecZ5Zb4gSSVHCAWUQEoNnSVEbWiKCi1v9kdUJJ', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -10885,6 +11115,7 @@ export const globalAssets = [ symbol: 'USDC.e', name: 'USD Coin Bridged', decimals: 6, + address: 'a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.factory.bridge.near', nativeAsset: 'NEAR', protocol: 'NEAR', testnet: false, @@ -10914,6 +11145,7 @@ export const globalAssets = [ symbol: 'USDC', name: 'USD Coin', decimals: 6, + address: '17208628f84f5d6ad33f0da3bbbeb27ffcb398eac501a31bd6ad2011e36133a1', nativeAsset: 'NEAR', protocol: 'NEAR', testnet: false, @@ -10949,7 +11181,7 @@ export const globalAssets = [ { id: 'USDC_POLYGON_NXTB', symbol: 'USDC', - name: 'USD Coin', + name: 'USD Coin (Polygon)', decimals: 6, address: '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359', nativeAsset: 'MATIC_POLYGON', @@ -11061,6 +11293,7 @@ export const globalAssets = [ symbol: 'USDT.e', name: 'USDT Tether Bridged', decimals: 6, + address: 'dac17f958d2ee523a2206206994597c13d831ec7.factory.bridge.near', nativeAsset: 'NEAR', protocol: 'NEAR', testnet: false, @@ -11080,6 +11313,7 @@ export const globalAssets = [ symbol: 'USDT', name: 'USD Tether', decimals: 6, + address: 'usdt.tether-token.near', nativeAsset: 'NEAR', protocol: 'NEAR', testnet: false, @@ -11168,6 +11402,7 @@ export const globalAssets = [ symbol: 'UST', name: 'UST (Solana)', decimals: 6, + address: '9vMJfxuKxXBoEa7rM12mYLMwTacLMLDJqHozw96WQL8i', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -11364,6 +11599,7 @@ export const globalAssets = [ symbol: 'W', name: 'Wormhole', decimals: 6, + address: '85VBFQZC9TZkfaptBWjvUw7YbZjy52A6mjtPGjstQAmQ', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, @@ -11496,6 +11732,16 @@ export const globalAssets = [ protocol: 'ETH', testnet: false, }, + { + id: 'WETH_ETH_TEST5_PU4S', + symbol: 'WETH', + name: 'Wrapped Ether', + decimals: 18, + address: '0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14', + nativeAsset: 'ETH_TEST5', + protocol: 'ETH', + testnet: true, + }, { id: 'WETH_POLYGON', symbol: 'WETH', @@ -11835,6 +12081,7 @@ export const globalAssets = [ symbol: 'ROMA', name: 'ROMA (DigitalBits)', decimals: 7, + address: 'GBJPYIYYLCJED2ETN3YWPG23P77JWIE3SSNHZJPW2FOHKRBXNKF5UEEL', nativeAsset: 'XDB', protocol: 'XDB', testnet: false, @@ -11853,6 +12100,7 @@ export const globalAssets = [ symbol: 'USDS', name: 'USDS (DigitalBits)', decimals: 7, + address: 'GBFOHHXUNGIYJHPLXAC3AKNDDXWR6NSUJSKBMXY452Y4AQBZEUL7EKAB', nativeAsset: 'XDB', protocol: 'XDB', testnet: false, @@ -11862,6 +12110,7 @@ export const globalAssets = [ symbol: 'ZUSD', name: 'ZUSD (DigitalBits)', decimals: 7, + address: 'GBFOHHXUNGIYJHPLXAC3AKNDDXWR6NSUJSKBMXY452Y4AQBZEUL7EKAB', nativeAsset: 'XDB', protocol: 'XDB', testnet: false, @@ -11945,6 +12194,7 @@ export const globalAssets = [ symbol: 'AKN', name: 'Akoin (Stellar)', decimals: 7, + address: 'GACSHAJ2XBNKRNJEVDAII6E2EAASIAMDBCLJ3VKSZEWK3KC7Y7DPXUFX', nativeAsset: 'XLM', protocol: 'XLM', testnet: false, @@ -11954,6 +12204,7 @@ export const globalAssets = [ symbol: 'BRL', name: 'BRL (Stellar)', decimals: 7, + address: 'GDVKY2GU2DRXWTBEYJJWSFXIGBZV6AZNBVVSUHEPZI54LIS6BA7DVVSP', nativeAsset: 'XLM', protocol: 'XLM', testnet: false, @@ -11963,6 +12214,7 @@ export const globalAssets = [ symbol: 'BRZ', name: 'BRZ Token (Stellar)', decimals: 7, + address: 'GABMA6FPH3OJXNTGWO7PROF7I5WPQUZOB4BLTBTP4FK6QV7HWISLIEO2', nativeAsset: 'XLM', protocol: 'XLM', testnet: false, @@ -11972,6 +12224,7 @@ export const globalAssets = [ symbol: 'BTCE', name: 'BTCe Test (Stellar)', decimals: 7, + address: 'GBOPFWZZJZUMTS6KVQAHUUNLMXO424ZF7IWHF6GONLAVCDSN4TBBKCLV', nativeAsset: 'XLM_TEST', protocol: 'XLM', testnet: true, @@ -11981,6 +12234,7 @@ export const globalAssets = [ symbol: 'BTCEM', name: 'BTCEM Test (Stellar)', decimals: 7, + address: 'GBOPFWZZJZUMTS6KVQAHUUNLMXO424ZF7IWHF6GONLAVCDSN4TBBKCLV', nativeAsset: 'XLM_TEST', protocol: 'XLM', testnet: true, @@ -11990,6 +12244,7 @@ export const globalAssets = [ symbol: 'EURE', name: 'EURe Test (Stellar)', decimals: 7, + address: 'GBOPFWZZJZUMTS6KVQAHUUNLMXO424ZF7IWHF6GONLAVCDSN4TBBKCLV', nativeAsset: 'XLM_TEST', protocol: 'XLM', testnet: true, @@ -11999,6 +12254,7 @@ export const globalAssets = [ symbol: 'EUREM', name: 'EUREM Test (Stellar)', decimals: 7, + address: 'GBOPFWZZJZUMTS6KVQAHUUNLMXO424ZF7IWHF6GONLAVCDSN4TBBKCLV', nativeAsset: 'XLM_TEST', protocol: 'XLM', testnet: true, @@ -12008,6 +12264,7 @@ export const globalAssets = [ symbol: 'FBTEST', name: 'Fireblocks Test Token (Stellar)', decimals: 7, + address: 'GC3NA75PU6HD5OWCZ7OHCSAL6HZSELNTTBAGHAOCGHBSAQTVI7GCQK2J', nativeAsset: 'XLM_TEST', protocol: 'XLM', testnet: true, @@ -12017,6 +12274,7 @@ export const globalAssets = [ symbol: 'GYEN', name: 'GMO JPY (Stellar)', decimals: 7, + address: 'GDF6VOEGRWLOZ64PQQGKD2IYWA22RLT37GJKS2EJXZHT2VLAGWLC5TOB', nativeAsset: 'XLM', protocol: 'XLM', testnet: false, @@ -12026,6 +12284,7 @@ export const globalAssets = [ symbol: 'GYEN', name: 'GMO JPY Test (Stellar)', decimals: 7, + address: 'GAQQSET64FFYJLZB3XIFUVPGRDMETG2USH2R7VPUY2E4YEXH7STKRISN', nativeAsset: 'XLM_TEST', protocol: 'XLM', testnet: true, @@ -12035,6 +12294,7 @@ export const globalAssets = [ symbol: 'HODL', name: 'HODL Token (Stellar)', decimals: 7, + address: 'GAQEDFS2JK6JSQO53DWT23TGOLH5ZUZG4O3MNLF3CFUZWEJ6M7MMGJAV', nativeAsset: 'XLM', protocol: 'XLM', testnet: false, @@ -12044,6 +12304,7 @@ export const globalAssets = [ symbol: 'IDK', name: 'IDK (Stellar)', decimals: 7, + address: 'GAVDGVOARGIMZA47POPHGPC2FRDE7I7ZF3NGNNIGDPGEZRMTELFAD6DN', nativeAsset: 'XLM', protocol: 'XLM', testnet: false, @@ -12053,6 +12314,7 @@ export const globalAssets = [ symbol: 'LUNA', name: 'Luna Test (Stellar)', decimals: 7, + address: 'GBDH4456HKE3BNIMIRWRHQDWN2KSOTY3FZFGUJTRZXY33Y3JEJGGFMCT', nativeAsset: 'XLM_TEST', protocol: 'XLM', testnet: true, @@ -12062,6 +12324,7 @@ export const globalAssets = [ symbol: 'NTT', name: 'NTT Test (Stellar)', decimals: 7, + address: 'GBWFD4RZAEMXLBDLVYTGTRZ53IIGLWOAPEMVRF5V62M7FH76QER5JNMI', nativeAsset: 'XLM_TEST', protocol: 'XLM', testnet: true, @@ -12071,6 +12334,7 @@ export const globalAssets = [ symbol: 'ROMA', name: 'ROMA _DigitalBits_', decimals: 7, + address: 'GBJPYIYYLCJED2ETN3YWPG23P77JWIE3SSNHZJPW2FOHKRBXNKF5UEEL', nativeAsset: 'XDB', protocol: 'XDB', testnet: false, @@ -12080,6 +12344,7 @@ export const globalAssets = [ symbol: 'SBDD', name: 'SBDD Issuance Wallet Test (Stellar)', decimals: 7, + address: 'GC74OM3VHSTARP2BNCEFFCU5GUNRXGNYZUORHFVZIZJH7IPISKOVDHM4', nativeAsset: 'XLM_TEST', protocol: 'XLM', testnet: true, @@ -12089,6 +12354,7 @@ export const globalAssets = [ symbol: 'SBDD', name: 'SBDD Distribution Wallet Test (Stellar)', decimals: 7, + address: 'GD7RN27CQZAAYDZZ5WCIFYRSXSFQCB72IKMFEU2LE6V5M7ILZOONALOK', nativeAsset: 'XLM_TEST', protocol: 'XLM', testnet: true, @@ -12098,6 +12364,7 @@ export const globalAssets = [ symbol: 'SIX', name: 'SIX.Network', decimals: 7, + address: 'GDMS6EECOH6MBMCP3FYRYEVRBIV3TQGLOFQIPVAITBRJUMTI6V7A2X6Z', nativeAsset: 'XLM', protocol: 'XLM', testnet: false, @@ -12107,6 +12374,7 @@ export const globalAssets = [ symbol: 'SOLA', name: 'Sola Test (Stellar)', decimals: 7, + address: 'GDFREACG4LEESEGBBQZKSMS7FS47YNULFKBKFP5WGNKEHXOGNQVGSZHV', nativeAsset: 'XLM_TEST', protocol: 'XLM', testnet: true, @@ -12125,6 +12393,7 @@ export const globalAssets = [ symbol: 'TLFTST', name: 'TLFTST Test (Stellar)', decimals: 7, + address: 'GBN54AOKMC6H4Q25Y623IRVUJHVREZJV7DQEJKQ26WISKQZDY4MC6VI3', nativeAsset: 'XLM_TEST', protocol: 'XLM', testnet: true, @@ -12134,6 +12403,7 @@ export const globalAssets = [ symbol: 'USDC', name: 'USD Coin (Stellar)', decimals: 7, + address: 'GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN', nativeAsset: 'XLM', protocol: 'XLM', testnet: false, @@ -12143,6 +12413,7 @@ export const globalAssets = [ symbol: 'USDC', name: 'USD Coin Test (Stellar)', decimals: 7, + address: 'GBBD47IF6LWK7P7MDEVSCWR7DPUWV3NY3DTQEVFL4NAT4AQH3ZLLFLA5', nativeAsset: 'XLM_TEST', protocol: 'XLM', testnet: true, @@ -12152,6 +12423,7 @@ export const globalAssets = [ symbol: 'WXT', name: 'Wirex Token (Stellar)', decimals: 7, + address: 'GASBLVHS5FOABSDNW5SPPH3QRJYXY5JHA2AOA2QHH2FJLZBRXSG4SWXT', nativeAsset: 'XLM', protocol: 'XLM', testnet: false, @@ -12161,6 +12433,7 @@ export const globalAssets = [ symbol: 'ZUSD', name: 'Z.com USD (Stellar)', decimals: 7, + address: 'GDF6VOEGRWLOZ64PQQGKD2IYWA22RLT37GJKS2EJXZHT2VLAGWLC5TOB', nativeAsset: 'XLM', protocol: 'XLM', testnet: false, @@ -12170,6 +12443,7 @@ export const globalAssets = [ symbol: 'ZUSD', name: 'Z.com USD Test (Stellar)', decimals: 7, + address: 'GAQQSET64FFYJLZB3XIFUVPGRDMETG2USH2R7VPUY2E4YEXH7STKRISN', nativeAsset: 'XLM_TEST', protocol: 'XLM', testnet: true, @@ -12343,6 +12617,7 @@ export const globalAssets = [ symbol: 'YARD', name: 'SolYard Finance (Solana)', decimals: 9, + address: '8RYSc3rrS4X4bvBCtSJnhcpPpMaAJkXnVKZPzANxQHgz', nativeAsset: 'SOL', protocol: 'SOL', testnet: false, diff --git a/packages/asset-config/index.ts b/packages/asset-config/index.ts index d2ff856b..dd9dcef8 100644 --- a/packages/asset-config/index.ts +++ b/packages/asset-config/index.ts @@ -1,10 +1,10 @@ import { orderId, orderAssetById } from './config/sort'; import { isNativeAssetId, isDerivableAssetId, isTestnetAsset } from './util'; -import { assets, getAllJettons, getAllERC20s } from './assets'; +import { assets, getAllJettons, getAllERC20s, getAllTRC20s } from './assets'; export { getAssetConfig, getNativeAssetConfig, getDerivableAssetConfig, isExplorerUrl } from './util'; -export { assets, getAllJettons, getAllERC20s }; +export { assets, getAllJettons, getAllERC20s, getAllTRC20s }; export type * from './types';